2
2
; RUN: llc -ppc-asm-full-reg-names -verify-machineinstrs \
3
3
; RUN: -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s
4
4
; 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 ) {
6
6
; CHECK-LABEL: test:
7
7
; CHECK: # %bb.0: # %bb
8
8
; CHECK-NEXT: bc 4, 4*cr5+lt, .LBB0_5
@@ -12,29 +12,33 @@ define dso_local void @test(i64 %arg, i64 %arg1) {
12
12
; CHECK-NEXT: mflr r0
13
13
; CHECK-NEXT: .cfi_def_cfa_offset 64
14
14
; CHECK-NEXT: .cfi_offset lr, 16
15
+ ; CHECK-NEXT: .cfi_offset r28, -32
15
16
; CHECK-NEXT: .cfi_offset r29, -24
16
17
; CHECK-NEXT: .cfi_offset r30, -16
18
+ ; CHECK-NEXT: std r28, -32(r1) # 8-byte Folded Spill
17
19
; CHECK-NEXT: std r29, -24(r1) # 8-byte Folded Spill
18
20
; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill
19
21
; 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
22
25
; CHECK-NEXT: std r0, 80(r1)
23
26
; CHECK-NEXT: .p2align 5
24
27
; CHECK-NEXT: .LBB0_3: # %bb5
25
28
; CHECK-NEXT: #
26
- ; CHECK-NEXT: lfsu f1, 4(r29 )
29
+ ; CHECK-NEXT: lfsu f1, 4(r28 )
27
30
; CHECK-NEXT: bl lrint
28
31
; 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
31
35
; CHECK-NEXT: bc 12, gt, .LBB0_3
32
36
; CHECK-NEXT: # %bb.4: # %bb15
33
- ; CHECK-NEXT: stb r3, 0(r3)
34
37
; CHECK-NEXT: addi r1, r1, 64
35
38
; CHECK-NEXT: ld r0, 16(r1)
36
39
; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
37
40
; CHECK-NEXT: ld r29, -24(r1) # 8-byte Folded Reload
41
+ ; CHECK-NEXT: ld r28, -32(r1) # 8-byte Folded Reload
38
42
; CHECK-NEXT: mtlr r0
39
43
; CHECK-NEXT: blr
40
44
; CHECK-NEXT: .LBB0_5: # %bb2
@@ -54,12 +58,12 @@ bb4: ; preds = %bb3
54
58
55
59
bb5: ; preds = %bb5, %bb4
56
60
%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
58
62
%tmp8 = load float , ptr %tmp7 , align 4
59
63
%tmp9 = fpext float %tmp8 to double
60
64
%tmp10 = tail call i64 @llvm.lrint.i64.f64 (double %tmp9 ) #2
61
65
%tmp11 = trunc i64 %tmp10 to i8
62
- store i8 %tmp11 , ptr undef , align 1
66
+ store i8 %tmp11 , ptr %arg2 , align 1
63
67
%tmp12 = add nuw i64 %tmp6 , 1
64
68
%tmp13 = icmp eq i64 %tmp12 , %tmp
65
69
br i1 %tmp13 , label %bb15 , label %bb5
0 commit comments