diff options
author | Bob Wilson <bob.wilson@apple.com> | 2010-06-22 22:04:24 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@apple.com> | 2010-06-22 22:04:24 +0000 |
commit | a3a204664db165f7b58a45e2239127513b207e8f (patch) | |
tree | 4424c3dfa4f90c5fa53b8ae36a669005506e27b6 | |
parent | 97994e02621dbb174463c348b7155978a1429b8b (diff) | |
download | external_llvm-a3a204664db165f7b58a45e2239127513b207e8f.zip external_llvm-a3a204664db165f7b58a45e2239127513b207e8f.tar.gz external_llvm-a3a204664db165f7b58a45e2239127513b207e8f.tar.bz2 |
Thumb1 functions using @llvm.returnaddress were not saving the incoming LR.
Radar 8031193.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106582 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/ARM/Thumb1InstrInfo.cpp | 6 | ||||
-rw-r--r-- | test/CodeGen/ARM/arm-returnaddr.ll | 4 |
2 files changed, 6 insertions, 4 deletions
diff --git a/lib/Target/ARM/Thumb1InstrInfo.cpp b/lib/Target/ARM/Thumb1InstrInfo.cpp index d17f60e..6408c00 100644 --- a/lib/Target/ARM/Thumb1InstrInfo.cpp +++ b/lib/Target/ARM/Thumb1InstrInfo.cpp @@ -175,10 +175,10 @@ spillCalleeSavedRegisters(MachineBasicBlock &MBB, isKill = false; } - if (isKill) { + if (isKill) MBB.addLiveIn(Reg); - MIB.addReg(Reg, RegState::Kill); - } + + MIB.addReg(Reg, getKillRegState(isKill)); } return true; } diff --git a/test/CodeGen/ARM/arm-returnaddr.ll b/test/CodeGen/ARM/arm-returnaddr.ll index c4f1814..382a183 100644 --- a/test/CodeGen/ARM/arm-returnaddr.ll +++ b/test/CodeGen/ARM/arm-returnaddr.ll @@ -1,11 +1,12 @@ ; RUN: llc < %s -mtriple=arm-apple-darwin | FileCheck %s -; RUN: llc < %s -mtriple=thumbv6-apple-darwin +; RUN: llc < %s -mtriple=thumbv6-apple-darwin | FileCheck %s ; rdar://8015977 ; rdar://8020118 define i8* @rt0(i32 %x) nounwind readnone { entry: ; CHECK: rt0: +; CHECK: {r7, lr} ; CHECK: mov r0, lr %0 = tail call i8* @llvm.returnaddress(i32 0) ret i8* %0 @@ -14,6 +15,7 @@ entry: define i8* @rt2() nounwind readnone { entry: ; CHECK: rt2: +; CHECK: {r7, lr} ; CHECK: ldr r0, [r7] ; CHECK: ldr r0, [r0] ; CHECK: ldr r0, [r0, #4] |