xref: /aosp_15_r20/external/clang/test/CodeGen/PR8880.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -Wno-gcc-compat -emit-llvm -o - %s | FileCheck %s
2*67e74705SXin Li 
pr8880_cg_1(int * iptr)3*67e74705SXin Li void pr8880_cg_1(int *iptr) {
4*67e74705SXin Li // CHECK-LABEL: define {{.*}}void @pr8880_cg_1(
5*67e74705SXin Li   int i, j;
6*67e74705SXin Li // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
7*67e74705SXin Li   for (i = 2; i != 10 ; i++ )
8*67e74705SXin Li // CHECK: [[OUTER_COND]]
9*67e74705SXin Li // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
10*67e74705SXin Li // CHECK: [[OUTER_BODY]]
11*67e74705SXin Li // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
12*67e74705SXin Li     for (j = 3 ; j < 22; (void)({ ++j; break; j;})) {
13*67e74705SXin Li // CHECK: [[INNER_COND]]
14*67e74705SXin Li // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END:[0-9A-Za-z$._]+]]
15*67e74705SXin Li // CHECK: [[INNER_BODY]]
16*67e74705SXin Li       *iptr = 7;
17*67e74705SXin Li // CHECK: store i32 7,
18*67e74705SXin Li // CHECK: br label %[[INNER_INC:[0-9A-Za-z$._]+]]
19*67e74705SXin Li // CHECK: [[INNER_INC]]
20*67e74705SXin Li 
21*67e74705SXin Li // break in 3rd expression of inner loop causes branch to end of inner loop
22*67e74705SXin Li 
23*67e74705SXin Li // CHECK: br label %[[INNER_END:[0-9A-Za-z$._]+]]
24*67e74705SXin Li // CHECK: [[INNER_END]]
25*67e74705SXin Li     }
26*67e74705SXin Li // CHECK: br label %[[OUTER_INC:[0-9A-Za-z$._]+]]
27*67e74705SXin Li // CHECK: [[OUTER_INC]]
28*67e74705SXin Li // CHECK: br label %[[OUTER_COND]]
29*67e74705SXin Li // CHECK: [[OUTER_END]]
30*67e74705SXin Li // CHECK: ret
31*67e74705SXin Li }
32*67e74705SXin Li 
pr8880_cg_2(int * iptr)33*67e74705SXin Li void pr8880_cg_2(int *iptr) {
34*67e74705SXin Li // CHECK-LABEL: define {{.*}}void @pr8880_cg_2(
35*67e74705SXin Li   int i, j;
36*67e74705SXin Li // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
37*67e74705SXin Li   for (i = 2; i != 10 ; i++ )
38*67e74705SXin Li // CHECK: [[OUTER_COND]]
39*67e74705SXin Li // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
40*67e74705SXin Li // CHECK: [[OUTER_BODY]]
41*67e74705SXin Li // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
42*67e74705SXin Li     for (j = 3 ; j < 22; (void)({ ++j; continue; j;})) {
43*67e74705SXin Li // CHECK: [[INNER_COND]]
44*67e74705SXin Li // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END:[0-9A-Za-z$._]+]]
45*67e74705SXin Li // CHECK: [[INNER_BODY]]
46*67e74705SXin Li       *iptr = 7;
47*67e74705SXin Li // CHECK: store i32 7,
48*67e74705SXin Li // CHECK: br label %[[INNER_INC:[0-9A-Za-z$._]+]]
49*67e74705SXin Li // CHECK: [[INNER_INC]]
50*67e74705SXin Li 
51*67e74705SXin Li // continue in 3rd expression of inner loop causes branch to inc of inner loop
52*67e74705SXin Li 
53*67e74705SXin Li // CHECK: br label %[[INNER_INC]]
54*67e74705SXin Li // CHECK: [[INNER_END]]
55*67e74705SXin Li     }
56*67e74705SXin Li // CHECK: br label %[[OUTER_INC:[0-9A-Za-z$._]+]]
57*67e74705SXin Li // CHECK: [[OUTER_INC]]
58*67e74705SXin Li // CHECK: br label %[[OUTER_COND]]
59*67e74705SXin Li // CHECK: [[OUTER_END]]
60*67e74705SXin Li // CHECK: ret
61*67e74705SXin Li }
62*67e74705SXin Li 
pr8880_cg_3(int * iptr)63*67e74705SXin Li void pr8880_cg_3(int *iptr) {
64*67e74705SXin Li // CHECK-LABEL: define {{.*}}void @pr8880_cg_3(
65*67e74705SXin Li   int i, j;
66*67e74705SXin Li // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
67*67e74705SXin Li   for (i = 2 ; i != 10 ; i++ )
68*67e74705SXin Li // CHECK: [[OUTER_COND]]
69*67e74705SXin Li // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
70*67e74705SXin Li // CHECK: [[OUTER_BODY]]
71*67e74705SXin Li // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
72*67e74705SXin Li     for (j = 3 ; ({break; j;}); j++) {
73*67e74705SXin Li 
74*67e74705SXin Li // break in 2nd expression of inner loop causes branch to end of inner loop
75*67e74705SXin Li 
76*67e74705SXin Li // CHECK: [[INNER_COND]]
77*67e74705SXin Li // CHECK: br label %[[INNER_END:[0-9A-Za-z$._]+]]
78*67e74705SXin Li // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END:[0-9A-Za-z$._]+]]
79*67e74705SXin Li // CHECK: [[INNER_BODY]]
80*67e74705SXin Li       *iptr = 7;
81*67e74705SXin Li // CHECK: store i32 7,
82*67e74705SXin Li // CHECK: br label %[[INNER_INC:[0-9A-Za-z$._]+]]
83*67e74705SXin Li // CHECK: [[INNER_INC]]
84*67e74705SXin Li // CHECK: br label %[[INNER_COND]]
85*67e74705SXin Li     }
86*67e74705SXin Li // CHECK: [[INNER_END]]
87*67e74705SXin Li // CHECK: br label %[[OUTER_INC:[0-9A-Za-z$._]+]]
88*67e74705SXin Li // CHECK: [[OUTER_INC]]
89*67e74705SXin Li // CHECK: br label %[[OUTER_COND]]
90*67e74705SXin Li // CHECK: [[OUTER_END]]
91*67e74705SXin Li // CHECK: ret
92*67e74705SXin Li }
93*67e74705SXin Li 
pr8880_cg_4(int * iptr)94*67e74705SXin Li void pr8880_cg_4(int *iptr) {
95*67e74705SXin Li // CHECK-LABEL: define {{.*}}void @pr8880_cg_4(
96*67e74705SXin Li   int i, j;
97*67e74705SXin Li // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
98*67e74705SXin Li   for (i = 2 ; i != 10 ; i++ )
99*67e74705SXin Li // CHECK: [[OUTER_COND]]
100*67e74705SXin Li // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
101*67e74705SXin Li // CHECK: [[OUTER_BODY]]
102*67e74705SXin Li // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
103*67e74705SXin Li     for (j = 3 ; ({continue; j;}); j++) {
104*67e74705SXin Li 
105*67e74705SXin Li // continue in 2nd expression of inner loop causes branch to inc of inner loop
106*67e74705SXin Li 
107*67e74705SXin Li // CHECK: [[INNER_COND]]
108*67e74705SXin Li // CHECK: br label %[[INNER_INC:[0-9A-Za-z$._]+]]
109*67e74705SXin Li // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END:[0-9A-Za-z$._]+]]
110*67e74705SXin Li // CHECK: [[INNER_BODY]]
111*67e74705SXin Li       *iptr = 7;
112*67e74705SXin Li // CHECK: store i32 7,
113*67e74705SXin Li // CHECK: br label %[[INNER_INC]]
114*67e74705SXin Li // CHECK: [[INNER_INC]]
115*67e74705SXin Li // CHECK: br label %[[INNER_COND]]
116*67e74705SXin Li     }
117*67e74705SXin Li // CHECK: [[INNER_END]]
118*67e74705SXin Li // CHECK: br label %[[OUTER_INC:[0-9A-Za-z$._]+]]
119*67e74705SXin Li // CHECK: [[OUTER_INC]]
120*67e74705SXin Li // CHECK: br label %[[OUTER_COND]]
121*67e74705SXin Li // CHECK: [[OUTER_END]]
122*67e74705SXin Li // CHECK: ret
123*67e74705SXin Li }
124*67e74705SXin Li 
pr8880_cg_5(int x,int * iptr)125*67e74705SXin Li void pr8880_cg_5(int x, int *iptr) {
126*67e74705SXin Li // CHECK-LABEL: define {{.*}}void @pr8880_cg_5(
127*67e74705SXin Li   int y = 5;
128*67e74705SXin Li // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
129*67e74705SXin Li // CHECK: [[OUTER_COND]]
130*67e74705SXin Li   while(--x) {
131*67e74705SXin Li // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
132*67e74705SXin Li // CHECK: [[OUTER_BODY]]
133*67e74705SXin Li // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
134*67e74705SXin Li     while(({ break; --y; })) {
135*67e74705SXin Li // CHECK: [[INNER_COND]]
136*67e74705SXin Li // CHECK: br label %[[INNER_END:[0-9A-Za-z$._]+]]
137*67e74705SXin Li // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END:[0-9A-Za-z$._]+]]
138*67e74705SXin Li // CHECK: [[INNER_BODY]]
139*67e74705SXin Li       *iptr = 7;
140*67e74705SXin Li // CHECK: store i32 7,
141*67e74705SXin Li     }
142*67e74705SXin Li // CHECK: br label %[[INNER_COND]]
143*67e74705SXin Li   }
144*67e74705SXin Li // CHECK: [[INNER_END]]
145*67e74705SXin Li // CHECK: br label %[[OUTER_COND]]
146*67e74705SXin Li // CHECK: [[OUTER_END]]
147*67e74705SXin Li // CHECK: ret void
148*67e74705SXin Li }
149*67e74705SXin Li 
pr8880_cg_6(int x,int * iptr)150*67e74705SXin Li void pr8880_cg_6(int x, int *iptr) {
151*67e74705SXin Li // CHECK-LABEL: define {{.*}}void @pr8880_cg_6(
152*67e74705SXin Li   int y = 5;
153*67e74705SXin Li // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
154*67e74705SXin Li // CHECK: [[OUTER_COND]]
155*67e74705SXin Li   while(--x) {
156*67e74705SXin Li // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
157*67e74705SXin Li // CHECK: [[OUTER_BODY]]
158*67e74705SXin Li // CHECK: br label %[[INNER_BODY:[0-9A-Za-z$._]+]]
159*67e74705SXin Li // CHECK: [[INNER_BODY]]
160*67e74705SXin Li     do {
161*67e74705SXin Li // CHECK: store i32 7,
162*67e74705SXin Li       *iptr = 7;
163*67e74705SXin Li // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
164*67e74705SXin Li     } while(({ break; --y; }));
165*67e74705SXin Li // CHECK: [[INNER_COND]]
166*67e74705SXin Li // CHECK: br label %[[INNER_END:[0-9A-Za-z$._]+]]
167*67e74705SXin Li // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END]]
168*67e74705SXin Li   }
169*67e74705SXin Li // CHECK: [[INNER_END]]
170*67e74705SXin Li // CHECK: br label %[[OUTER_COND]]
171*67e74705SXin Li // CHECK: [[OUTER_END]]
172*67e74705SXin Li // CHECK: ret void
173*67e74705SXin Li }
174