Home | History | Annotate | Download | only in CodeGen
      1 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s
      2 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -O0 | FileCheck %s --check-prefix=CHECK_O0
      3 
      4 int x;
      5 int y(void);
      6 void foo();
      7 void FUNC() {
      8 // CHECK-LABEL: define void @FUNC()
      9 // CHECK: [[call:%.*]] = call i32 @y
     10 // CHECK_O0: [[call:%.*]] = call i32 @y
     11 // CHECK_O0-NOT: call i64 @llvm.expect
     12   if (__builtin_expect (x, y()))
     13     foo ();
     14 }
     15 
     16 // rdar://9330105
     17 void isigprocmask(void);
     18 long bar();
     19 
     20 int main() {
     21     (void) __builtin_expect((isigprocmask(), 0), bar());
     22 }
     23 
     24 // CHECK-LABEL: define i32 @main()
     25 // CHECK: call void @isigprocmask()
     26 // CHECK: [[C:%.*]] = call i64 (...) @bar()
     27 // CHECK_O0: call void @isigprocmask()
     28 // CHECK_O0: [[C:%.*]] = call i64 (...) @bar()
     29 // CHECK_O0-NOT: call i64 @llvm.expect
     30 
     31 
     32 // CHECK-LABEL: define i32 @test1
     33 int test1(int x) {
     34 // CHECK_O0-NOT: call i64 @llvm.expect
     35   if (__builtin_expect (x, 1))
     36     return 0;
     37   return x;
     38 }
     39 
     40 // CHECK: define i32 @test2
     41 int test2(int x) {
     42 // CHECK_O0-NOT: call i64 @llvm.expect
     43   switch(__builtin_expect(x, 5)) {
     44   default:
     45     return 0;
     46   case 0:
     47   case 1:
     48   case 2:
     49     return 1;
     50   case 5:
     51     return 5;
     52   };
     53 
     54   return 0;
     55 }
     56