mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-15 22:32:35 +00:00
we can only thread blocks when there is a pred we can determine the succ of.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50003 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
177480b7ed
commit
f9065a904f
@ -134,15 +134,30 @@ bool JumpThreading::ThreadBlock(BasicBlock &BB) {
|
||||
PHINode *PN = dyn_cast<PHINode>(Condition);
|
||||
if (!PN || PN->getParent() != &BB) return false;
|
||||
|
||||
// See if the phi node has any constant values. If so, we can determine where
|
||||
// the corresponding predecessor will branch.
|
||||
unsigned PredNo = ~0U;
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
|
||||
if (isa<ConstantInt>(PN->getIncomingValue(i))) {
|
||||
PredNo = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If no incoming value has a constant, we don't know the destination of any
|
||||
// predecessors.
|
||||
if (PredNo == ~0U)
|
||||
return false;
|
||||
|
||||
// See if the cost of duplicating this block is low enough.
|
||||
unsigned JumpThreadCost = getJumpThreadDuplicationCost(BB);
|
||||
if (JumpThreadCost > Threshold) {
|
||||
DOUT << " Not threading BB '" << BB.getNameStart()
|
||||
<< "': Cost is too high: " << JumpThreadCost << "\n";
|
||||
<< "' - Cost is too high: " << JumpThreadCost << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
DOUT << " Threading BB '" << BB.getNameStart() << "'. Cost is : "
|
||||
DOUT << " Threading BB '" << BB.getNameStart() << "'. Cost is: "
|
||||
<< JumpThreadCost << "\n";
|
||||
|
||||
return false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user