1515; bit of any CR field is spilled. We need to test the spilling of a CR bit
1616; other than the LT bit. Hence this test case is rather complex.
1717
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 {
1919; CHECK-LABEL: P10_Spill_CR_GT:
2020; CHECK: # %bb.0: # %bb
2121; CHECK-NEXT: mfcr r12
@@ -25,32 +25,35 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
2525; CHECK-NEXT: stdu r1, -64(r1)
2626; CHECK-NEXT: .cfi_def_cfa_offset 64
2727; CHECK-NEXT: .cfi_offset lr, 16
28+ ; CHECK-NEXT: .cfi_offset r28, -32
2829; CHECK-NEXT: .cfi_offset r29, -24
2930; CHECK-NEXT: .cfi_offset r30, -16
3031; CHECK-NEXT: .cfi_offset cr2, 8
3132; CHECK-NEXT: .cfi_offset cr3, 8
3233; 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)
3535; 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
3640; 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
4047; CHECK-NEXT: andi. r4, r4, 1
4148; 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
4549; CHECK-NEXT: crmove 4*cr2+lt, gt
46- ; CHECK-NEXT: sldi r30, r3, 2
4750; CHECK-NEXT: b .LBB0_2
4851; CHECK-NEXT: .LBB0_1: # %bb43
4952; CHECK-NEXT: #
5053; 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 )
5457; CHECK-NEXT: li r4, 0
5558; CHECK-NEXT: .p2align 4
5659; CHECK-NEXT: .LBB0_2: # %bb5
@@ -65,8 +68,8 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
6568; CHECK-NEXT: lwz r5, 0(r3)
6669; CHECK-NEXT: rlwinm r4, r5, 0, 21, 22
6770; 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
7073; CHECK-NEXT: mtctr r4
7174; CHECK-NEXT: li r4, 0
7275; CHECK-NEXT: bctr
@@ -177,6 +180,7 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
177180; CHECK-NEXT: .LBB0_31: # %bb9
178181; CHECK-NEXT: ld r30, 48(r1) # 8-byte Folded Reload
179182; CHECK-NEXT: ld r29, 40(r1) # 8-byte Folded Reload
183+ ; CHECK-NEXT: ld r28, 32(r1) # 8-byte Folded Reload
180184; CHECK-NEXT: addi r1, r1, 64
181185; CHECK-NEXT: ld r0, 16(r1)
182186; CHECK-NEXT: lwz r12, 8(r1)
@@ -187,10 +191,10 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
187191; CHECK-NEXT: blr
188192; CHECK-NEXT: .LBB0_32: # %bb29
189193; CHECK-NEXT: crmove eq, 4*cr3+eq
194+ ; CHECK-NEXT: li r29, 0
190195; CHECK-NEXT: cmpwi cr3, r5, 366
191196; 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
194198; CHECK-NEXT: bc 12, 4*cr2+lt, .LBB0_36
195199; CHECK-NEXT: .p2align 5
196200; CHECK-NEXT: .LBB0_33: # %bb36
@@ -216,34 +220,37 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
216220; CHECK-BE-NEXT: stdu r1, -144(r1)
217221; CHECK-BE-NEXT: .cfi_def_cfa_offset 144
218222; CHECK-BE-NEXT: .cfi_offset lr, 16
223+ ; CHECK-BE-NEXT: .cfi_offset r28, -32
219224; CHECK-BE-NEXT: .cfi_offset r29, -24
220225; CHECK-BE-NEXT: .cfi_offset r30, -16
221226; CHECK-BE-NEXT: .cfi_offset cr2, 8
222227; CHECK-BE-NEXT: .cfi_offset cr2, 8
223228; 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)
226230; 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
227235; 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
230243; CHECK-BE-NEXT: andi. r4, r4, 1
231244; 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
235245; 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)
239246; CHECK-BE-NEXT: b .LBB0_2
240247; CHECK-BE-NEXT: .LBB0_1: # %bb43
241248; CHECK-BE-NEXT: #
242249; CHECK-BE-NEXT: bl call_1
243250; 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 )
247254; CHECK-BE-NEXT: li r4, 0
248255; CHECK-BE-NEXT: .p2align 4
249256; CHECK-BE-NEXT: .LBB0_2: # %bb5
@@ -258,8 +265,8 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
258265; CHECK-BE-NEXT: lwz r5, 0(r3)
259266; CHECK-BE-NEXT: rlwinm r4, r5, 0, 21, 22
260267; 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
263270; CHECK-BE-NEXT: mtctr r4
264271; CHECK-BE-NEXT: li r4, 0
265272; CHECK-BE-NEXT: bctr
@@ -370,6 +377,7 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
370377; CHECK-BE-NEXT: .LBB0_31: # %bb9
371378; CHECK-BE-NEXT: ld r30, 128(r1) # 8-byte Folded Reload
372379; CHECK-BE-NEXT: ld r29, 120(r1) # 8-byte Folded Reload
380+ ; CHECK-BE-NEXT: ld r28, 112(r1) # 8-byte Folded Reload
373381; CHECK-BE-NEXT: addi r1, r1, 144
374382; CHECK-BE-NEXT: ld r0, 16(r1)
375383; CHECK-BE-NEXT: lwz r12, 8(r1)
@@ -380,10 +388,10 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
380388; CHECK-BE-NEXT: blr
381389; CHECK-BE-NEXT: .LBB0_32: # %bb29
382390; CHECK-BE-NEXT: crmove eq, 4*cr3+eq
391+ ; CHECK-BE-NEXT: li r29, 0
383392; CHECK-BE-NEXT: cmpwi cr3, r5, 366
384393; 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
387395; CHECK-BE-NEXT: bc 12, 4*cr2+lt, .LBB0_36
388396; CHECK-BE-NEXT: .p2align 4
389397; CHECK-BE-NEXT: .LBB0_33: # %bb36
@@ -528,7 +536,7 @@ bb32: ; preds = %bb40, %bb29
528536 br i1 %tmp7 , label %bb33 , label %bb36
529537
530538bb33: ; preds = %bb32
531- %tmp34 = getelementptr inbounds i8 , ptr null , i64 -1
539+ %tmp34 = getelementptr inbounds i8 , ptr %p , i64 -1
532540 %tmp35 = select i1 %tmp12 , ptr %tmp34 , ptr null
533541 store i8 0 , ptr %tmp35 , align 1
534542 br label %bb36
@@ -558,7 +566,7 @@ bb42: ; preds = %bb42, %bb41
558566
559567bb43: ; preds = %bb10, %bb10
560568 call void @call_1 ()
561- %tmp44 = getelementptr inbounds i8 , ptr null , i64 -1
569+ %tmp44 = getelementptr inbounds i8 , ptr %p , i64 -1
562570 %tmp45 = select i1 %tmp12 , ptr %tmp44 , ptr null
563571 store i8 0 , ptr %tmp45 , align 1
564572 br label %bb63
0 commit comments