mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 12:19:53 +00:00
[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
This commit is contained in:
parent
27d4d1c7bf
commit
f05fc43036
@ -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());
|
||||
|
47
test/CodeGen/Thumb2/constant-islands-jump-table.ll
Normal file
47
test/CodeGen/Thumb2/constant-islands-jump-table.ll
Normal file
@ -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)
|
Loading…
Reference in New Issue
Block a user