mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-20 12:31:40 +00:00
Implement SimplifyCFG/2003-08-17-FoldSwitch.ll:test5
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8093 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2231d5892b
commit
7d6c24cdbf
@ -80,6 +80,9 @@ bool ConstantFoldTerminator(BasicBlock *BB) {
|
|||||||
// single branch instruction!
|
// single branch instruction!
|
||||||
ConstantInt *CI = dyn_cast<ConstantInt>(SI->getCondition());
|
ConstantInt *CI = dyn_cast<ConstantInt>(SI->getCondition());
|
||||||
BasicBlock *TheOnlyDest = SI->getSuccessor(0); // The default dest
|
BasicBlock *TheOnlyDest = SI->getSuccessor(0); // The default dest
|
||||||
|
BasicBlock *DefaultDest = TheOnlyDest;
|
||||||
|
assert(TheOnlyDest == SI->getDefaultDest() &&
|
||||||
|
"Default destination is not successor #0?");
|
||||||
|
|
||||||
// Figure out which case it goes to...
|
// Figure out which case it goes to...
|
||||||
for (unsigned i = 1, e = SI->getNumSuccessors(); i != e; ++i) {
|
for (unsigned i = 1, e = SI->getNumSuccessors(); i != e; ++i) {
|
||||||
@ -89,6 +92,16 @@ bool ConstantFoldTerminator(BasicBlock *BB) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check to see if this branch is going to the same place as the default
|
||||||
|
// dest. If so, eliminate it as an explicit compare.
|
||||||
|
if (SI->getSuccessor(i) == DefaultDest) {
|
||||||
|
// Remove this entry...
|
||||||
|
DefaultDest->removePredecessor(SI->getParent());
|
||||||
|
SI->removeCase(i);
|
||||||
|
--i; --e; // Don't skip an entry...
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Otherwise, check to see if the switch only branches to one destination.
|
// Otherwise, check to see if the switch only branches to one destination.
|
||||||
// We do this by reseting "TheOnlyDest" to null when we find two non-equal
|
// We do this by reseting "TheOnlyDest" to null when we find two non-equal
|
||||||
// destinations.
|
// destinations.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user