mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +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!
|
||||
ConstantInt *CI = dyn_cast<ConstantInt>(SI->getCondition());
|
||||
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...
|
||||
for (unsigned i = 1, e = SI->getNumSuccessors(); i != e; ++i) {
|
||||
@ -89,6 +92,16 @@ bool ConstantFoldTerminator(BasicBlock *BB) {
|
||||
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.
|
||||
// We do this by reseting "TheOnlyDest" to null when we find two non-equal
|
||||
// destinations.
|
||||
|
Loading…
Reference in New Issue
Block a user