Thumb1 functions using @llvm.returnaddress were not saving the incoming LR.
authorBob Wilson <bob.wilson@apple.com>
Tue, 22 Jun 2010 22:04:24 +0000 (22:04 +0000)
committerBob Wilson <bob.wilson@apple.com>
Tue, 22 Jun 2010 22:04:24 +0000 (22:04 +0000)
Radar 8031193.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106582 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/Thumb1InstrInfo.cpp
test/CodeGen/ARM/arm-returnaddr.ll

index d17f60e5cf5a57de250aac768aa59e912f5bd5e8..6408c00b74fec37874b639a9f01450b9c9bd6203 100644 (file)
@@ -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;
 }
index c4f1814538c3bc1e374843bf7c6bb1f1b40d15b3..382a18334600bc2f062d551f175cf51114594823 100644 (file)
@@ -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]