brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 13981d2 Raw
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