diff options
| author | Cameron Zwarich <zwarich@apple.com> | 2011-05-25 04:45:27 +0000 |
|---|---|---|
| committer | Cameron Zwarich <zwarich@apple.com> | 2011-05-25 04:45:27 +0000 |
| commit | 3088e0a179cb6324470bbbba87a1547e69dcb985 (patch) | |
| tree | 24197324c597d1392b402a387eb61e79fa9c8e87 /llvm | |
| parent | 310b3472ec03db68da389d68c8b809ad58e87582 (diff) | |
| download | bcm5719-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.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/CodeGen/ARM/call-tc.ll | 4 |
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 |

