[llvm-commits] [llvm] r80006 - /llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp
Owen Anderson
resistor at mac.com
Tue Aug 25 10:26:32 PDT 2009
Author: resistor
Date: Tue Aug 25 12:26:32 2009
New Revision: 80006
URL: http://llvm.org/viewvc/llvm-project?rev=80006&view=rev
Log:
Pull out this predicate loop into a helper function.
Modified:
llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp
Modified: llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp?rev=80006&r1=80005&r2=80006&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp Tue Aug 25 12:26:32 2009
@@ -361,6 +361,17 @@
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 @@
// 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) {
More information about the llvm-commits
mailing list