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