From: Chad Rosier Date: Fri, 12 Dec 2014 23:27:40 +0000 (+0000) Subject: [ARMConstantIsland] Insert tbb/tbh optimization where previous jump table resided. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=f05fc430368945288d6c4222ff0721bdb4a0f59b;p=oota-llvm.git [ARMConstantIsland] Insert tbb/tbh optimization where previous jump table resided. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224165 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/ARM/ARMConstantIslandPass.cpp b/lib/Target/ARM/ARMConstantIslandPass.cpp index 29405eb65d5..634c04533a8 100644 --- a/lib/Target/ARM/ARMConstantIslandPass.cpp +++ b/lib/Target/ARM/ARMConstantIslandPass.cpp @@ -1952,7 +1952,9 @@ bool ARMConstantIslands::optimizeThumb2JumpTables() { DEBUG(dbgs() << "Shrink JT: " << *MI << " addr: " << *AddrMI << " lea: " << *LeaMI); unsigned Opc = ByteOk ? ARM::t2TBB_JT : ARM::t2TBH_JT; - MachineInstr *NewJTMI = BuildMI(MBB, MI->getDebugLoc(), TII->get(Opc)) + MachineBasicBlock::iterator MI_JT = MI; + MachineInstr *NewJTMI = + BuildMI(*MBB, MI_JT, MI->getDebugLoc(), TII->get(Opc)) .addReg(IdxReg, getKillRegState(IdxRegKill)) .addJumpTableIndex(JTI, JTOP.getTargetFlags()) .addImm(MI->getOperand(JTOpIdx+1).getImm()); diff --git a/test/CodeGen/Thumb2/constant-islands-jump-table.ll b/test/CodeGen/Thumb2/constant-islands-jump-table.ll new file mode 100644 index 00000000000..0dd7092291b --- /dev/null +++ b/test/CodeGen/Thumb2/constant-islands-jump-table.ll @@ -0,0 +1,47 @@ +; RUN: llc < %s -mtriple=thumbv7-linux-gnueabihf -O1 %s -o - | FileCheck %s + +; CHECK-LABEL: test_jump_table: +; CHECK: b .LBB +; CHECK-NOT: tbh + +define i32 @test_jump_table(i32 %x, float %in) { + +h1: + + %b0 = fadd float %in, 1234.5 + %b1 = fptoui float %b0 to i32 + + switch i32 %x, label %h2 [ + i32 0, label %h3 + i32 2, label %h4 + i32 4, label %h5 + i32 6, label %h6 + ] + +h2: + %a0 = add i32 %x, 5 + br label %h3 + +h3: + %d2 = phi i32 [%b1, %h1], [%a0, %h2] + %d3 = add i32 %d2, 3 + br label %h4 + +h4: + %c2 = phi i32 [%b1, %h1], [%d3, %h3] + %c3 = add i32 %c2, 5 + br label %h5 + +h5: + %a2 = phi i32 [%b1, %h1], [%c3, %h4] + %a3 = add i32 %a2, 6 + br label %h6 + +h6: + %y = phi i32 [0, %h1], [%a3, %h5] + call i32 @llvm.arm.space(i32 2000, i32 undef) + ret i32 %y + +} + +declare i32 @llvm.arm.space(i32, i32)