• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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();
FUNC()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 
main()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
test1(int x)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
test2(int x)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