mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-23 17:29:19 +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
|
DEBUG(dbgs() << "Shrink JT: " << *MI << " addr: " << *AddrMI
|
||||||
<< " lea: " << *LeaMI);
|
<< " lea: " << *LeaMI);
|
||||||
unsigned Opc = ByteOk ? ARM::t2TBB_JT : ARM::t2TBH_JT;
|
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))
|
.addReg(IdxReg, getKillRegState(IdxRegKill))
|
||||||
.addJumpTableIndex(JTI, JTOP.getTargetFlags())
|
.addJumpTableIndex(JTI, JTOP.getTargetFlags())
|
||||||
.addImm(MI->getOperand(JTOpIdx+1).getImm());
|
.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