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. llvm-svn: 222961
This commit is contained in:
parent
2bfd9129f4
commit
6c42d1a5de
|
@ -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
|
||||
|
|
|
@ -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…
Reference in New Issue