summaryrefslogtreecommitdiff
path: root/test/CodeGen/PowerPC/ppc-prologue.ll
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2009-11-10 22:14:04 +0000
committerBill Wendling <isanbard@gmail.com>2009-11-10 22:14:04 +0000
commitb19a5e9be6097eab311678ccbd9e046c72f7e052 (patch)
tree167c1f2b0e3219c35f4c2bb045b6cbf2e9423824 /test/CodeGen/PowerPC/ppc-prologue.ll
parent6daf99bf8fa7572fac271bbcd0a8da44ffc2df44 (diff)
downloadllvm-b19a5e9be6097eab311678ccbd9e046c72f7e052.tar.gz
llvm-b19a5e9be6097eab311678ccbd9e046c72f7e052.tar.bz2
llvm-b19a5e9be6097eab311678ccbd9e046c72f7e052.tar.xz
Modify how the prologue encoded the "move" information for the FDE. GCC
generates a sequence similar to this: __Z4funci: LFB2: mflr r0 LCFI0: stmw r30,-8(r1) LCFI1: stw r0,8(r1) LCFI2: stwu r1,-80(r1) LCFI3: mr r30,r1 LCFI4: where LCFI3 and LCFI4 are used by the FDE to indicate what the FP, LR, and other things are. We generated something more like this: Leh_func_begin1: mflr r0 stw r31, 20(r1) stw r0, 8(r1) Llabel1: stwu r1, -80(r1) Llabel2: mr r31, r1 Note that we are missing the "mr" instruction. This patch makes it more like the GCC output. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86729 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/PowerPC/ppc-prologue.ll')
-rw-r--r--test/CodeGen/PowerPC/ppc-prologue.ll28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/CodeGen/PowerPC/ppc-prologue.ll b/test/CodeGen/PowerPC/ppc-prologue.ll
new file mode 100644
index 0000000000..a7831714b4
--- /dev/null
+++ b/test/CodeGen/PowerPC/ppc-prologue.ll
@@ -0,0 +1,28 @@
+; RUN: llc < %s -march=ppc32 -disable-fp-elim | FileCheck %s
+
+define i32 @_Z4funci(i32 %a) ssp {
+; CHECK: mflr r0
+; CHECK-NEXT: stw r31, 20(r1)
+; CHECK-NEXT: stw r0, 8(r1)
+; CHECK-NEXT: stwu r1, -80(r1)
+; CHECK-NEXT: Llabel1:
+; CHECK-NEXT: mr r31, r1
+; CHECK-NEXT: Llabel2:
+entry:
+ %a_addr = alloca i32 ; <i32*> [#uses=2]
+ %retval = alloca i32 ; <i32*> [#uses=2]
+ %0 = alloca i32 ; <i32*> [#uses=2]
+ %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
+ store i32 %a, i32* %a_addr
+ %1 = call i32 @_Z3barPi(i32* %a_addr) ; <i32> [#uses=1]
+ store i32 %1, i32* %0, align 4
+ %2 = load i32* %0, align 4 ; <i32> [#uses=1]
+ store i32 %2, i32* %retval, align 4
+ br label %return
+
+return: ; preds = %entry
+ %retval1 = load i32* %retval ; <i32> [#uses=1]
+ ret i32 %retval1
+}
+
+declare i32 @_Z3barPi(i32*)