Make tTAILJMPr/tTAILJMPrND emit a tBX without a preceding MOV of PC to LR. This
authorCameron Zwarich <zwarich@apple.com>
Wed, 25 May 2011 04:45:27 +0000 (04:45 +0000)
committerCameron Zwarich <zwarich@apple.com>
Wed, 25 May 2011 04:45:27 +0000 (04:45 +0000)
fixes <rdar://problem/9495913>

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

lib/Target/ARM/ARMAsmPrinter.cpp
test/CodeGen/ARM/call-tc.ll

index dc6cdae24961204342eb9bf9f5185ee92126a302..02263ee45e986fce437f04fe363985d858df7ae2 100644 (file)
@@ -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()));
index 2f3e02bea6b05f963c4c894065afc15230f39441..c460f7a5bd02082f1a2a5695b99d95c4441fc7f0 100644 (file)
@@ -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