1
- ; RUN: opt -disable-output "-passes=print<scalar-evolution>" < %s 2>&1 | FileCheck %s
1
+ ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5
2
+ ; RUN: opt -disable-output -passes='print<scalar-evolution>' %s 2>&1 | FileCheck %s
3
+
4
+ ; Check that assumes/guards guarding the backedge are taken into account
5
+ ; when inferring no-wrap flags.
2
6
3
7
declare void @llvm.experimental.guard (i1 , ...)
4
8
declare void @llvm.assume (i1 )
5
9
6
10
define void @s_0 (i32 %n , ptr %cond ) {
7
- ; CHECK-LABEL: Classifying expressions for: @s_0
11
+ ; CHECK-LABEL: 's_0'
12
+ ; CHECK-NEXT: Classifying expressions for: @s_0
13
+ ; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
14
+ ; CHECK-NEXT: --> {0,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
15
+ ; CHECK-NEXT: %iv.inc = add i32 %iv, 1
16
+ ; CHECK-NEXT: --> {1,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
17
+ ; CHECK-NEXT: %iv.sext = sext i32 %iv to i64
18
+ ; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%loop> U: [0,-9223372036854775808) S: [0,-9223372036854775808) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
19
+ ; CHECK-NEXT: %c = load volatile i1, ptr %cond, align 1
20
+ ; CHECK-NEXT: --> %c U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }
21
+ ; CHECK-NEXT: Determining loop execution counts for: @s_0
22
+ ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
23
+ ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
24
+ ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
25
+ ;
8
26
entry:
9
27
br label %loop
10
28
11
29
loop:
12
30
%iv = phi i32 [ 0 , %entry ], [ %iv.inc , %loop ]
13
31
%iv.inc = add i32 %iv , 1
14
32
%iv.sext = sext i32 %iv to i64
15
- ; CHECK: %iv.sext = sext i32 %iv to i64
16
- ; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%loop>
17
33
%cmp = icmp slt i32 %iv , %n
18
34
call void (i1 , ...) @llvm.experimental.guard (i1 %cmp ) [ "deopt" () ]
19
35
%c = load volatile i1 , ptr %cond
@@ -24,16 +40,28 @@ leave:
24
40
}
25
41
26
42
define void @s_1 (ptr %cond ) {
27
- ; CHECK-LABEL: Classifying expressions for: @s_1
43
+ ; CHECK-LABEL: 's_1'
44
+ ; CHECK-NEXT: Classifying expressions for: @s_1
45
+ ; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
46
+ ; CHECK-NEXT: --> {0,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
47
+ ; CHECK-NEXT: %iv.inc = add i32 %iv, 3
48
+ ; CHECK-NEXT: --> {3,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
49
+ ; CHECK-NEXT: %iv.sext = sext i32 %iv to i64
50
+ ; CHECK-NEXT: --> {0,+,3}<nuw><nsw><%loop> U: [0,-9223372036854775808) S: [0,-9223372036854775808) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
51
+ ; CHECK-NEXT: %c = load volatile i1, ptr %cond, align 1
52
+ ; CHECK-NEXT: --> %c U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }
53
+ ; CHECK-NEXT: Determining loop execution counts for: @s_1
54
+ ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
55
+ ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
56
+ ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
57
+ ;
28
58
entry:
29
59
br label %loop
30
60
31
61
loop:
32
62
%iv = phi i32 [ 0 , %entry ], [ %iv.inc , %loop ]
33
63
%iv.inc = add i32 %iv , 3
34
64
%iv.sext = sext i32 %iv to i64
35
- ; CHECK: %iv.sext = sext i32 %iv to i64
36
- ; CHECK-NEXT: --> {0,+,3}<nuw><nsw><%loop>
37
65
%cmp = icmp slt i32 %iv , 10000
38
66
call void (i1 , ...) @llvm.experimental.guard (i1 %cmp ) [ "deopt" () ]
39
67
%c = load volatile i1 , ptr %cond
@@ -44,7 +72,21 @@ leave:
44
72
}
45
73
46
74
define void @s_2 (ptr %cond ) {
47
- ; CHECK-LABEL: Classifying expressions for: @s_2
75
+ ; CHECK-LABEL: 's_2'
76
+ ; CHECK-NEXT: Classifying expressions for: @s_2
77
+ ; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
78
+ ; CHECK-NEXT: --> {0,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
79
+ ; CHECK-NEXT: %iv.inc = add i32 %iv, 3
80
+ ; CHECK-NEXT: --> {3,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
81
+ ; CHECK-NEXT: %iv.sext = sext i32 %iv to i64
82
+ ; CHECK-NEXT: --> {0,+,3}<nuw><nsw><%loop> U: [0,-9223372036854775808) S: [0,-9223372036854775808) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
83
+ ; CHECK-NEXT: %c = load volatile i1, ptr %cond, align 1
84
+ ; CHECK-NEXT: --> %c U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }
85
+ ; CHECK-NEXT: Determining loop execution counts for: @s_2
86
+ ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
87
+ ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
88
+ ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
89
+ ;
48
90
entry:
49
91
br label %loop
50
92
53
95
%iv.inc = add i32 %iv , 3
54
96
%iv.sext = sext i32 %iv to i64
55
97
%cmp = icmp slt i32 %iv , 10000
56
- ; CHECK: %iv.sext = sext i32 %iv to i64
57
- ; CHECK-NEXT: --> {0,+,3}<nuw><nsw><%loop>
58
98
call void @llvm.assume (i1 %cmp )
59
99
%c = load volatile i1 , ptr %cond
60
100
br i1 %c , label %loop , label %leave
@@ -64,7 +104,25 @@ leave:
64
104
}
65
105
66
106
define void @s_3 (i32 %start , ptr %cond ) {
67
- ; CHECK-LABEL: Classifying expressions for: @s_3
107
+ ; CHECK-LABEL: 's_3'
108
+ ; CHECK-NEXT: Classifying expressions for: @s_3
109
+ ; CHECK-NEXT: %iv = phi i32 [ %start, %entry ], [ %iv.inc, %be ]
110
+ ; CHECK-NEXT: --> {%start,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
111
+ ; CHECK-NEXT: %iv.inc = add i32 %iv, 3
112
+ ; CHECK-NEXT: --> {(3 + %start),+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
113
+ ; CHECK-NEXT: %iv.inc.sext = sext i32 %iv.inc to i64
114
+ ; CHECK-NEXT: --> {(sext i32 (3 + %start) to i64),+,3}<nsw><%loop> U: [-2147483648,4294977296) S: [-2147483648,4294977296) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
115
+ ; CHECK-NEXT: %c = load volatile i1, ptr %cond, align 1
116
+ ; CHECK-NEXT: --> %c U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }
117
+ ; CHECK-NEXT: Determining loop execution counts for: @s_3
118
+ ; CHECK-NEXT: Loop %loop: <multiple exits> Unpredictable backedge-taken count.
119
+ ; CHECK-NEXT: exit count for loop: ((((-1 * (1 umin ((-1 * %start) + (10000 smax %start))))<nuw><nsw> + (-1 * %start) + (10000 smax %start)) /u 3) + (1 umin ((-1 * %start) + (10000 smax %start))))
120
+ ; CHECK-NEXT: exit count for be: ***COULDNOTCOMPUTE***
121
+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 715831216
122
+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((((-1 * (1 umin ((-1 * %start) + (10000 smax %start))))<nuw><nsw> + (-1 * %start) + (10000 smax %start)) /u 3) + (1 umin ((-1 * %start) + (10000 smax %start))))
123
+ ; CHECK-NEXT: symbolic max exit count for loop: ((((-1 * (1 umin ((-1 * %start) + (10000 smax %start))))<nuw><nsw> + (-1 * %start) + (10000 smax %start)) /u 3) + (1 umin ((-1 * %start) + (10000 smax %start))))
124
+ ; CHECK-NEXT: symbolic max exit count for be: ***COULDNOTCOMPUTE***
125
+ ;
68
126
entry:
69
127
br label %loop
70
128
76
134
be:
77
135
%iv.inc = add i32 %iv , 3
78
136
%iv.inc.sext = sext i32 %iv.inc to i64
79
- ; CHECK: %iv.inc.sext = sext i32 %iv.inc to i64
80
- ; CHECK-NEXT: --> {(sext i32 (3 + %start) to i64),+,3}<nsw><%loop>
81
137
%c = load volatile i1 , ptr %cond
82
138
br i1 %c , label %loop , label %leave
83
139
@@ -86,7 +142,25 @@ leave:
86
142
}
87
143
88
144
define void @s_4 (i32 %start , ptr %cond ) {
89
- ; CHECK-LABEL: Classifying expressions for: @s_4
145
+ ; CHECK-LABEL: 's_4'
146
+ ; CHECK-NEXT: Classifying expressions for: @s_4
147
+ ; CHECK-NEXT: %iv = phi i32 [ %start, %entry ], [ %iv.inc, %be ]
148
+ ; CHECK-NEXT: --> {%start,+,-3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
149
+ ; CHECK-NEXT: %iv.inc = add i32 %iv, -3
150
+ ; CHECK-NEXT: --> {(-3 + %start),+,-3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
151
+ ; CHECK-NEXT: %iv.inc.sext = sext i32 %iv.inc to i64
152
+ ; CHECK-NEXT: --> {(sext i32 (-3 + %start) to i64),+,-3}<nsw><%loop> U: [-4294968296,2147483648) S: [-4294968296,2147483648) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
153
+ ; CHECK-NEXT: %c = load volatile i1, ptr %cond, align 1
154
+ ; CHECK-NEXT: --> %c U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }
155
+ ; CHECK-NEXT: Determining loop execution counts for: @s_4
156
+ ; CHECK-NEXT: Loop %loop: <multiple exits> Unpredictable backedge-taken count.
157
+ ; CHECK-NEXT: exit count for loop: ((2 + (-1 * (-1000 smin %start)) + %start) /u 3)
158
+ ; CHECK-NEXT: exit count for be: ***COULDNOTCOMPUTE***
159
+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 715828216
160
+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((2 + (-1 * (-1000 smin %start)) + %start) /u 3)
161
+ ; CHECK-NEXT: symbolic max exit count for loop: ((2 + (-1 * (-1000 smin %start)) + %start) /u 3)
162
+ ; CHECK-NEXT: symbolic max exit count for be: ***COULDNOTCOMPUTE***
163
+ ;
90
164
entry:
91
165
br label %loop
92
166
98
172
be:
99
173
%iv.inc = add i32 %iv , -3
100
174
%iv.inc.sext = sext i32 %iv.inc to i64
101
- ; CHECK: %iv.inc.sext = sext i32 %iv.inc to i64
102
- ; CHECK-NEXT: --> {(sext i32 (-3 + %start) to i64),+,-3}<nsw><%loop>
103
175
%c = load volatile i1 , ptr %cond
104
176
br i1 %c , label %loop , label %leave
105
177
@@ -108,16 +180,28 @@ leave:
108
180
}
109
181
110
182
define void @u_0 (i32 %n , ptr %cond ) {
111
- ; CHECK-LABEL: Classifying expressions for: @u_0
183
+ ; CHECK-LABEL: 'u_0'
184
+ ; CHECK-NEXT: Classifying expressions for: @u_0
185
+ ; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
186
+ ; CHECK-NEXT: --> {0,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
187
+ ; CHECK-NEXT: %iv.inc = add i32 %iv, 1
188
+ ; CHECK-NEXT: --> {1,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
189
+ ; CHECK-NEXT: %iv.zext = zext i32 %iv to i64
190
+ ; CHECK-NEXT: --> {0,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
191
+ ; CHECK-NEXT: %c = load volatile i1, ptr %cond, align 1
192
+ ; CHECK-NEXT: --> %c U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }
193
+ ; CHECK-NEXT: Determining loop execution counts for: @u_0
194
+ ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
195
+ ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
196
+ ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
197
+ ;
112
198
entry:
113
199
br label %loop
114
200
115
201
loop:
116
202
%iv = phi i32 [ 0 , %entry ], [ %iv.inc , %loop ]
117
203
%iv.inc = add i32 %iv , 1
118
204
%iv.zext = zext i32 %iv to i64
119
- ; CHECK: %iv.zext = zext i32 %iv to i64
120
- ; CHECK-NEXT: --> {0,+,1}<nuw><%loop>
121
205
%cmp = icmp ult i32 %iv , %n
122
206
call void (i1 , ...) @llvm.experimental.guard (i1 %cmp ) [ "deopt" () ]
123
207
%c = load volatile i1 , ptr %cond
@@ -128,16 +212,28 @@ leave:
128
212
}
129
213
130
214
define void @u_1 (ptr %cond ) {
131
- ; CHECK-LABEL: Classifying expressions for: @u_1
215
+ ; CHECK-LABEL: 'u_1'
216
+ ; CHECK-NEXT: Classifying expressions for: @u_1
217
+ ; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
218
+ ; CHECK-NEXT: --> {0,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
219
+ ; CHECK-NEXT: %iv.inc = add i32 %iv, 3
220
+ ; CHECK-NEXT: --> {3,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
221
+ ; CHECK-NEXT: %iv.zext = zext i32 %iv to i64
222
+ ; CHECK-NEXT: --> {0,+,3}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
223
+ ; CHECK-NEXT: %c = load volatile i1, ptr %cond, align 1
224
+ ; CHECK-NEXT: --> %c U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }
225
+ ; CHECK-NEXT: Determining loop execution counts for: @u_1
226
+ ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
227
+ ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
228
+ ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
229
+ ;
132
230
entry:
133
231
br label %loop
134
232
135
233
loop:
136
234
%iv = phi i32 [ 0 , %entry ], [ %iv.inc , %loop ]
137
235
%iv.inc = add i32 %iv , 3
138
236
%iv.zext = zext i32 %iv to i64
139
- ; CHECK: %iv.zext = zext i32 %iv to i64
140
- ; CHECK-NEXT: --> {0,+,3}<nuw><%loop>
141
237
%cmp = icmp ult i32 %iv , 10000
142
238
call void (i1 , ...) @llvm.experimental.guard (i1 %cmp ) [ "deopt" () ]
143
239
%c = load volatile i1 , ptr %cond
@@ -148,7 +244,21 @@ leave:
148
244
}
149
245
150
246
define void @u_2 (ptr %cond ) {
151
- ; CHECK-LABEL: Classifying expressions for: @u_2
247
+ ; CHECK-LABEL: 'u_2'
248
+ ; CHECK-NEXT: Classifying expressions for: @u_2
249
+ ; CHECK-NEXT: %iv = phi i32 [ 30000, %entry ], [ %iv.inc, %loop ]
250
+ ; CHECK-NEXT: --> {30000,+,-2}<%loop> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
251
+ ; CHECK-NEXT: %iv.inc = add i32 %iv, -2
252
+ ; CHECK-NEXT: --> {29998,+,-2}<%loop> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
253
+ ; CHECK-NEXT: %iv.zext = zext i32 %iv to i64
254
+ ; CHECK-NEXT: --> {30000,+,-2}<nw><%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
255
+ ; CHECK-NEXT: %c = load volatile i1, ptr %cond, align 1
256
+ ; CHECK-NEXT: --> %c U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }
257
+ ; CHECK-NEXT: Determining loop execution counts for: @u_2
258
+ ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
259
+ ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
260
+ ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
261
+ ;
152
262
entry:
153
263
br label %loop
154
264
@@ -157,8 +267,6 @@ loop:
157
267
%iv.inc = add i32 %iv , -2
158
268
%iv.zext = zext i32 %iv to i64
159
269
%cmp = icmp ugt i32 %iv.inc , -10000
160
- ; CHECK: %iv.zext = zext i32 %iv to i64
161
- ; CHECK-NEXT: --> {30000,+,-2}<nw><%loop>
162
270
call void @llvm.assume (i1 %cmp )
163
271
%c = load volatile i1 , ptr %cond
164
272
br i1 %c , label %loop , label %leave
@@ -168,7 +276,25 @@ leave:
168
276
}
169
277
170
278
define void @u_3 (i32 %start , ptr %cond ) {
171
- ; CHECK-LABEL: Classifying expressions for: @u_3
279
+ ; CHECK-LABEL: 'u_3'
280
+ ; CHECK-NEXT: Classifying expressions for: @u_3
281
+ ; CHECK-NEXT: %iv = phi i32 [ %start, %entry ], [ %iv.inc, %be ]
282
+ ; CHECK-NEXT: --> {%start,+,3}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
283
+ ; CHECK-NEXT: %iv.inc = add i32 %iv, 3
284
+ ; CHECK-NEXT: --> {(3 + %start),+,3}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
285
+ ; CHECK-NEXT: %iv.inc.zext = zext i32 %iv.inc to i64
286
+ ; CHECK-NEXT: --> {(zext i32 (3 + %start) to i64),+,3}<nuw><%loop> U: [0,4294977298) S: [0,4294977298) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
287
+ ; CHECK-NEXT: %c = load volatile i1, ptr %cond, align 1
288
+ ; CHECK-NEXT: --> %c U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }
289
+ ; CHECK-NEXT: Determining loop execution counts for: @u_3
290
+ ; CHECK-NEXT: Loop %loop: <multiple exits> Unpredictable backedge-taken count.
291
+ ; CHECK-NEXT: exit count for loop: ((((-1 * (1 umin ((-1 * %start) + (10000 umax %start))))<nuw><nsw> + (-1 * %start) + (10000 umax %start)) /u 3) + (1 umin ((-1 * %start) + (10000 umax %start))))
292
+ ; CHECK-NEXT: exit count for be: ***COULDNOTCOMPUTE***
293
+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 3334
294
+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((((-1 * (1 umin ((-1 * %start) + (10000 umax %start))))<nuw><nsw> + (-1 * %start) + (10000 umax %start)) /u 3) + (1 umin ((-1 * %start) + (10000 umax %start))))
295
+ ; CHECK-NEXT: symbolic max exit count for loop: ((((-1 * (1 umin ((-1 * %start) + (10000 umax %start))))<nuw><nsw> + (-1 * %start) + (10000 umax %start)) /u 3) + (1 umin ((-1 * %start) + (10000 umax %start))))
296
+ ; CHECK-NEXT: symbolic max exit count for be: ***COULDNOTCOMPUTE***
297
+ ;
172
298
entry:
173
299
br label %loop
174
300
@@ -180,8 +306,6 @@ loop:
180
306
be:
181
307
%iv.inc = add i32 %iv , 3
182
308
%iv.inc.zext = zext i32 %iv.inc to i64
183
- ; CHECK: %iv.inc.zext = zext i32 %iv.inc to i64
184
- ; CHECK-NEXT: --> {(zext i32 (3 + %start) to i64),+,3}<nuw><%loop>
185
309
%c = load volatile i1 , ptr %cond
186
310
br i1 %c , label %loop , label %leave
187
311
0 commit comments