1
0
mirror of https://github.com/c64scene-ar/llvm-6502.git synced 2025-04-22 00:37:49 +00:00

Pull out this predicate loop into a helper function.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80006 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson 2009-08-25 17:26:32 +00:00
parent 88a589c4b3
commit 60fd8be183

@ -361,6 +361,17 @@ Function *CodeExtractor::constructFunction(const Values &inputs,
return newFunction;
}
static BasicBlock* FindPhiPredForUseInBlock(Value* Used, BasicBlock* BB) {
for (Value::use_iterator UI = Used->use_begin(),
UE = Used->use_end(); UI != UE; ++UI) {
PHINode *P = dyn_cast<PHINode>(*UI);
if (P && P->getParent() == BB)
return P->getIncomingBlock(UI);
}
return 0;
}
/// emitCallAndSwitchStatement - This method sets up the caller side by adding
/// the call instruction, splitting any PHI nodes in the header block as
/// necessary.
@ -540,17 +551,10 @@ emitCallAndSwitchStatement(Function *newFunction, BasicBlock *codeReplacer,
// then we need to test for dominance of the phi's predecessor
// instead. Unfortunately, this a little complicated since we
// have already rewritten uses of the value to uses of the reload.
for (Value::use_iterator UI = Reloads[out]->use_begin(),
UE = Reloads[out]->use_end(); UI != UE; ++UI) {
PHINode *P = dyn_cast<PHINode>(*UI);
if (!P || P->getParent() != OldTarget) continue;
BasicBlock* pred = P->getIncomingBlock(UI);
if (DT->dominates(DefBlock, pred)) {
DominatesDef = true;
break;
}
}
BasicBlock* pred = FindPhiPredForUseInBlock(Reloads[out],
OldTarget);
if (pred && DT && DT->dominates(DefBlock, pred))
DominatesDef = true;
}
if (DominatesDef) {