22; RUN: llc -ppc-asm-full-reg-names -verify-machineinstrs \
33; RUN: -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s
44; We don't want to produce a CTR loop due to the call to lrint in the body.
5- define dso_local void @test (i64 %arg , i64 %arg1 ) {
5+ define dso_local void @test (i64 %arg , i64 %arg1 , ptr %arg2 ) {
66; CHECK-LABEL: test:
77; CHECK: # %bb.0: # %bb
88; CHECK-NEXT: bc 4, 4*cr5+lt, .LBB0_5
@@ -12,29 +12,33 @@ define dso_local void @test(i64 %arg, i64 %arg1) {
1212; CHECK-NEXT: mflr r0
1313; CHECK-NEXT: .cfi_def_cfa_offset 64
1414; CHECK-NEXT: .cfi_offset lr, 16
15+ ; CHECK-NEXT: .cfi_offset r28, -32
1516; CHECK-NEXT: .cfi_offset r29, -24
1617; CHECK-NEXT: .cfi_offset r30, -16
18+ ; CHECK-NEXT: std r28, -32(r1) # 8-byte Folded Spill
1719; CHECK-NEXT: std r29, -24(r1) # 8-byte Folded Spill
1820; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill
1921; CHECK-NEXT: stdu r1, -64(r1)
20- ; CHECK-NEXT: sub r30, r4, r3
21- ; CHECK-NEXT: li r29, -4
22+ ; CHECK-NEXT: mr r30, r5
23+ ; CHECK-NEXT: sub r29, r4, r3
24+ ; CHECK-NEXT: addi r28, r5, -4
2225; CHECK-NEXT: std r0, 80(r1)
2326; CHECK-NEXT: .p2align 5
2427; CHECK-NEXT: .LBB0_3: # %bb5
2528; CHECK-NEXT: #
26- ; CHECK-NEXT: lfsu f1, 4(r29 )
29+ ; CHECK-NEXT: lfsu f1, 4(r28 )
2730; CHECK-NEXT: bl lrint
2831; CHECK-NEXT: nop
29- ; CHECK-NEXT: addi r30, r30, -1
30- ; CHECK-NEXT: cmpldi r30, 0
32+ ; CHECK-NEXT: addi r29, r29, -1
33+ ; CHECK-NEXT: stb r3, 0(r30)
34+ ; CHECK-NEXT: cmpldi r29, 0
3135; CHECK-NEXT: bc 12, gt, .LBB0_3
3236; CHECK-NEXT: # %bb.4: # %bb15
33- ; CHECK-NEXT: stb r3, 0(r3)
3437; CHECK-NEXT: addi r1, r1, 64
3538; CHECK-NEXT: ld r0, 16(r1)
3639; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
3740; CHECK-NEXT: ld r29, -24(r1) # 8-byte Folded Reload
41+ ; CHECK-NEXT: ld r28, -32(r1) # 8-byte Folded Reload
3842; CHECK-NEXT: mtlr r0
3943; CHECK-NEXT: blr
4044; CHECK-NEXT: .LBB0_5: # %bb2
@@ -54,12 +58,12 @@ bb4: ; preds = %bb3
5458
5559bb5: ; preds = %bb5, %bb4
5660 %tmp6 = phi i64 [ %tmp12 , %bb5 ], [ 0 , %bb4 ]
57- %tmp7 = getelementptr inbounds float , ptr null , i64 %tmp6
61+ %tmp7 = getelementptr inbounds float , ptr %arg2 , i64 %tmp6
5862 %tmp8 = load float , ptr %tmp7 , align 4
5963 %tmp9 = fpext float %tmp8 to double
6064 %tmp10 = tail call i64 @llvm.lrint.i64.f64 (double %tmp9 ) #2
6165 %tmp11 = trunc i64 %tmp10 to i8
62- store i8 %tmp11 , ptr undef , align 1
66+ store i8 %tmp11 , ptr %arg2 , align 1
6367 %tmp12 = add nuw i64 %tmp6 , 1
6468 %tmp13 = icmp eq i64 %tmp12 , %tmp
6569 br i1 %tmp13 , label %bb15 , label %bb5
0 commit comments