forked from OSchip/llvm-project
Remove incorrect and poorly tested code for trying to reason about values on default edges of
switches. Just return the conservatively correct answer. llvm-svn: 112876
This commit is contained in:
parent
56291f7e53
commit
2912df072d
|
@ -670,25 +670,11 @@ LVILatticeVal LVIQuery::getEdgeValue(BasicBlock *BBFrom, BasicBlock *BBTo) {
|
|||
// If the edge was formed by a switch on the value, then we may know exactly
|
||||
// what it is.
|
||||
if (SwitchInst *SI = dyn_cast<SwitchInst>(BBFrom->getTerminator())) {
|
||||
// If BBTo is the default destination of the switch, we know that it
|
||||
// doesn't have the same value as any of the cases.
|
||||
if (SI->getCondition() == Val) {
|
||||
// We don't know anything in the default case.
|
||||
if (SI->getDefaultDest() == BBTo) {
|
||||
const IntegerType *IT = cast<IntegerType>(Val->getType());
|
||||
ConstantRange CR(IT->getBitWidth());
|
||||
|
||||
for (unsigned i = 1, e = SI->getNumSuccessors(); i != e; ++i) {
|
||||
const APInt CaseVal = SI->getCaseValue(i)->getValue();
|
||||
ConstantRange CaseRange(CaseVal, CaseVal+1);
|
||||
CaseRange = CaseRange.inverse();
|
||||
CR = CR.intersectWith(CaseRange);
|
||||
}
|
||||
|
||||
LVILatticeVal Result;
|
||||
if (CR.isFullSet() || CR.isEmptySet())
|
||||
Result.markOverdefined();
|
||||
else
|
||||
Result.markConstantRange(CR);
|
||||
Result.markOverdefined();
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue