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