[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