diff options
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 2 | ||||
-rw-r--r-- | llvm/test/CodeGen/PowerPC/retaddr2.ll | 25 |
2 files changed, 26 insertions, 1 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 18384627ced..06cf9af80b6 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -5164,7 +5164,7 @@ PPCTargetLowering::getReturnAddrFrameIndex(SelectionDAG & DAG) const { // Find out what the fix offset of the frame pointer save area. int LROffset = PPCFrameLowering::getReturnSaveOffset(isPPC64, isDarwinABI); // Allocate the frame index for frame pointer save area. - RASI = MF.getFrameInfo()->CreateFixedObject(isPPC64? 8 : 4, LROffset, true); + RASI = MF.getFrameInfo()->CreateFixedObject(isPPC64? 8 : 4, LROffset, false); // Save the result. FI->setReturnAddrSaveIndex(RASI); } diff --git a/llvm/test/CodeGen/PowerPC/retaddr2.ll b/llvm/test/CodeGen/PowerPC/retaddr2.ll new file mode 100644 index 00000000000..8fa3b4d13b7 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/retaddr2.ll @@ -0,0 +1,25 @@ +; RUN: llc -mcpu=pwr7 < %s | FileCheck %s +target datalayout = "E-m:e-i64:64-n32:64" +target triple = "powerpc64-unknown-linux-gnu" + +; Function Attrs: nounwind readnone +define i8* @test1() #0 { +entry: + %0 = tail call i8* @llvm.returnaddress(i32 0) + ret i8* %0 +} + +; CHECK-LABEL: @test1 +; CHECK: mflr 0 +; CHECK: std 0, 16(1) +; FIXME: These next two lines don't both need to load the same value. +; CHECK-DAG: ld 3, 16(1) +; CHECK-DAG: ld 0, 16(1) +; CHECK: mtlr 0 +; CHECK: blr + +; Function Attrs: nounwind readnone +declare i8* @llvm.returnaddress(i32) #0 + +attributes #0 = { nounwind readnone } + |