blob: 653f231cad2720acb21ed4ecd3f51b34763205f2 [file] [log] [blame]
Sanjay Pateldaf34e92015-09-09 22:39:06 +00001// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -disable-llvm-optzns -o - %s -O1 | FileCheck %s
Sanjay Patela24296b2015-09-02 20:01:30 +00002// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -O0 | FileCheck %s --check-prefix=CHECK_O0
3
4// When optimizing, the builtin should be converted to metadata.
5// When not optimizing, there should be no metadata created for the builtin.
6// In both cases, the builtin should be removed from the code.
7
8void foo();
9void branch(int x) {
10// CHECK-LABEL: define void @branch(
11
12// CHECK-NOT: builtin_unpredictable
13// CHECK: !unpredictable [[METADATA:.+]]
Sanjay Patela24296b2015-09-02 20:01:30 +000014
15// CHECK_O0-NOT: builtin_unpredictable
16// CHECK_O0-NOT: !unpredictable
17
18 if (__builtin_unpredictable(x > 0))
19 foo ();
20}
21
Sanjay Patela24296b2015-09-02 20:01:30 +000022int unpredictable_switch(int x) {
Sanjay Pateldaf34e92015-09-09 22:39:06 +000023// CHECK-LABEL: @unpredictable_switch(
24
25// CHECK-NOT: builtin_unpredictable
26// CHECK: !unpredictable [[METADATA:.+]]
27
28// CHECK_O0-NOT: builtin_unpredictable
29// CHECK_O0-NOT: !unpredictable
30
Sanjay Patela24296b2015-09-02 20:01:30 +000031 switch(__builtin_unpredictable(x)) {
32 default:
33 return 0;
34 case 0:
35 case 1:
36 case 2:
37 return 1;
38 case 5:
39 return 5;
40 };
41
42 return 0;
43}
44
Sanjay Pateldaf34e92015-09-09 22:39:06 +000045// CHECK: [[METADATA]] = !{}
46