blob: 6d53d2d1148dd6f31b33d02a4c8181103635d8b9 [file] [log] [blame]
Atmn Patelac73b732020-11-02 16:03:21 -05001// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-attributes
2// RUN: %clang_cc1 -std=c++11 -triple=x86_64-unknown-linux-gnu -S -emit-llvm %s -o - | FileCheck %s
3// RUN: %clang_cc1 -std=c++14 -triple=x86_64-unknown-linux-gnu -S -emit-llvm %s -o - | FileCheck %s
4// RUN: %clang_cc1 -std=c++17 -triple=x86_64-unknown-linux-gnu -S -emit-llvm %s -o - | FileCheck %s
5// RUN: %clang_cc1 -std=c++20 -triple=x86_64-unknown-linux-gnu -S -emit-llvm %s -o - | FileCheck %s
6
7int a = 0;
8int b = 0;
9
10// CHECK: Function Attrs: noinline nounwind optnone
11// CHECK-LABEL: @_Z2f1v(
12// CHECK-NEXT: entry:
13// CHECK-NEXT: br label [[FOR_COND:%.*]]
14// CHECK: for.cond:
15// CHECK-NEXT: br i1 true, label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]
16// CHECK: for.body:
17// CHECK-NEXT: br label [[FOR_COND]]
18// CHECK: for.end:
19// CHECK-NEXT: ret void
20//
21void f1() {
22 for (; 1;)
23 ;
24}
25
26// CHECK: Function Attrs: noinline nounwind optnone mustprogress
27// CHECK-LABEL: @_Z2f2v(
28// CHECK-NEXT: entry:
29// CHECK-NEXT: br label [[FOR_COND:%.*]]
30// CHECK: for.cond:
31// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
32// CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @b, align 4
33// CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]
34// CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]
35// CHECK: for.body:
36// CHECK-NEXT: br label [[FOR_COND]], [[LOOP2:!llvm.loop !.*]]
37// CHECK: for.end:
38// CHECK-NEXT: ret void
39//
40void f2() {
41 for (; a == b;)
42 ;
43}
44
45// CHECK: Function Attrs: noinline nounwind optnone
46// CHECK-LABEL: @_Z1Fv(
47// CHECK-NEXT: entry:
48// CHECK-NEXT: br label [[FOR_COND:%.*]]
49// CHECK: for.cond:
50// CHECK-NEXT: br i1 true, label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]
51// CHECK: for.body:
52// CHECK-NEXT: br label [[FOR_COND]]
53// CHECK: for.end:
54// CHECK-NEXT: br label [[FOR_COND1:%.*]]
55// CHECK: for.cond1:
56// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
57// CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @b, align 4
58// CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]
59// CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY2:%.*]], label [[FOR_END3:%.*]]
60// CHECK: for.body2:
61// CHECK-NEXT: br label [[FOR_COND1]], [[LOOP4:!llvm.loop !.*]]
62// CHECK: for.end3:
63// CHECK-NEXT: ret void
64//
65void F() {
66 for (; 1;)
67 ;
68 for (; a == b;)
69 ;
70}
71
72// CHECK: Function Attrs: noinline nounwind optnone
73// CHECK-LABEL: @_Z2F2v(
74// CHECK-NEXT: entry:
75// CHECK-NEXT: br label [[FOR_COND:%.*]]
76// CHECK: for.cond:
77// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
78// CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @b, align 4
79// CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]
80// CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]
81// CHECK: for.body:
82// CHECK-NEXT: br label [[FOR_COND]], [[LOOP5:!llvm.loop !.*]]
83// CHECK: for.end:
84// CHECK-NEXT: br label [[FOR_COND1:%.*]]
85// CHECK: for.cond1:
86// CHECK-NEXT: br i1 true, label [[FOR_BODY2:%.*]], label [[FOR_END3:%.*]]
87// CHECK: for.body2:
88// CHECK-NEXT: br label [[FOR_COND1]]
89// CHECK: for.end3:
90// CHECK-NEXT: ret void
91//
92void F2() {
93 for (; a == b;)
94 ;
95 for (; 1;)
96 ;
97}
98
99// CHECK: Function Attrs: noinline nounwind optnone
100// CHECK-LABEL: @_Z2w1v(
101// CHECK-NEXT: entry:
102// CHECK-NEXT: br label [[WHILE_BODY:%.*]]
103// CHECK: while.body:
104// CHECK-NEXT: br label [[WHILE_BODY]]
105//
106void w1() {
107 while (1)
108 ;
109}
110
111// CHECK: Function Attrs: noinline nounwind optnone mustprogress
112// CHECK-LABEL: @_Z2w2v(
113// CHECK-NEXT: entry:
114// CHECK-NEXT: br label [[WHILE_COND:%.*]]
115// CHECK: while.cond:
116// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
117// CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @b, align 4
118// CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]
119// CHECK-NEXT: br i1 [[CMP]], label [[WHILE_BODY:%.*]], label [[WHILE_END:%.*]]
120// CHECK: while.body:
121// CHECK-NEXT: br label [[WHILE_COND]], [[LOOP6:!llvm.loop !.*]]
122// CHECK: while.end:
123// CHECK-NEXT: ret void
124//
125void w2() {
126 while (a == b)
127 ;
128}
129
130// CHECK: Function Attrs: noinline nounwind optnone
131// CHECK-LABEL: @_Z1Wv(
132// CHECK-NEXT: entry:
133// CHECK-NEXT: br label [[WHILE_COND:%.*]]
134// CHECK: while.cond:
135// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
136// CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @b, align 4
137// CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]
138// CHECK-NEXT: br i1 [[CMP]], label [[WHILE_BODY:%.*]], label [[WHILE_END:%.*]]
139// CHECK: while.body:
140// CHECK-NEXT: br label [[WHILE_COND]], [[LOOP7:!llvm.loop !.*]]
141// CHECK: while.end:
142// CHECK-NEXT: br label [[WHILE_BODY2:%.*]]
143// CHECK: while.body2:
144// CHECK-NEXT: br label [[WHILE_BODY2]]
145//
146void W() {
147 while (a == b)
148 ;
149 while (1)
150 ;
151}
152
153// CHECK: Function Attrs: noinline nounwind optnone
154// CHECK-LABEL: @_Z2W2v(
155// CHECK-NEXT: entry:
156// CHECK-NEXT: br label [[WHILE_BODY:%.*]]
157// CHECK: while.body:
158// CHECK-NEXT: br label [[WHILE_BODY]]
159//
160void W2() {
161 while (1)
162 ;
163 while (a == b)
164 ;
165}
166
167// CHECK: Function Attrs: noinline nounwind optnone
168// CHECK-LABEL: @_Z2d1v(
169// CHECK-NEXT: entry:
170// CHECK-NEXT: br label [[DO_BODY:%.*]]
171// CHECK: do.body:
172// CHECK-NEXT: br label [[DO_COND:%.*]]
173// CHECK: do.cond:
174// CHECK-NEXT: br i1 true, label [[DO_BODY]], label [[DO_END:%.*]]
175// CHECK: do.end:
176// CHECK-NEXT: ret void
177//
178void d1() {
179 do
180 ;
181 while (1);
182}
183
184// CHECK: Function Attrs: noinline nounwind optnone mustprogress
185// CHECK-LABEL: @_Z2d2v(
186// CHECK-NEXT: entry:
187// CHECK-NEXT: br label [[DO_BODY:%.*]]
188// CHECK: do.body:
189// CHECK-NEXT: br label [[DO_COND:%.*]]
190// CHECK: do.cond:
191// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
192// CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @b, align 4
193// CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]
194// CHECK-NEXT: br i1 [[CMP]], label [[DO_BODY]], label [[DO_END:%.*]], [[LOOP8:!llvm.loop !.*]]
195// CHECK: do.end:
196// CHECK-NEXT: ret void
197//
198void d2() {
199 do
200 ;
201 while (a == b);
202}
203
204// CHECK: Function Attrs: noinline nounwind optnone
205// CHECK-LABEL: @_Z1Dv(
206// CHECK-NEXT: entry:
207// CHECK-NEXT: br label [[DO_BODY:%.*]]
208// CHECK: do.body:
209// CHECK-NEXT: br label [[DO_COND:%.*]]
210// CHECK: do.cond:
211// CHECK-NEXT: br i1 true, label [[DO_BODY]], label [[DO_END:%.*]]
212// CHECK: do.end:
213// CHECK-NEXT: br label [[DO_BODY1:%.*]]
214// CHECK: do.body1:
215// CHECK-NEXT: br label [[DO_COND2:%.*]]
216// CHECK: do.cond2:
217// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
218// CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @b, align 4
219// CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]
220// CHECK-NEXT: br i1 [[CMP]], label [[DO_BODY1]], label [[DO_END3:%.*]], [[LOOP9:!llvm.loop !.*]]
221// CHECK: do.end3:
222// CHECK-NEXT: ret void
223//
224void D() {
225 do
226 ;
227 while (1);
228 do
229 ;
230 while (a == b);
231}
232
233// CHECK: Function Attrs: noinline nounwind optnone
234// CHECK-LABEL: @_Z2D2v(
235// CHECK-NEXT: entry:
236// CHECK-NEXT: br label [[DO_BODY:%.*]]
237// CHECK: do.body:
238// CHECK-NEXT: br label [[DO_COND:%.*]]
239// CHECK: do.cond:
240// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
241// CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @b, align 4
242// CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]
243// CHECK-NEXT: br i1 [[CMP]], label [[DO_BODY]], label [[DO_END:%.*]], [[LOOP10:!llvm.loop !.*]]
244// CHECK: do.end:
245// CHECK-NEXT: br label [[DO_BODY1:%.*]]
246// CHECK: do.body1:
247// CHECK-NEXT: br label [[DO_COND2:%.*]]
248// CHECK: do.cond2:
249// CHECK-NEXT: br i1 true, label [[DO_BODY1]], label [[DO_END3:%.*]]
250// CHECK: do.end3:
251// CHECK-NEXT: ret void
252//
253void D2() {
254 do
255 ;
256 while (a == b);
257 do
258 ;
259 while (1);
260}
261