@@ -186,7 +186,7 @@ exit:
186
186
}
187
187
188
188
; Test with a mask that can be encoded with T32 instruction set, but not with A32.
189
- define i32 @f0 (i1 %c0 , i32 %v ) {
189
+ define i32 @f0 (i1 %c0 , i32 %v , ptr %p ) {
190
190
; V7M-LABEL: f0:
191
191
; V7M: @ %bb.0: @ %E
192
192
; V7M-NEXT: lsls r0, r0, #31
@@ -198,7 +198,9 @@ define i32 @f0(i1 %c0, i32 %v) {
198
198
; V7M-NEXT: bxeq lr
199
199
; V7M-NEXT: b .LBB1_3
200
200
; V7M-NEXT: .LBB1_2: @ %B
201
+ ; V7M-NEXT: movs r0, #1
201
202
; V7M-NEXT: tst.w r1, #16843009
203
+ ; V7M-NEXT: str r0, [r2]
202
204
; V7M-NEXT: itt ne
203
205
; V7M-NEXT: movne r0, #0
204
206
; V7M-NEXT: bxne lr
@@ -208,10 +210,10 @@ define i32 @f0(i1 %c0, i32 %v) {
208
210
;
209
211
; V7A-LABEL: f0:
210
212
; V7A: @ %bb.0: @ %E
211
- ; V7A-NEXT: movw r2 , #257
213
+ ; V7A-NEXT: movw r3 , #257
212
214
; V7A-NEXT: tst r0, #1
213
- ; V7A-NEXT: movt r2 , #257
214
- ; V7A-NEXT: and r1, r1, r2
215
+ ; V7A-NEXT: movt r3 , #257
216
+ ; V7A-NEXT: and r1, r1, r3
215
217
; V7A-NEXT: beq .LBB1_3
216
218
; V7A-NEXT: @ %bb.1: @ %A
217
219
; V7A-NEXT: cmp r1, #0
@@ -221,8 +223,10 @@ define i32 @f0(i1 %c0, i32 %v) {
221
223
; V7A-NEXT: mov r0, #1
222
224
; V7A-NEXT: bx lr
223
225
; V7A-NEXT: .LBB1_3: @ %B
224
- ; V7A-NEXT: mov r0, #0
226
+ ; V7A-NEXT: mov r0, #1
225
227
; V7A-NEXT: cmp r1, #0
228
+ ; V7A-NEXT: str r0, [r2]
229
+ ; V7A-NEXT: mov r0, #0
226
230
; V7A-NEXT: moveq r0, #1
227
231
; V7A-NEXT: bx lr
228
232
;
@@ -237,7 +241,9 @@ define i32 @f0(i1 %c0, i32 %v) {
237
241
; V7A-T-NEXT: bxeq lr
238
242
; V7A-T-NEXT: b .LBB1_3
239
243
; V7A-T-NEXT: .LBB1_2: @ %B
244
+ ; V7A-T-NEXT: movs r0, #1
240
245
; V7A-T-NEXT: tst.w r1, #16843009
246
+ ; V7A-T-NEXT: str r0, [r2]
241
247
; V7A-T-NEXT: itt ne
242
248
; V7A-T-NEXT: movne r0, #0
243
249
; V7A-T-NEXT: bxne lr
@@ -247,18 +253,20 @@ define i32 @f0(i1 %c0, i32 %v) {
247
253
;
248
254
; V6M-LABEL: f0:
249
255
; V6M: @ %bb.0: @ %E
250
- ; V6M-NEXT: ldr r2 , .LCPI1_0
251
- ; V6M-NEXT: ands r2 , r1
256
+ ; V6M-NEXT: ldr r3 , .LCPI1_0
257
+ ; V6M-NEXT: ands r3 , r1
252
258
; V6M-NEXT: lsls r0, r0, #31
253
259
; V6M-NEXT: beq .LBB1_3
254
260
; V6M-NEXT: @ %bb.1: @ %A
255
- ; V6M-NEXT: cmp r2 , #0
261
+ ; V6M-NEXT: cmp r3 , #0
256
262
; V6M-NEXT: bne .LBB1_5
257
263
; V6M-NEXT: @ %bb.2:
258
264
; V6M-NEXT: movs r0, #0
259
265
; V6M-NEXT: bx lr
260
266
; V6M-NEXT: .LBB1_3: @ %B
261
- ; V6M-NEXT: cmp r2, #0
267
+ ; V6M-NEXT: movs r0, #1
268
+ ; V6M-NEXT: str r0, [r2]
269
+ ; V6M-NEXT: cmp r3, #0
262
270
; V6M-NEXT: beq .LBB1_5
263
271
; V6M-NEXT: @ %bb.4:
264
272
; V6M-NEXT: movs r0, #0
280
288
281
289
B:
282
290
%c2 = icmp eq i32 %a , 0
291
+ store i32 1 , ptr %p , align 4
283
292
br i1 %c2 , label %D , label %C
284
293
285
294
C:
294
303
}
295
304
296
305
; Test with a mask that can be encoded both with T32 and A32 instruction sets.
297
- define i32 @f1 (i1 %c0 , i32 %v ) {
306
+ define i32 @f1 (i1 %c0 , i32 %v , ptr %p ) {
298
307
; V7M-LABEL: f1:
299
308
; V7M: @ %bb.0: @ %E
300
309
; V7M-NEXT: lsls r0, r0, #31
@@ -306,7 +315,9 @@ define i32 @f1(i1 %c0, i32 %v) {
306
315
; V7M-NEXT: bxeq lr
307
316
; V7M-NEXT: b .LBB2_3
308
317
; V7M-NEXT: .LBB2_2: @ %B
318
+ ; V7M-NEXT: movs r0, #1
309
319
; V7M-NEXT: tst.w r1, #100663296
320
+ ; V7M-NEXT: str r0, [r2]
310
321
; V7M-NEXT: itt ne
311
322
; V7M-NEXT: movne r0, #0
312
323
; V7M-NEXT: bxne lr
@@ -326,8 +337,10 @@ define i32 @f1(i1 %c0, i32 %v) {
326
337
; V7A-NEXT: mov r0, #1
327
338
; V7A-NEXT: bx lr
328
339
; V7A-NEXT: .LBB2_3: @ %B
329
- ; V7A-NEXT: mov r0, #0
340
+ ; V7A-NEXT: mov r0, #1
330
341
; V7A-NEXT: tst r1, #100663296
342
+ ; V7A-NEXT: str r0, [r2]
343
+ ; V7A-NEXT: mov r0, #0
331
344
; V7A-NEXT: moveq r0, #1
332
345
; V7A-NEXT: bx lr
333
346
;
@@ -342,7 +355,9 @@ define i32 @f1(i1 %c0, i32 %v) {
342
355
; V7A-T-NEXT: bxeq lr
343
356
; V7A-T-NEXT: b .LBB2_3
344
357
; V7A-T-NEXT: .LBB2_2: @ %B
358
+ ; V7A-T-NEXT: movs r0, #1
345
359
; V7A-T-NEXT: tst.w r1, #100663296
360
+ ; V7A-T-NEXT: str r0, [r2]
346
361
; V7A-T-NEXT: itt ne
347
362
; V7A-T-NEXT: movne r0, #0
348
363
; V7A-T-NEXT: bxne lr
@@ -352,19 +367,21 @@ define i32 @f1(i1 %c0, i32 %v) {
352
367
;
353
368
; V6M-LABEL: f1:
354
369
; V6M: @ %bb.0: @ %E
355
- ; V6M-NEXT: movs r2 , #3
356
- ; V6M-NEXT: lsls r2, r2 , #25
357
- ; V6M-NEXT: ands r2 , r1
370
+ ; V6M-NEXT: movs r3 , #3
371
+ ; V6M-NEXT: lsls r3, r3 , #25
372
+ ; V6M-NEXT: ands r3 , r1
358
373
; V6M-NEXT: lsls r0, r0, #31
359
374
; V6M-NEXT: beq .LBB2_3
360
375
; V6M-NEXT: @ %bb.1: @ %A
361
- ; V6M-NEXT: cmp r2 , #0
376
+ ; V6M-NEXT: cmp r3 , #0
362
377
; V6M-NEXT: bne .LBB2_5
363
378
; V6M-NEXT: @ %bb.2:
364
379
; V6M-NEXT: movs r0, #0
365
380
; V6M-NEXT: bx lr
366
381
; V6M-NEXT: .LBB2_3: @ %B
367
- ; V6M-NEXT: cmp r2, #0
382
+ ; V6M-NEXT: movs r0, #1
383
+ ; V6M-NEXT: str r0, [r2]
384
+ ; V6M-NEXT: cmp r3, #0
368
385
; V6M-NEXT: beq .LBB2_5
369
386
; V6M-NEXT: @ %bb.4:
370
387
; V6M-NEXT: movs r0, #0
382
399
383
400
B:
384
401
%c2 = icmp eq i32 %a , 0
402
+ store i32 1 , ptr %p , align 4
385
403
br i1 %c2 , label %D , label %C
386
404
387
405
C:
0 commit comments