xref: /minix3/external/bsd/llvm/dist/clang/test/Profile/c-general.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc // Test instrumentation of general constructs in C.
2*0a6a1f1dSLionel Sambuc 
3*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name c-general.c %s -o - -emit-llvm -fprofile-instr-generate | FileCheck -check-prefix=PGOGEN %s
4*0a6a1f1dSLionel Sambuc 
5*0a6a1f1dSLionel Sambuc // RUN: llvm-profdata merge %S/Inputs/c-general.proftext -o %t.profdata
6*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name c-general.c %s -o - -emit-llvm -fprofile-instr-use=%t.profdata | FileCheck -check-prefix=PGOUSE %s
7*0a6a1f1dSLionel Sambuc 
8*0a6a1f1dSLionel Sambuc // Also check compatibility with older profiles.
9*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name c-general.c %s -o - -emit-llvm -fprofile-instr-use=%S/Inputs/c-general.profdata.v1 | FileCheck -check-prefix=PGOUSE %s
10*0a6a1f1dSLionel Sambuc 
11*0a6a1f1dSLionel Sambuc // PGOGEN: @[[SLC:__llvm_profile_counters_simple_loops]] = hidden global [4 x i64] zeroinitializer
12*0a6a1f1dSLionel Sambuc // PGOGEN: @[[IFC:__llvm_profile_counters_conditionals]] = hidden global [11 x i64] zeroinitializer
13*0a6a1f1dSLionel Sambuc // PGOGEN: @[[EEC:__llvm_profile_counters_early_exits]] = hidden global [9 x i64] zeroinitializer
14*0a6a1f1dSLionel Sambuc // PGOGEN: @[[JMC:__llvm_profile_counters_jumps]] = hidden global [22 x i64] zeroinitializer
15*0a6a1f1dSLionel Sambuc // PGOGEN: @[[SWC:__llvm_profile_counters_switches]] = hidden global [19 x i64] zeroinitializer
16*0a6a1f1dSLionel Sambuc // PGOGEN: @[[BSC:__llvm_profile_counters_big_switch]] = hidden global [17 x i64] zeroinitializer
17*0a6a1f1dSLionel Sambuc // PGOGEN: @[[BOC:__llvm_profile_counters_boolean_operators]] = hidden global [8 x i64] zeroinitializer
18*0a6a1f1dSLionel Sambuc // PGOGEN: @[[BLC:__llvm_profile_counters_boolop_loops]] = hidden global [9 x i64] zeroinitializer
19*0a6a1f1dSLionel Sambuc // PGOGEN: @[[COC:__llvm_profile_counters_conditional_operator]] = hidden global [3 x i64] zeroinitializer
20*0a6a1f1dSLionel Sambuc // PGOGEN: @[[MAC:__llvm_profile_counters_main]] = hidden global [1 x i64] zeroinitializer
21*0a6a1f1dSLionel Sambuc // PGOGEN: @[[STC:"__llvm_profile_counters_c-general.c:static_func"]] = internal global [2 x i64] zeroinitializer
22*0a6a1f1dSLionel Sambuc 
23*0a6a1f1dSLionel Sambuc // PGOGEN-LABEL: @simple_loops()
24*0a6a1f1dSLionel Sambuc // PGOUSE-LABEL: @simple_loops()
25*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[SLC]], i64 0, i64 0
simple_loops()26*0a6a1f1dSLionel Sambuc void simple_loops() {
27*0a6a1f1dSLionel Sambuc   int i;
28*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[SLC]], i64 0, i64 1
29*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[SL1:[0-9]+]]
30*0a6a1f1dSLionel Sambuc   for (i = 0; i < 100; ++i) {
31*0a6a1f1dSLionel Sambuc   }
32*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[SLC]], i64 0, i64 2
33*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[SL2:[0-9]+]]
34*0a6a1f1dSLionel Sambuc   while (i > 0)
35*0a6a1f1dSLionel Sambuc     i--;
36*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[SLC]], i64 0, i64 3
37*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[SL3:[0-9]+]]
38*0a6a1f1dSLionel Sambuc   do {} while (i++ < 75);
39*0a6a1f1dSLionel Sambuc 
40*0a6a1f1dSLionel Sambuc   // PGOGEN-NOT: store {{.*}} @[[SLC]],
41*0a6a1f1dSLionel Sambuc   // PGOUSE-NOT: br {{.*}} !prof ![0-9]+
42*0a6a1f1dSLionel Sambuc }
43*0a6a1f1dSLionel Sambuc 
44*0a6a1f1dSLionel Sambuc // PGOGEN-LABEL: @conditionals()
45*0a6a1f1dSLionel Sambuc // PGOUSE-LABEL: @conditionals()
46*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[IFC]], i64 0, i64 0
conditionals()47*0a6a1f1dSLionel Sambuc void conditionals() {
48*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[IFC]], i64 0, i64 1
49*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[IF1:[0-9]+]]
50*0a6a1f1dSLionel Sambuc   for (int i = 0; i < 100; ++i) {
51*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[IFC]], i64 0, i64 2
52*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[IF2:[0-9]+]]
53*0a6a1f1dSLionel Sambuc     if (i % 2) {
54*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[IFC]], i64 0, i64 3
55*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[IF3:[0-9]+]]
56*0a6a1f1dSLionel Sambuc       if (i) {}
57*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[IFC]], i64 0, i64 4
58*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[IF4:[0-9]+]]
59*0a6a1f1dSLionel Sambuc     } else if (i % 3) {
60*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[IFC]], i64 0, i64 5
61*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[IF5:[0-9]+]]
62*0a6a1f1dSLionel Sambuc       if (i) {}
63*0a6a1f1dSLionel Sambuc     } else {
64*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[IFC]], i64 0, i64 6
65*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[IF6:[0-9]+]]
66*0a6a1f1dSLionel Sambuc       if (i) {}
67*0a6a1f1dSLionel Sambuc     }
68*0a6a1f1dSLionel Sambuc 
69*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[IFC]], i64 0, i64 8
70*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[IFC]], i64 0, i64 7
71*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[IF7:[0-9]+]]
72*0a6a1f1dSLionel Sambuc     if (1 && i) {}
73*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[IFC]], i64 0, i64 10
74*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[IFC]], i64 0, i64 9
75*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[IF8:[0-9]+]]
76*0a6a1f1dSLionel Sambuc     if (0 || i) {}
77*0a6a1f1dSLionel Sambuc   }
78*0a6a1f1dSLionel Sambuc 
79*0a6a1f1dSLionel Sambuc   // PGOGEN-NOT: store {{.*}} @[[IFC]],
80*0a6a1f1dSLionel Sambuc   // PGOUSE-NOT: br {{.*}} !prof ![0-9]+
81*0a6a1f1dSLionel Sambuc }
82*0a6a1f1dSLionel Sambuc 
83*0a6a1f1dSLionel Sambuc // PGOGEN-LABEL: @early_exits()
84*0a6a1f1dSLionel Sambuc // PGOUSE-LABEL: @early_exits()
85*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[EEC]], i64 0, i64 0
early_exits()86*0a6a1f1dSLionel Sambuc void early_exits() {
87*0a6a1f1dSLionel Sambuc   int i = 0;
88*0a6a1f1dSLionel Sambuc 
89*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[EEC]], i64 0, i64 1
90*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[EE1:[0-9]+]]
91*0a6a1f1dSLionel Sambuc   if (i) {}
92*0a6a1f1dSLionel Sambuc 
93*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[EEC]], i64 0, i64 2
94*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[EE2:[0-9]+]]
95*0a6a1f1dSLionel Sambuc   while (i < 100) {
96*0a6a1f1dSLionel Sambuc     i++;
97*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[EEC]], i64 0, i64 3
98*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[EE3:[0-9]+]]
99*0a6a1f1dSLionel Sambuc     if (i > 50)
100*0a6a1f1dSLionel Sambuc       break;
101*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[EEC]], i64 0, i64 4
102*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[EE4:[0-9]+]]
103*0a6a1f1dSLionel Sambuc     if (i % 2)
104*0a6a1f1dSLionel Sambuc       continue;
105*0a6a1f1dSLionel Sambuc   }
106*0a6a1f1dSLionel Sambuc 
107*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[EEC]], i64 0, i64 5
108*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[EE5:[0-9]+]]
109*0a6a1f1dSLionel Sambuc   if (i) {}
110*0a6a1f1dSLionel Sambuc 
111*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[EEC]], i64 0, i64 6
112*0a6a1f1dSLionel Sambuc   do {
113*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[EEC]], i64 0, i64 7
114*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[EE6:[0-9]+]]
115*0a6a1f1dSLionel Sambuc     if (i > 75)
116*0a6a1f1dSLionel Sambuc       return;
117*0a6a1f1dSLionel Sambuc     else
118*0a6a1f1dSLionel Sambuc       i++;
119*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[EE7:[0-9]+]]
120*0a6a1f1dSLionel Sambuc   } while (i < 100);
121*0a6a1f1dSLionel Sambuc 
122*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[EEC]], i64 0, i64 8
123*0a6a1f1dSLionel Sambuc   // Never reached -> no weights
124*0a6a1f1dSLionel Sambuc   if (i) {}
125*0a6a1f1dSLionel Sambuc 
126*0a6a1f1dSLionel Sambuc   // PGOGEN-NOT: store {{.*}} @[[EEC]],
127*0a6a1f1dSLionel Sambuc   // PGOUSE-NOT: br {{.*}} !prof ![0-9]+
128*0a6a1f1dSLionel Sambuc }
129*0a6a1f1dSLionel Sambuc 
130*0a6a1f1dSLionel Sambuc // PGOGEN-LABEL: @jumps()
131*0a6a1f1dSLionel Sambuc // PGOUSE-LABEL: @jumps()
132*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 0
jumps()133*0a6a1f1dSLionel Sambuc void jumps() {
134*0a6a1f1dSLionel Sambuc   int i;
135*0a6a1f1dSLionel Sambuc 
136*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 1
137*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[JM1:[0-9]+]]
138*0a6a1f1dSLionel Sambuc   for (i = 0; i < 2; ++i) {
139*0a6a1f1dSLionel Sambuc     goto outofloop;
140*0a6a1f1dSLionel Sambuc     // Never reached -> no weights
141*0a6a1f1dSLionel Sambuc     if (i) {}
142*0a6a1f1dSLionel Sambuc   }
143*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 3
144*0a6a1f1dSLionel Sambuc outofloop:
145*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 4
146*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[JM2:[0-9]+]]
147*0a6a1f1dSLionel Sambuc   if (i) {}
148*0a6a1f1dSLionel Sambuc 
149*0a6a1f1dSLionel Sambuc   goto loop1;
150*0a6a1f1dSLionel Sambuc 
151*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 5
152*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[JM3:[0-9]+]]
153*0a6a1f1dSLionel Sambuc   while (i) {
154*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 6
155*0a6a1f1dSLionel Sambuc   loop1:
156*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 7
157*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[JM4:[0-9]+]]
158*0a6a1f1dSLionel Sambuc     if (i) {}
159*0a6a1f1dSLionel Sambuc   }
160*0a6a1f1dSLionel Sambuc 
161*0a6a1f1dSLionel Sambuc   goto loop2;
162*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 8
163*0a6a1f1dSLionel Sambuc first:
164*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 9
165*0a6a1f1dSLionel Sambuc second:
166*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 10
167*0a6a1f1dSLionel Sambuc third:
168*0a6a1f1dSLionel Sambuc   i++;
169*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 11
170*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[JM5:[0-9]+]]
171*0a6a1f1dSLionel Sambuc   if (i < 3)
172*0a6a1f1dSLionel Sambuc     goto loop2;
173*0a6a1f1dSLionel Sambuc 
174*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 12
175*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[JM6:[0-9]+]]
176*0a6a1f1dSLionel Sambuc   while (i < 3) {
177*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 13
178*0a6a1f1dSLionel Sambuc   loop2:
179*0a6a1f1dSLionel Sambuc     // PGOUSE: switch {{.*}} [
180*0a6a1f1dSLionel Sambuc     // PGOUSE: ], !prof ![[JM7:[0-9]+]]
181*0a6a1f1dSLionel Sambuc     switch (i) {
182*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 15
183*0a6a1f1dSLionel Sambuc     case 0:
184*0a6a1f1dSLionel Sambuc       goto first;
185*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 16
186*0a6a1f1dSLionel Sambuc     case 1:
187*0a6a1f1dSLionel Sambuc       goto second;
188*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 17
189*0a6a1f1dSLionel Sambuc     case 2:
190*0a6a1f1dSLionel Sambuc       goto third;
191*0a6a1f1dSLionel Sambuc     }
192*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 14
193*0a6a1f1dSLionel Sambuc   }
194*0a6a1f1dSLionel Sambuc 
195*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 18
196*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[JM8:[0-9]+]]
197*0a6a1f1dSLionel Sambuc   for (i = 0; i < 10; ++i) {
198*0a6a1f1dSLionel Sambuc     goto withinloop;
199*0a6a1f1dSLionel Sambuc     // never reached -> no weights
200*0a6a1f1dSLionel Sambuc     if (i) {}
201*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 20
202*0a6a1f1dSLionel Sambuc   withinloop:
203*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[JMC]], i64 0, i64 21
204*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[JM9:[0-9]+]]
205*0a6a1f1dSLionel Sambuc     if (i) {}
206*0a6a1f1dSLionel Sambuc   }
207*0a6a1f1dSLionel Sambuc 
208*0a6a1f1dSLionel Sambuc   // PGOGEN-NOT: store {{.*}} @[[JMC]],
209*0a6a1f1dSLionel Sambuc   // PGOUSE-NOT: br {{.*}} !prof ![0-9]+
210*0a6a1f1dSLionel Sambuc }
211*0a6a1f1dSLionel Sambuc 
212*0a6a1f1dSLionel Sambuc // PGOGEN-LABEL: @switches()
213*0a6a1f1dSLionel Sambuc // PGOUSE-LABEL: @switches()
214*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 0
switches()215*0a6a1f1dSLionel Sambuc void switches() {
216*0a6a1f1dSLionel Sambuc   static int weights[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5};
217*0a6a1f1dSLionel Sambuc 
218*0a6a1f1dSLionel Sambuc   // No cases -> no weights
219*0a6a1f1dSLionel Sambuc   switch (weights[0]) {
220*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 2
221*0a6a1f1dSLionel Sambuc   default:
222*0a6a1f1dSLionel Sambuc     break;
223*0a6a1f1dSLionel Sambuc   }
224*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 1
225*0a6a1f1dSLionel Sambuc 
226*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 3
227*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[SW1:[0-9]+]]
228*0a6a1f1dSLionel Sambuc   for (int i = 0, len = sizeof(weights) / sizeof(weights[0]); i < len; ++i) {
229*0a6a1f1dSLionel Sambuc     // PGOUSE: switch {{.*}} [
230*0a6a1f1dSLionel Sambuc     // PGOUSE: ], !prof ![[SW2:[0-9]+]]
231*0a6a1f1dSLionel Sambuc     switch (i[weights]) {
232*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 5
233*0a6a1f1dSLionel Sambuc     case 1:
234*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 6
235*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[SW3:[0-9]+]]
236*0a6a1f1dSLionel Sambuc       if (i) {}
237*0a6a1f1dSLionel Sambuc       // fallthrough
238*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 7
239*0a6a1f1dSLionel Sambuc     case 2:
240*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 8
241*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[SW4:[0-9]+]]
242*0a6a1f1dSLionel Sambuc       if (i) {}
243*0a6a1f1dSLionel Sambuc       break;
244*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 9
245*0a6a1f1dSLionel Sambuc     case 3:
246*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 10
247*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[SW5:[0-9]+]]
248*0a6a1f1dSLionel Sambuc       if (i) {}
249*0a6a1f1dSLionel Sambuc       continue;
250*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 11
251*0a6a1f1dSLionel Sambuc     case 4:
252*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 12
253*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[SW6:[0-9]+]]
254*0a6a1f1dSLionel Sambuc       if (i) {}
255*0a6a1f1dSLionel Sambuc       // PGOUSE: switch {{.*}} [
256*0a6a1f1dSLionel Sambuc       // PGOUSE: ], !prof ![[SW7:[0-9]+]]
257*0a6a1f1dSLionel Sambuc       switch (i) {
258*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 14
259*0a6a1f1dSLionel Sambuc       case 6 ... 9:
260*0a6a1f1dSLionel Sambuc         // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 15
261*0a6a1f1dSLionel Sambuc         // PGOUSE: br {{.*}} !prof ![[SW8:[0-9]+]]
262*0a6a1f1dSLionel Sambuc         if (i) {}
263*0a6a1f1dSLionel Sambuc         continue;
264*0a6a1f1dSLionel Sambuc       }
265*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 13
266*0a6a1f1dSLionel Sambuc 
267*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 16
268*0a6a1f1dSLionel Sambuc     default:
269*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 17
270*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[SW9:[0-9]+]]
271*0a6a1f1dSLionel Sambuc       if (i == len - 1)
272*0a6a1f1dSLionel Sambuc         return;
273*0a6a1f1dSLionel Sambuc     }
274*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 4
275*0a6a1f1dSLionel Sambuc   }
276*0a6a1f1dSLionel Sambuc 
277*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[SWC]], i64 0, i64 18
278*0a6a1f1dSLionel Sambuc   // Never reached -> no weights
279*0a6a1f1dSLionel Sambuc   if (weights[0]) {}
280*0a6a1f1dSLionel Sambuc 
281*0a6a1f1dSLionel Sambuc   // PGOGEN-NOT: store {{.*}} @[[SWC]],
282*0a6a1f1dSLionel Sambuc   // PGOUSE-NOT: br {{.*}} !prof ![0-9]+
283*0a6a1f1dSLionel Sambuc }
284*0a6a1f1dSLionel Sambuc 
285*0a6a1f1dSLionel Sambuc // PGOGEN-LABEL: @big_switch()
286*0a6a1f1dSLionel Sambuc // PGOUSE-LABEL: @big_switch()
287*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 0
big_switch()288*0a6a1f1dSLionel Sambuc void big_switch() {
289*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 1
290*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[BS1:[0-9]+]]
291*0a6a1f1dSLionel Sambuc   for (int i = 0; i < 32; ++i) {
292*0a6a1f1dSLionel Sambuc     // PGOUSE: switch {{.*}} [
293*0a6a1f1dSLionel Sambuc     // PGOUSE: ], !prof ![[BS2:[0-9]+]]
294*0a6a1f1dSLionel Sambuc     switch (1 << i) {
295*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 3
296*0a6a1f1dSLionel Sambuc     case (1 << 0):
297*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 4
298*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[BS3:[0-9]+]]
299*0a6a1f1dSLionel Sambuc       if (i) {}
300*0a6a1f1dSLionel Sambuc       // fallthrough
301*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 5
302*0a6a1f1dSLionel Sambuc     case (1 << 1):
303*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 6
304*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[BS4:[0-9]+]]
305*0a6a1f1dSLionel Sambuc       if (i) {}
306*0a6a1f1dSLionel Sambuc       break;
307*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 7
308*0a6a1f1dSLionel Sambuc     case (1 << 2) ... (1 << 12):
309*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 8
310*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[BS5:[0-9]+]]
311*0a6a1f1dSLionel Sambuc       if (i) {}
312*0a6a1f1dSLionel Sambuc       break;
313*0a6a1f1dSLionel Sambuc     // The branch for the large case range above appears after the case body
314*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[BS6:[0-9]+]]
315*0a6a1f1dSLionel Sambuc 
316*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 9
317*0a6a1f1dSLionel Sambuc     case (1 << 13):
318*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 10
319*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[BS7:[0-9]+]]
320*0a6a1f1dSLionel Sambuc       if (i) {}
321*0a6a1f1dSLionel Sambuc       break;
322*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 11
323*0a6a1f1dSLionel Sambuc     case (1 << 14) ... (1 << 28):
324*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 12
325*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[BS8:[0-9]+]]
326*0a6a1f1dSLionel Sambuc       if (i) {}
327*0a6a1f1dSLionel Sambuc       break;
328*0a6a1f1dSLionel Sambuc     // The branch for the large case range above appears after the case body
329*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[BS9:[0-9]+]]
330*0a6a1f1dSLionel Sambuc 
331*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 13
332*0a6a1f1dSLionel Sambuc     case (1 << 29) ... ((1 << 29) + 1):
333*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 14
334*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[BS10:[0-9]+]]
335*0a6a1f1dSLionel Sambuc       if (i) {}
336*0a6a1f1dSLionel Sambuc       break;
337*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 15
338*0a6a1f1dSLionel Sambuc     default:
339*0a6a1f1dSLionel Sambuc       // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 16
340*0a6a1f1dSLionel Sambuc       // PGOUSE: br {{.*}} !prof ![[BS11:[0-9]+]]
341*0a6a1f1dSLionel Sambuc       if (i) {}
342*0a6a1f1dSLionel Sambuc       break;
343*0a6a1f1dSLionel Sambuc     }
344*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BSC]], i64 0, i64 2
345*0a6a1f1dSLionel Sambuc   }
346*0a6a1f1dSLionel Sambuc 
347*0a6a1f1dSLionel Sambuc   // PGOGEN-NOT: store {{.*}} @[[BSC]],
348*0a6a1f1dSLionel Sambuc   // PGOUSE-NOT: br {{.*}} !prof ![0-9]+
349*0a6a1f1dSLionel Sambuc   // PGOUSE: ret void
350*0a6a1f1dSLionel Sambuc }
351*0a6a1f1dSLionel Sambuc 
352*0a6a1f1dSLionel Sambuc // PGOGEN-LABEL: @boolean_operators()
353*0a6a1f1dSLionel Sambuc // PGOUSE-LABEL: @boolean_operators()
354*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[BOC]], i64 0, i64 0
boolean_operators()355*0a6a1f1dSLionel Sambuc void boolean_operators() {
356*0a6a1f1dSLionel Sambuc   int v;
357*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[BOC]], i64 0, i64 1
358*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[BO1:[0-9]+]]
359*0a6a1f1dSLionel Sambuc   for (int i = 0; i < 100; ++i) {
360*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BOC]], i64 0, i64 2
361*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[BO2:[0-9]+]]
362*0a6a1f1dSLionel Sambuc     v = i % 3 || i;
363*0a6a1f1dSLionel Sambuc 
364*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BOC]], i64 0, i64 3
365*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[BO3:[0-9]+]]
366*0a6a1f1dSLionel Sambuc     v = i % 3 && i;
367*0a6a1f1dSLionel Sambuc 
368*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BOC]], i64 0, i64 5
369*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BOC]], i64 0, i64 4
370*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[BO4:[0-9]+]]
371*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[BO5:[0-9]+]]
372*0a6a1f1dSLionel Sambuc     v = i % 3 || i % 2 || i;
373*0a6a1f1dSLionel Sambuc 
374*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BOC]], i64 0, i64 7
375*0a6a1f1dSLionel Sambuc     // PGOGEN: store {{.*}} @[[BOC]], i64 0, i64 6
376*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[BO6:[0-9]+]]
377*0a6a1f1dSLionel Sambuc     // PGOUSE: br {{.*}} !prof ![[BO7:[0-9]+]]
378*0a6a1f1dSLionel Sambuc     v = i % 2 && i % 3 && i;
379*0a6a1f1dSLionel Sambuc   }
380*0a6a1f1dSLionel Sambuc 
381*0a6a1f1dSLionel Sambuc   // PGOGEN-NOT: store {{.*}} @[[BOC]],
382*0a6a1f1dSLionel Sambuc   // PGOUSE-NOT: br {{.*}} !prof ![0-9]+
383*0a6a1f1dSLionel Sambuc }
384*0a6a1f1dSLionel Sambuc 
385*0a6a1f1dSLionel Sambuc // PGOGEN-LABEL: @boolop_loops()
386*0a6a1f1dSLionel Sambuc // PGOUSE-LABEL: @boolop_loops()
387*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[BLC]], i64 0, i64 0
boolop_loops()388*0a6a1f1dSLionel Sambuc void boolop_loops() {
389*0a6a1f1dSLionel Sambuc   int i = 100;
390*0a6a1f1dSLionel Sambuc 
391*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[BLC]], i64 0, i64 2
392*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[BLC]], i64 0, i64 1
393*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[BL1:[0-9]+]]
394*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[BL2:[0-9]+]]
395*0a6a1f1dSLionel Sambuc   while (i && i > 50)
396*0a6a1f1dSLionel Sambuc     i--;
397*0a6a1f1dSLionel Sambuc 
398*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[BLC]], i64 0, i64 4
399*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[BLC]], i64 0, i64 3
400*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[BL3:[0-9]+]]
401*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[BL4:[0-9]+]]
402*0a6a1f1dSLionel Sambuc   while ((i % 2) || (i > 0))
403*0a6a1f1dSLionel Sambuc     i--;
404*0a6a1f1dSLionel Sambuc 
405*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[BLC]], i64 0, i64 6
406*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[BLC]], i64 0, i64 5
407*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[BL5:[0-9]+]]
408*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[BL6:[0-9]+]]
409*0a6a1f1dSLionel Sambuc   for (i = 100; i && i > 50; --i);
410*0a6a1f1dSLionel Sambuc 
411*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[BLC]], i64 0, i64 8
412*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[BLC]], i64 0, i64 7
413*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[BL7:[0-9]+]]
414*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[BL8:[0-9]+]]
415*0a6a1f1dSLionel Sambuc   for (; (i % 2) || (i > 0); --i);
416*0a6a1f1dSLionel Sambuc 
417*0a6a1f1dSLionel Sambuc   // PGOGEN-NOT: store {{.*}} @[[BLC]],
418*0a6a1f1dSLionel Sambuc   // PGOUSE-NOT: br {{.*}} !prof ![0-9]+
419*0a6a1f1dSLionel Sambuc }
420*0a6a1f1dSLionel Sambuc 
421*0a6a1f1dSLionel Sambuc // PGOGEN-LABEL: @conditional_operator()
422*0a6a1f1dSLionel Sambuc // PGOUSE-LABEL: @conditional_operator()
423*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[COC]], i64 0, i64 0
conditional_operator()424*0a6a1f1dSLionel Sambuc void conditional_operator() {
425*0a6a1f1dSLionel Sambuc   int i = 100;
426*0a6a1f1dSLionel Sambuc 
427*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[COC]], i64 0, i64 1
428*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[CO1:[0-9]+]]
429*0a6a1f1dSLionel Sambuc   int j = i < 50 ? i : 1;
430*0a6a1f1dSLionel Sambuc 
431*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[COC]], i64 0, i64 2
432*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[CO2:[0-9]+]]
433*0a6a1f1dSLionel Sambuc   int k = i ?: 0;
434*0a6a1f1dSLionel Sambuc 
435*0a6a1f1dSLionel Sambuc   // PGOGEN-NOT: store {{.*}} @[[COC]],
436*0a6a1f1dSLionel Sambuc   // PGOUSE-NOT: br {{.*}} !prof ![0-9]+
437*0a6a1f1dSLionel Sambuc }
438*0a6a1f1dSLionel Sambuc 
do_fallthrough()439*0a6a1f1dSLionel Sambuc void do_fallthrough() {
440*0a6a1f1dSLionel Sambuc   for (int i = 0; i < 10; ++i) {
441*0a6a1f1dSLionel Sambuc     int j = 0;
442*0a6a1f1dSLionel Sambuc     do {
443*0a6a1f1dSLionel Sambuc       // The number of exits out of this do-loop via the break statement
444*0a6a1f1dSLionel Sambuc       // exceeds the counter value for the loop (which does not include the
445*0a6a1f1dSLionel Sambuc       // fallthrough count). Make sure that does not violate any assertions.
446*0a6a1f1dSLionel Sambuc       if (i < 8) break;
447*0a6a1f1dSLionel Sambuc       j++;
448*0a6a1f1dSLionel Sambuc     } while (j < 2);
449*0a6a1f1dSLionel Sambuc   }
450*0a6a1f1dSLionel Sambuc }
451*0a6a1f1dSLionel Sambuc 
452*0a6a1f1dSLionel Sambuc // PGOGEN-LABEL: @static_func()
453*0a6a1f1dSLionel Sambuc // PGOUSE-LABEL: @static_func()
454*0a6a1f1dSLionel Sambuc // PGOGEN: store {{.*}} @[[STC]], i64 0, i64 0
static_func()455*0a6a1f1dSLionel Sambuc static void static_func() {
456*0a6a1f1dSLionel Sambuc   // PGOGEN: store {{.*}} @[[STC]], i64 0, i64 1
457*0a6a1f1dSLionel Sambuc   // PGOUSE: br {{.*}} !prof ![[ST1:[0-9]+]]
458*0a6a1f1dSLionel Sambuc   for (int i = 0; i < 10; ++i) {
459*0a6a1f1dSLionel Sambuc   }
460*0a6a1f1dSLionel Sambuc }
461*0a6a1f1dSLionel Sambuc 
462*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SL1]] = !{!"branch_weights", i32 101, i32 2}
463*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SL2]] = !{!"branch_weights", i32 101, i32 2}
464*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SL3]] = !{!"branch_weights", i32 76, i32 2}
465*0a6a1f1dSLionel Sambuc 
466*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[EE1]] = !{!"branch_weights", i32 1, i32 2}
467*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[EE2]] = !{!"branch_weights", i32 52, i32 1}
468*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[EE3]] = !{!"branch_weights", i32 2, i32 51}
469*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[EE4]] = !{!"branch_weights", i32 26, i32 26}
470*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[EE5]] = !{!"branch_weights", i32 2, i32 1}
471*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[EE6]] = !{!"branch_weights", i32 2, i32 26}
472*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[EE7]] = !{!"branch_weights", i32 26, i32 1}
473*0a6a1f1dSLionel Sambuc 
474*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[IF1]] = !{!"branch_weights", i32 101, i32 2}
475*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[IF2]] = !{!"branch_weights", i32 51, i32 51}
476*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[IF3]] = !{!"branch_weights", i32 51, i32 1}
477*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[IF4]] = !{!"branch_weights", i32 34, i32 18}
478*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[IF5]] = !{!"branch_weights", i32 34, i32 1}
479*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[IF6]] = !{!"branch_weights", i32 17, i32 2}
480*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[IF7]] = !{!"branch_weights", i32 100, i32 2}
481*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[IF8]] = !{!"branch_weights", i32 100, i32 2}
482*0a6a1f1dSLionel Sambuc 
483*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[JM1]] = !{!"branch_weights", i32 2, i32 1}
484*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[JM2]] = !{!"branch_weights", i32 1, i32 2}
485*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[JM3]] = !{!"branch_weights", i32 1, i32 2}
486*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[JM4]] = !{!"branch_weights", i32 1, i32 2}
487*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[JM5]] = !{!"branch_weights", i32 3, i32 2}
488*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[JM6]] = !{!"branch_weights", i32 1, i32 2}
489*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[JM7]] = !{!"branch_weights", i32 1, i32 2, i32 2, i32 2}
490*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[JM8]] = !{!"branch_weights", i32 11, i32 2}
491*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[JM9]] = !{!"branch_weights", i32 10, i32 2}
492*0a6a1f1dSLionel Sambuc 
493*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SW1]] = !{!"branch_weights", i32 16, i32 1}
494*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SW2]] = !{!"branch_weights", i32 6, i32 2, i32 3, i32 4, i32 5}
495*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SW3]] = !{!"branch_weights", i32 1, i32 2}
496*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SW4]] = !{!"branch_weights", i32 3, i32 2}
497*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SW5]] = !{!"branch_weights", i32 4, i32 1}
498*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SW6]] = !{!"branch_weights", i32 5, i32 1}
499*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SW7]] = !{!"branch_weights", i32 1, i32 2, i32 2, i32 2, i32 2}
500*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SW8]] = !{!"branch_weights", i32 5, i32 1}
501*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[SW9]] = !{!"branch_weights", i32 2, i32 5}
502*0a6a1f1dSLionel Sambuc 
503*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BS1]] = !{!"branch_weights", i32 33, i32 2}
504*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BS2]] = !{!"branch_weights", i32 29, i32 2, i32 2, i32 2, i32 2, i32 1}
505*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BS3]] = !{!"branch_weights", i32 1, i32 2}
506*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BS4]] = !{!"branch_weights", i32 2, i32 2}
507*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BS5]] = !{!"branch_weights", i32 12, i32 1}
508*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BS6]] = !{!"branch_weights", i32 12, i32 3}
509*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BS7]] = !{!"branch_weights", i32 2, i32 1}
510*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BS8]] = !{!"branch_weights", i32 16, i32 1}
511*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BS9]] = !{!"branch_weights", i32 16, i32 14}
512*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BS10]] = !{!"branch_weights", i32 2, i32 1}
513*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BS11]] = !{!"branch_weights", i32 3, i32 1}
514*0a6a1f1dSLionel Sambuc 
515*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BO1]] = !{!"branch_weights", i32 101, i32 2}
516*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BO2]] = !{!"branch_weights", i32 67, i32 35}
517*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BO3]] = !{!"branch_weights", i32 67, i32 35}
518*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BO4]] = !{!"branch_weights", i32 67, i32 35}
519*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BO5]] = !{!"branch_weights", i32 18, i32 18}
520*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BO6]] = !{!"branch_weights", i32 51, i32 51}
521*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BO7]] = !{!"branch_weights", i32 34, i32 18}
522*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BL1]] = !{!"branch_weights", i32 52, i32 1}
523*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BL2]] = !{!"branch_weights", i32 51, i32 2}
524*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BL3]] = !{!"branch_weights", i32 26, i32 27}
525*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BL4]] = !{!"branch_weights", i32 51, i32 2}
526*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BL5]] = !{!"branch_weights", i32 52, i32 1}
527*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BL6]] = !{!"branch_weights", i32 51, i32 2}
528*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BL7]] = !{!"branch_weights", i32 26, i32 27}
529*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[BL8]] = !{!"branch_weights", i32 51, i32 2}
530*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[CO1]] = !{!"branch_weights", i32 1, i32 2}
531*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[CO2]] = !{!"branch_weights", i32 2, i32 1}
532*0a6a1f1dSLionel Sambuc // PGOUSE-DAG: ![[ST1]] = !{!"branch_weights", i32 11, i32 2}
533*0a6a1f1dSLionel Sambuc 
main(int argc,const char * argv[])534*0a6a1f1dSLionel Sambuc int main(int argc, const char *argv[]) {
535*0a6a1f1dSLionel Sambuc   simple_loops();
536*0a6a1f1dSLionel Sambuc   conditionals();
537*0a6a1f1dSLionel Sambuc   early_exits();
538*0a6a1f1dSLionel Sambuc   jumps();
539*0a6a1f1dSLionel Sambuc   switches();
540*0a6a1f1dSLionel Sambuc   big_switch();
541*0a6a1f1dSLionel Sambuc   boolean_operators();
542*0a6a1f1dSLionel Sambuc   boolop_loops();
543*0a6a1f1dSLionel Sambuc   conditional_operator();
544*0a6a1f1dSLionel Sambuc   do_fallthrough();
545*0a6a1f1dSLionel Sambuc   static_func();
546*0a6a1f1dSLionel Sambuc   return 0;
547*0a6a1f1dSLionel Sambuc }
548