57 lines · c
1// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -disable-llvm-passes -o - %s -O1 | FileCheck %s 2// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -disable-llvm-passes -o - -x c++ %s -O1 | FileCheck %s 3// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -O0 | FileCheck %s --check-prefix=CHECK_O04 5// When optimizing, the builtin should be converted to metadata.6// When not optimizing, there should be no metadata created for the builtin.7// In both cases, the builtin should be removed from the code.8 9#ifdef __cplusplus10extern "C" {11#endif12 13void foo(void);14void branch(int x) {15// CHECK-LABEL: define{{.*}} void @branch(16 17// CHECK-NOT: builtin_unpredictable18// CHECK: !unpredictable [[METADATA:.+]]19 20// CHECK_O0-NOT: builtin_unpredictable21// CHECK_O0-NOT: !unpredictable 22 23 if (__builtin_unpredictable(x > 0))24 foo ();25}26 27int unpredictable_switch(int x) {28// CHECK-LABEL: @unpredictable_switch(29 30// CHECK-NOT: builtin_unpredictable31// CHECK: !unpredictable [[METADATA:.+]]32 33// CHECK_O0-NOT: builtin_unpredictable34// CHECK_O0-NOT: !unpredictable 35 36 switch(__builtin_unpredictable(x)) {37 default:38 return 0;39 case 0:40 case 1:41 case 2:42 return 1;43 case 5:44 return 5;45 };46 47 return 0;48}49 50#ifdef __cplusplus51}52#endif53 54 55// CHECK: [[METADATA]] = !{}56 57