15
15
; bit of any CR field is spilled. We need to test the spilling of a CR bit
16
16
; other than the LT bit. Hence this test case is rather complex.
17
17
18
- define dso_local fastcc void @P10_Spill_CR_GT () unnamed_addr {
18
+ define dso_local fastcc void @P10_Spill_CR_GT (ptr %p ) unnamed_addr {
19
19
; CHECK-LABEL: P10_Spill_CR_GT:
20
20
; CHECK: # %bb.0: # %bb
21
21
; CHECK-NEXT: mfcr r12
@@ -25,32 +25,35 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
25
25
; CHECK-NEXT: stdu r1, -64(r1)
26
26
; CHECK-NEXT: .cfi_def_cfa_offset 64
27
27
; CHECK-NEXT: .cfi_offset lr, 16
28
+ ; CHECK-NEXT: .cfi_offset r28, -32
28
29
; CHECK-NEXT: .cfi_offset r29, -24
29
30
; CHECK-NEXT: .cfi_offset r30, -16
30
31
; CHECK-NEXT: .cfi_offset cr2, 8
31
32
; CHECK-NEXT: .cfi_offset cr3, 8
32
33
; CHECK-NEXT: .cfi_offset cr4, 8
33
- ; CHECK-NEXT: lwz r3, 0(r3)
34
- ; CHECK-NEXT: std r29, 40(r1) # 8-byte Folded Spill
34
+ ; CHECK-NEXT: lwz r4, 0(r3)
35
35
; CHECK-NEXT: std r30, 48(r1) # 8-byte Folded Spill
36
+ ; CHECK-NEXT: addi r30, r3, -1
37
+ ; CHECK-NEXT: li r3, 0
38
+ ; CHECK-NEXT: std r28, 32(r1) # 8-byte Folded Spill
39
+ ; CHECK-NEXT: std r29, 40(r1) # 8-byte Folded Spill
36
40
; CHECK-NEXT: crxor 4*cr2+eq, 4*cr2+eq, 4*cr2+eq
37
- ; CHECK-NEXT: paddi r29, 0, .LJTI0_0@PCREL, 1
38
- ; CHECK-NEXT: srwi r4, r3, 4
39
- ; CHECK-NEXT: srwi r3, r3, 5
41
+ ; CHECK-NEXT: paddi r28, 0, .LJTI0_0@PCREL, 1
42
+ ; CHECK-NEXT: sldi r29, r3, 2
43
+ ; CHECK-NEXT: srwi r5, r4, 4
44
+ ; CHECK-NEXT: srwi r4, r4, 5
45
+ ; CHECK-NEXT: andi. r5, r5, 1
46
+ ; CHECK-NEXT: crmove 4*cr2+gt, gt
40
47
; CHECK-NEXT: andi. r4, r4, 1
41
48
; CHECK-NEXT: li r4, 0
42
- ; CHECK-NEXT: crmove 4*cr2+gt, gt
43
- ; CHECK-NEXT: andi. r3, r3, 1
44
- ; CHECK-NEXT: li r3, 0
45
49
; CHECK-NEXT: crmove 4*cr2+lt, gt
46
- ; CHECK-NEXT: sldi r30, r3, 2
47
50
; CHECK-NEXT: b .LBB0_2
48
51
; CHECK-NEXT: .LBB0_1: # %bb43
49
52
; CHECK-NEXT: #
50
53
; CHECK-NEXT: bl call_1@notoc
51
- ; CHECK-NEXT: setnbc r3, 4*cr3+eq
52
- ; CHECK-NEXT: li r4, 0
53
- ; CHECK-NEXT: stb r4 , 0(r3 )
54
+ ; CHECK-NEXT: li r3, 0
55
+ ; CHECK-NEXT: isel r4, r30, r3, 4*cr3+eq
56
+ ; CHECK-NEXT: stb r3 , 0(r4 )
54
57
; CHECK-NEXT: li r4, 0
55
58
; CHECK-NEXT: .p2align 4
56
59
; CHECK-NEXT: .LBB0_2: # %bb5
@@ -65,8 +68,8 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
65
68
; CHECK-NEXT: lwz r5, 0(r3)
66
69
; CHECK-NEXT: rlwinm r4, r5, 0, 21, 22
67
70
; CHECK-NEXT: cmpwi cr3, r4, 512
68
- ; CHECK-NEXT: lwax r4, r29, r30
69
- ; CHECK-NEXT: add r4, r29 , r4
71
+ ; CHECK-NEXT: lwax r4, r28, r29
72
+ ; CHECK-NEXT: add r4, r28 , r4
70
73
; CHECK-NEXT: mtctr r4
71
74
; CHECK-NEXT: li r4, 0
72
75
; CHECK-NEXT: bctr
@@ -177,6 +180,7 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
177
180
; CHECK-NEXT: .LBB0_31: # %bb9
178
181
; CHECK-NEXT: ld r30, 48(r1) # 8-byte Folded Reload
179
182
; CHECK-NEXT: ld r29, 40(r1) # 8-byte Folded Reload
183
+ ; CHECK-NEXT: ld r28, 32(r1) # 8-byte Folded Reload
180
184
; CHECK-NEXT: addi r1, r1, 64
181
185
; CHECK-NEXT: ld r0, 16(r1)
182
186
; CHECK-NEXT: lwz r12, 8(r1)
@@ -187,10 +191,10 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
187
191
; CHECK-NEXT: blr
188
192
; CHECK-NEXT: .LBB0_32: # %bb29
189
193
; CHECK-NEXT: crmove eq, 4*cr3+eq
194
+ ; CHECK-NEXT: li r29, 0
190
195
; CHECK-NEXT: cmpwi cr3, r5, 366
191
196
; CHECK-NEXT: cmpwi cr4, r3, 0
192
- ; CHECK-NEXT: li r29, 0
193
- ; CHECK-NEXT: setnbc r30, eq
197
+ ; CHECK-NEXT: iseleq r30, r30, r29
194
198
; CHECK-NEXT: bc 12, 4*cr2+lt, .LBB0_36
195
199
; CHECK-NEXT: .p2align 5
196
200
; CHECK-NEXT: .LBB0_33: # %bb36
@@ -216,34 +220,37 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
216
220
; CHECK-BE-NEXT: stdu r1, -144(r1)
217
221
; CHECK-BE-NEXT: .cfi_def_cfa_offset 144
218
222
; CHECK-BE-NEXT: .cfi_offset lr, 16
223
+ ; CHECK-BE-NEXT: .cfi_offset r28, -32
219
224
; CHECK-BE-NEXT: .cfi_offset r29, -24
220
225
; CHECK-BE-NEXT: .cfi_offset r30, -16
221
226
; CHECK-BE-NEXT: .cfi_offset cr2, 8
222
227
; CHECK-BE-NEXT: .cfi_offset cr2, 8
223
228
; CHECK-BE-NEXT: .cfi_offset cr2, 8
224
- ; CHECK-BE-NEXT: lwz r3, 0(r3)
225
- ; CHECK-BE-NEXT: std r29, 120(r1) # 8-byte Folded Spill
229
+ ; CHECK-BE-NEXT: lwz r4, 0(r3)
226
230
; CHECK-BE-NEXT: std r30, 128(r1) # 8-byte Folded Spill
231
+ ; CHECK-BE-NEXT: addi r30, r3, -1
232
+ ; CHECK-BE-NEXT: li r3, 0
233
+ ; CHECK-BE-NEXT: std r28, 112(r1) # 8-byte Folded Spill
234
+ ; CHECK-BE-NEXT: std r29, 120(r1) # 8-byte Folded Spill
227
235
; CHECK-BE-NEXT: crxor 4*cr2+eq, 4*cr2+eq, 4*cr2+eq
228
- ; CHECK-BE-NEXT: srwi r4, r3, 4
229
- ; CHECK-BE-NEXT: srwi r3, r3, 5
236
+ ; CHECK-BE-NEXT: sldi r29, r3, 2
237
+ ; CHECK-BE-NEXT: addis r3, r2, .LC0@toc@ha
238
+ ; CHECK-BE-NEXT: ld r28, .LC0@toc@l(r3)
239
+ ; CHECK-BE-NEXT: srwi r5, r4, 4
240
+ ; CHECK-BE-NEXT: srwi r4, r4, 5
241
+ ; CHECK-BE-NEXT: andi. r5, r5, 1
242
+ ; CHECK-BE-NEXT: crmove 4*cr2+gt, gt
230
243
; CHECK-BE-NEXT: andi. r4, r4, 1
231
244
; CHECK-BE-NEXT: li r4, 0
232
- ; CHECK-BE-NEXT: crmove 4*cr2+gt, gt
233
- ; CHECK-BE-NEXT: andi. r3, r3, 1
234
- ; CHECK-BE-NEXT: li r3, 0
235
245
; CHECK-BE-NEXT: crmove 4*cr2+lt, gt
236
- ; CHECK-BE-NEXT: sldi r30, r3, 2
237
- ; CHECK-BE-NEXT: addis r3, r2, .LC0@toc@ha
238
- ; CHECK-BE-NEXT: ld r29, .LC0@toc@l(r3)
239
246
; CHECK-BE-NEXT: b .LBB0_2
240
247
; CHECK-BE-NEXT: .LBB0_1: # %bb43
241
248
; CHECK-BE-NEXT: #
242
249
; CHECK-BE-NEXT: bl call_1
243
250
; CHECK-BE-NEXT: nop
244
- ; CHECK-BE-NEXT: setnbc r3, 4*cr3+eq
245
- ; CHECK-BE-NEXT: li r4, 0
246
- ; CHECK-BE-NEXT: stb r4 , 0(r3 )
251
+ ; CHECK-BE-NEXT: li r3, 0
252
+ ; CHECK-BE-NEXT: isel r4, r30, r3, 4*cr3+eq
253
+ ; CHECK-BE-NEXT: stb r3 , 0(r4 )
247
254
; CHECK-BE-NEXT: li r4, 0
248
255
; CHECK-BE-NEXT: .p2align 4
249
256
; CHECK-BE-NEXT: .LBB0_2: # %bb5
@@ -258,8 +265,8 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
258
265
; CHECK-BE-NEXT: lwz r5, 0(r3)
259
266
; CHECK-BE-NEXT: rlwinm r4, r5, 0, 21, 22
260
267
; CHECK-BE-NEXT: cmpwi cr3, r4, 512
261
- ; CHECK-BE-NEXT: lwax r4, r29, r30
262
- ; CHECK-BE-NEXT: add r4, r29 , r4
268
+ ; CHECK-BE-NEXT: lwax r4, r28, r29
269
+ ; CHECK-BE-NEXT: add r4, r28 , r4
263
270
; CHECK-BE-NEXT: mtctr r4
264
271
; CHECK-BE-NEXT: li r4, 0
265
272
; CHECK-BE-NEXT: bctr
@@ -370,6 +377,7 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
370
377
; CHECK-BE-NEXT: .LBB0_31: # %bb9
371
378
; CHECK-BE-NEXT: ld r30, 128(r1) # 8-byte Folded Reload
372
379
; CHECK-BE-NEXT: ld r29, 120(r1) # 8-byte Folded Reload
380
+ ; CHECK-BE-NEXT: ld r28, 112(r1) # 8-byte Folded Reload
373
381
; CHECK-BE-NEXT: addi r1, r1, 144
374
382
; CHECK-BE-NEXT: ld r0, 16(r1)
375
383
; CHECK-BE-NEXT: lwz r12, 8(r1)
@@ -380,10 +388,10 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
380
388
; CHECK-BE-NEXT: blr
381
389
; CHECK-BE-NEXT: .LBB0_32: # %bb29
382
390
; CHECK-BE-NEXT: crmove eq, 4*cr3+eq
391
+ ; CHECK-BE-NEXT: li r29, 0
383
392
; CHECK-BE-NEXT: cmpwi cr3, r5, 366
384
393
; CHECK-BE-NEXT: cmpwi cr4, r3, 0
385
- ; CHECK-BE-NEXT: li r29, 0
386
- ; CHECK-BE-NEXT: setnbc r30, eq
394
+ ; CHECK-BE-NEXT: iseleq r30, r30, r29
387
395
; CHECK-BE-NEXT: bc 12, 4*cr2+lt, .LBB0_36
388
396
; CHECK-BE-NEXT: .p2align 4
389
397
; CHECK-BE-NEXT: .LBB0_33: # %bb36
@@ -528,7 +536,7 @@ bb32: ; preds = %bb40, %bb29
528
536
br i1 %tmp7 , label %bb33 , label %bb36
529
537
530
538
bb33: ; preds = %bb32
531
- %tmp34 = getelementptr inbounds i8 , ptr null , i64 -1
539
+ %tmp34 = getelementptr inbounds i8 , ptr %p , i64 -1
532
540
%tmp35 = select i1 %tmp12 , ptr %tmp34 , ptr null
533
541
store i8 0 , ptr %tmp35 , align 1
534
542
br label %bb36
@@ -558,7 +566,7 @@ bb42: ; preds = %bb42, %bb41
558
566
559
567
bb43: ; preds = %bb10, %bb10
560
568
call void @call_1 ()
561
- %tmp44 = getelementptr inbounds i8 , ptr null , i64 -1
569
+ %tmp44 = getelementptr inbounds i8 , ptr %p , i64 -1
562
570
%tmp45 = select i1 %tmp12 , ptr %tmp44 , ptr null
563
571
store i8 0 , ptr %tmp45 , align 1
564
572
br label %bb63
0 commit comments