mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 18:24:00 +00:00
Fix a bug in the loop in JumpThreading::ProcessThreadableEdges() where it could falsely produce a MultipleDestSentinel value if the first predecessor ended with an 'indirectbr'. If that happened, it caused an unnecessary FindMostPopularDest() call.
This wasn't a correctness problem, but it broke the fast path for single-predecessor blocks. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121966 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -984,7 +984,7 @@ FindMostPopularDest(BasicBlock *BB,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Okay, now we know the most popular destination. If there is more than
|
// Okay, now we know the most popular destination. If there is more than one
|
||||||
// destination, we need to determine one. This is arbitrary, but we need
|
// destination, we need to determine one. This is arbitrary, but we need
|
||||||
// to make a deterministic decision. Pick the first one that appears in the
|
// to make a deterministic decision. Pick the first one that appears in the
|
||||||
// successor list.
|
// successor list.
|
||||||
@ -1064,7 +1064,7 @@ bool JumpThreading::ProcessThreadableEdges(Value *Cond, BasicBlock *BB,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If we have exactly one destination, remember it for efficiency below.
|
// If we have exactly one destination, remember it for efficiency below.
|
||||||
if (i == 0)
|
if (PredToDestList.empty())
|
||||||
OnlyDest = DestBB;
|
OnlyDest = DestBB;
|
||||||
else if (OnlyDest != DestBB)
|
else if (OnlyDest != DestBB)
|
||||||
OnlyDest = MultipleDestSentinel;
|
OnlyDest = MultipleDestSentinel;
|
||||||
|
Reference in New Issue
Block a user