diff options
author | Chad Rosier <mcrosier@codeaurora.org> | 2014-12-12 23:27:40 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@codeaurora.org> | 2014-12-12 23:27:40 +0000 |
commit | 620fb2206d28e78aa2549f37264d49108166c83c (patch) | |
tree | 4e1c6132a9e26a53fd48e9df92ec4f91cf921e11 | |
parent | 93e3cfcf9906b8eac682844af2d040a4f086b711 (diff) | |
download | bcm5719-llvm-620fb2206d28e78aa2549f37264d49108166c83c.tar.gz bcm5719-llvm-620fb2206d28e78aa2549f37264d49108166c83c.zip |
[ARMConstantIsland] Insert tbb/tbh optimization where previous jump table resided.
llvm-svn: 224165
-rw-r--r-- | llvm/lib/Target/ARM/ARMConstantIslandPass.cpp | 4 | ||||
-rw-r--r-- | llvm/test/CodeGen/Thumb2/constant-islands-jump-table.ll | 47 |
2 files changed, 50 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMConstantIslandPass.cpp b/llvm/lib/Target/ARM/ARMConstantIslandPass.cpp index 29405eb65d5..634c04533a8 100644 --- a/llvm/lib/Target/ARM/ARMConstantIslandPass.cpp +++ b/llvm/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/llvm/test/CodeGen/Thumb2/constant-islands-jump-table.ll b/llvm/test/CodeGen/Thumb2/constant-islands-jump-table.ll new file mode 100644 index 00000000000..0dd7092291b --- /dev/null +++ b/llvm/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) |