summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorCameron Zwarich <zwarich@apple.com>2011-05-25 04:45:27 +0000
committerCameron Zwarich <zwarich@apple.com>2011-05-25 04:45:27 +0000
commit3088e0a179cb6324470bbbba87a1547e69dcb985 (patch)
tree24197324c597d1392b402a387eb61e79fa9c8e87 /llvm
parent310b3472ec03db68da389d68c8b809ad58e87582 (diff)
downloadbcm5719-llvm-3088e0a179cb6324470bbbba87a1547e69dcb985.tar.gz
bcm5719-llvm-3088e0a179cb6324470bbbba87a1547e69dcb985.zip
Make tTAILJMPr/tTAILJMPrND emit a tBX without a preceding MOV of PC to LR. This
fixes <rdar://problem/9495913> llvm-svn: 132042
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/ARM/ARMAsmPrinter.cpp2
-rw-r--r--llvm/test/CodeGen/ARM/call-tc.ll4
2 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
index dc6cdae2496..02263ee45e9 100644
--- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -1875,7 +1875,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) {
case ARM::TAILJMPr:
case ARM::tTAILJMPr: {
unsigned newOpc = (Opc == ARM::TAILJMPr || Opc == ARM::TAILJMPrND)
- ? ARM::BX : ARM::tBX_CALL;
+ ? ARM::BX : ARM::tBX;
MCInst TmpInst;
TmpInst.setOpcode(newOpc);
TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg()));
diff --git a/llvm/test/CodeGen/ARM/call-tc.ll b/llvm/test/CodeGen/ARM/call-tc.ll
index 2f3e02bea6b..c460f7a5bd0 100644
--- a/llvm/test/CodeGen/ARM/call-tc.ll
+++ b/llvm/test/CodeGen/ARM/call-tc.ll
@@ -16,6 +16,10 @@ define void @t1() {
define void @t2() {
; CHECKV6: t2:
; CHECKV6: bx r0 @ TAILCALL
+; CHECKT2D: t2:
+; CHECKT2D: ldr
+; CHECKT2D-NEXT: ldr
+; CHECKT2D-NEXT: bx r0 @ TAILCALL
%tmp = load i32 ()** @t ; <i32 ()*> [#uses=1]
%tmp.upgrd.2 = tail call i32 %tmp( ) ; <i32> [#uses=0]
ret void
OpenPOWER on IntegriCloud