mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-28 21:34:23 +00:00
Switch lowering: Fix broken 'Figure out which block is next' code
This doesn't seem to have worked in a long time, but other optimizations would clean it up. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222961 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1c86b63b9b
commit
5c6c5e23bd
@ -2694,6 +2694,9 @@ void SelectionDAGBuilder::visitSwitch(const SwitchInst &SI) {
|
||||
|
||||
// Figure out which block is immediately after the current one.
|
||||
MachineBasicBlock *NextBlock = nullptr;
|
||||
if (SwitchMBB + 1 != FuncInfo.MF->end())
|
||||
NextBlock = SwitchMBB + 1;
|
||||
|
||||
MachineBasicBlock *Default = FuncInfo.MBBMap[SI.getDefaultDest()];
|
||||
|
||||
// If there is only the default destination, branch to it if it is not the
|
||||
|
14
test/CodeGen/X86/switch-default-only.ll
Normal file
14
test/CodeGen/X86/switch-default-only.ll
Normal file
@ -0,0 +1,14 @@
|
||||
; RUN: llc -O0 -fast-isel=false -march=x86 < %s | FileCheck %s
|
||||
|
||||
; No need for branching when the default and only destination follows
|
||||
; immediately after the switch.
|
||||
; CHECK-LABEL: no_branch:
|
||||
; CHECK-NOT: jmp
|
||||
; CHECK: ret
|
||||
|
||||
define void @no_branch(i32 %x) {
|
||||
entry:
|
||||
switch i32 %x, label %exit [ ]
|
||||
exit:
|
||||
ret void
|
||||
}
|
@ -27,11 +27,12 @@ entry:
|
||||
switch i32 %0, label %sw.default [
|
||||
], !dbg !14
|
||||
|
||||
sw.epilog: ; preds = %sw.default
|
||||
ret void, !dbg !17
|
||||
|
||||
sw.default: ; preds = %entry
|
||||
br label %sw.epilog, !dbg !15
|
||||
|
||||
sw.epilog: ; preds = %sw.default
|
||||
ret void, !dbg !17
|
||||
}
|
||||
|
||||
; Function Attrs: nounwind readnone
|
||||
|
Loading…
x
Reference in New Issue
Block a user