Skip to content

Commit 3453ded

Browse files
author
Chen Zheng
committed
[PowerPC] return correct frame address for frameaddress intrinsic
1 parent 0749b01 commit 3453ded

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

llvm/lib/Target/PowerPC/PPCFrameLowering.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,8 @@ PPCFrameLowering::determineFrameLayout(const MachineFunction &MF,
317317
!MFI.adjustsStack() && // No calls.
318318
!MustSaveLR(MF, LR) && // No need to save LR.
319319
!FI->mustSaveTOC() && // No need to save TOC.
320-
!RegInfo->hasBasePointer(MF); // No special alignment.
320+
!RegInfo->hasBasePointer(MF) && // No special alignment.
321+
!MFI.isFrameAddressTaken();
321322

322323
// Note: for PPC32 SVR4ABI, we can still generate stackless
323324
// code if all local vars are reg-allocated.

llvm/test/CodeGen/PowerPC/2010-05-03-retaddr1.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ declare ptr @llvm.frameaddress(i32) nounwind readnone
77
define ptr @g2() nounwind readnone {
88
; CHECK-LABEL: g2:
99
; CHECK: # %bb.0: # %entry
10+
; CHECK-NEXT: stwu 1, -16(1)
1011
; CHECK-NEXT: lwz 3, 0(1)
12+
; CHECK-NEXT: addi 1, 1, 16
1113
; CHECK-NEXT: blr
1214
entry:
1315
%0 = tail call ptr @llvm.frameaddress(i32 1) ; <ptr> [#uses=1]

llvm/test/CodeGen/PowerPC/frameaddr.ll

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,23 @@
66
define ptr @main() #0 {
77
; AIX32-LABEL: main:
88
; AIX32: # %bb.0: # %entry
9+
; AIX32-NEXT: stwu 1, -32(1)
910
; AIX32-NEXT: mr 3, 1
11+
; AIX32-NEXT: addi 1, 1, 32
1012
; AIX32-NEXT: blr
1113
;
1214
; AIX64-LABEL: main:
1315
; AIX64: # %bb.0: # %entry
16+
; AIX64-NEXT: stdu 1, -48(1)
1417
; AIX64-NEXT: mr 3, 1
18+
; AIX64-NEXT: addi 1, 1, 48
1519
; AIX64-NEXT: blr
1620
;
1721
; LE-LABEL: main:
1822
; LE: # %bb.0: # %entry
23+
; LE-NEXT: stdu 1, -32(1)
1924
; LE-NEXT: mr 3, 1
25+
; LE-NEXT: addi 1, 1, 32
2026
; LE-NEXT: blr
2127
entry:
2228
%0 = call ptr @llvm.frameaddress(i32 0)
@@ -46,17 +52,23 @@ entry:
4652
define ptr @foo1() #0 {
4753
; AIX32-LABEL: foo1:
4854
; AIX32: # %bb.0: # %entry
55+
; AIX32-NEXT: stwu 1, -32(1)
4956
; AIX32-NEXT: lwz 3, 0(1)
57+
; AIX32-NEXT: addi 1, 1, 32
5058
; AIX32-NEXT: blr
5159
;
5260
; AIX64-LABEL: foo1:
5361
; AIX64: # %bb.0: # %entry
62+
; AIX64-NEXT: stdu 1, -48(1)
5463
; AIX64-NEXT: ld 3, 0(1)
64+
; AIX64-NEXT: addi 1, 1, 48
5565
; AIX64-NEXT: blr
5666
;
5767
; LE-LABEL: foo1:
5868
; LE: # %bb.0: # %entry
69+
; LE-NEXT: stdu 1, -32(1)
5970
; LE-NEXT: ld 3, 0(1)
71+
; LE-NEXT: addi 1, 1, 32
6072
; LE-NEXT: blr
6173
entry:
6274
%0 = call ptr @llvm.frameaddress(i32 1)
@@ -66,20 +78,26 @@ entry:
6678
define ptr @foo2() #0 {
6779
; AIX32-LABEL: foo2:
6880
; AIX32: # %bb.0: # %entry
81+
; AIX32-NEXT: stwu 1, -32(1)
6982
; AIX32-NEXT: lwz 3, 0(1)
7083
; AIX32-NEXT: lwz 3, 0(3)
84+
; AIX32-NEXT: addi 1, 1, 32
7185
; AIX32-NEXT: blr
7286
;
7387
; AIX64-LABEL: foo2:
7488
; AIX64: # %bb.0: # %entry
89+
; AIX64-NEXT: stdu 1, -48(1)
7590
; AIX64-NEXT: ld 3, 0(1)
7691
; AIX64-NEXT: ld 3, 0(3)
92+
; AIX64-NEXT: addi 1, 1, 48
7793
; AIX64-NEXT: blr
7894
;
7995
; LE-LABEL: foo2:
8096
; LE: # %bb.0: # %entry
97+
; LE-NEXT: stdu 1, -32(1)
8198
; LE-NEXT: ld 3, 0(1)
8299
; LE-NEXT: ld 3, 0(3)
100+
; LE-NEXT: addi 1, 1, 32
83101
; LE-NEXT: blr
84102
entry:
85103
%0 = call ptr @llvm.frameaddress(i32 2)

0 commit comments

Comments
 (0)