mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-28 06:32:09 +00:00
Fix bug: Dominators/2003-05-12-UnreachableCode.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6158 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b17a67807a
commit
a3c58f1c06
@ -51,16 +51,25 @@ void DominatorSet::calculateDominatorsFromBlock(BasicBlock *RootBB) {
|
||||
if (PI != PEnd) { // Is there SOME predecessor?
|
||||
// Loop until we get to a predecessor that has had it's dom set filled
|
||||
// in at least once. We are guaranteed to have this because we are
|
||||
// traversing the graph in DFO and have handled start nodes specially.
|
||||
// traversing the graph in DFO and have handled start nodes specially,
|
||||
// except when there are unreachable blocks.
|
||||
//
|
||||
while (Doms[*PI].empty()) ++PI;
|
||||
WorkingSet = Doms[*PI];
|
||||
while (PI != PEnd && Doms[*PI].empty()) ++PI;
|
||||
if (PI != PEnd) { // Not unreachable code case?
|
||||
WorkingSet = Doms[*PI];
|
||||
|
||||
for (++PI; PI != PEnd; ++PI) { // Intersect all of the predecessor sets
|
||||
DomSetType &PredSet = Doms[*PI];
|
||||
if (PredSet.size())
|
||||
set_intersect(WorkingSet, PredSet);
|
||||
}
|
||||
// Intersect all of the predecessor sets
|
||||
for (++PI; PI != PEnd; ++PI) {
|
||||
DomSetType &PredSet = Doms[*PI];
|
||||
if (PredSet.size())
|
||||
set_intersect(WorkingSet, PredSet);
|
||||
}
|
||||
} else {
|
||||
// Otherwise this block is unreachable. it doesn't really matter what
|
||||
// we use for the dominator set for the node...
|
||||
//
|
||||
WorkingSet = Doms[Root];
|
||||
}
|
||||
} else if (BB != Root) {
|
||||
// If this isn't the root basic block and it has no predecessors, it
|
||||
// must be an unreachable block. Fib a bit by saying that the root node
|
||||
|
Loading…
x
Reference in New Issue
Block a user