blob: 884110cbe905e01a45336b72dee6ebc884bf5716 [file] [log] [blame]
Fariborz Jahanianec991952011-04-25 22:30:02 +00001// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s
Stephen Hines0e2c34f2015-03-23 12:09:02 -07002// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -O0 | FileCheck %s --check-prefix=CHECK_O0
Fariborz Jahaniane42b8a52010-07-26 23:11:03 +00003
4int x;
5int y(void);
6void foo();
7void FUNC() {
Stephen Hines0e2c34f2015-03-23 12:09:02 -07008// CHECK-LABEL: define void @FUNC()
Fariborz Jahaniane42b8a52010-07-26 23:11:03 +00009// CHECK: [[call:%.*]] = call i32 @y
Stephen Hines0e2c34f2015-03-23 12:09:02 -070010// CHECK_O0: [[call:%.*]] = call i32 @y
11// CHECK_O0-NOT: call i64 @llvm.expect
Fariborz Jahaniane42b8a52010-07-26 23:11:03 +000012 if (__builtin_expect (x, y()))
13 foo ();
14}
15
Fariborz Jahanianec991952011-04-25 22:30:02 +000016// rdar://9330105
17void isigprocmask(void);
18long bar();
19
20int main() {
21 (void) __builtin_expect((isigprocmask(), 0), bar());
22}
23
Stephen Hines0e2c34f2015-03-23 12:09:02 -070024// CHECK-LABEL: define i32 @main()
Fariborz Jahanianec991952011-04-25 22:30:02 +000025// CHECK: call void @isigprocmask()
Pirama Arumuga Nainar33337ca2015-05-06 11:48:57 -070026// CHECK: [[C:%.*]] = call i64 (...) @bar()
Stephen Hines0e2c34f2015-03-23 12:09:02 -070027// CHECK_O0: call void @isigprocmask()
Pirama Arumuga Nainar33337ca2015-05-06 11:48:57 -070028// CHECK_O0: [[C:%.*]] = call i64 (...) @bar()
Stephen Hines0e2c34f2015-03-23 12:09:02 -070029// CHECK_O0-NOT: call i64 @llvm.expect
Jakub Staszak558229f2011-07-08 22:45:14 +000030
31
Stephen Hines0e2c34f2015-03-23 12:09:02 -070032// CHECK-LABEL: define i32 @test1
Jakub Staszak558229f2011-07-08 22:45:14 +000033int test1(int x) {
Stephen Hines0e2c34f2015-03-23 12:09:02 -070034// CHECK_O0-NOT: call i64 @llvm.expect
Jakub Staszak558229f2011-07-08 22:45:14 +000035 if (__builtin_expect (x, 1))
36 return 0;
37 return x;
38}
39
Stephen Hines0e2c34f2015-03-23 12:09:02 -070040// CHECK: define i32 @test2
Jakub Staszak558229f2011-07-08 22:45:14 +000041int test2(int x) {
Stephen Hines0e2c34f2015-03-23 12:09:02 -070042// CHECK_O0-NOT: call i64 @llvm.expect
Jakub Staszak558229f2011-07-08 22:45:14 +000043 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}