forked from OSchip/llvm-project
Minor bug in SCCP found by inspection. (I don't think it's possible to hit this with a normal pass pipeline, but fixing for completeness.)
llvm-svn: 137755
This commit is contained in:
parent
2c21bf4b43
commit
56f2f21254
|
@ -582,6 +582,10 @@ void SCCPSolver::getFeasibleSuccessors(TerminatorInst &TI,
|
|||
}
|
||||
|
||||
if (SwitchInst *SI = dyn_cast<SwitchInst>(&TI)) {
|
||||
if (TI.getNumSuccessors() < 2) {
|
||||
Succs[0] = true;
|
||||
return;
|
||||
}
|
||||
LatticeVal SCValue = getValueState(SI->getCondition());
|
||||
ConstantInt *CI = SCValue.getConstantInt();
|
||||
|
||||
|
@ -642,6 +646,9 @@ bool SCCPSolver::isEdgeFeasible(BasicBlock *From, BasicBlock *To) {
|
|||
return true;
|
||||
|
||||
if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
|
||||
if (SI->getNumSuccessors() < 2)
|
||||
return true;
|
||||
|
||||
LatticeVal SCValue = getValueState(SI->getCondition());
|
||||
ConstantInt *CI = SCValue.getConstantInt();
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
; RUN: opt -S -sccp < %s | FileCheck %s
|
||||
|
||||
; Make sure we always consider the default edge executable for a switch
|
||||
; with no cases.
|
||||
declare void @foo()
|
||||
define void @test1() {
|
||||
; CHECK: define void @test1
|
||||
; CHECK: call void @foo()
|
||||
switch i32 undef, label %d []
|
||||
d:
|
||||
call void @foo()
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue