refactor some code, no functionality change.
authorChris Lattner <sabre@nondot.org>
Tue, 22 Apr 2008 06:36:15 +0000 (06:36 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 22 Apr 2008 06:36:15 +0000 (06:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50094 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/JumpThreading.cpp

index b68a969bc1647a3bfdb29f9302c5cf363df1cbe0..fd75c90d9a482fe0c023988953535b1f40badcd4 100644 (file)
@@ -57,6 +57,8 @@ namespace {
     bool runOnFunction(Function &F);
     bool ThreadBlock(BasicBlock *BB);
     void ThreadEdge(BasicBlock *BB, BasicBlock *PredBB, BasicBlock *SuccBB);
+    
+    bool ProcessJumpOnPHI(PHINode *PN);
   };
   char JumpThreading::ID = 0;
   RegisterPass<JumpThreading> X("jump-threading", "Jump Threading");
@@ -158,8 +160,17 @@ bool JumpThreading::ThreadBlock(BasicBlock *BB) {
 
   // See if this is a phi node in the current block.
   PHINode *PN = dyn_cast<PHINode>(Condition);
-  if (!PN || PN->getParent() != BB) return false;
+  if (PN && PN->getParent() == BB)
+    return ProcessJumpOnPHI(PN);
   
+  return false;
+}
+
+/// ProcessJumpOnPHI - We have a conditional branch of switch on a PHI node in
+/// the current block.  See if there are any simplifications we can do based on
+/// inputs to the phi node.
+/// 
+bool JumpThreading::ProcessJumpOnPHI(PHINode *PN) {
   // See if the phi node has any constant values.  If so, we can determine where
   // the corresponding predecessor will branch.
   unsigned PredNo = ~0U;
@@ -177,6 +188,7 @@ bool JumpThreading::ThreadBlock(BasicBlock *BB) {
     return false;
   
   // See if the cost of duplicating this block is low enough.
+  BasicBlock *BB = PN->getParent();
   unsigned JumpThreadCost = getJumpThreadDuplicationCost(BB);
   if (JumpThreadCost > Threshold) {
     DOUT << "  Not threading BB '" << BB->getNameStart()
@@ -210,7 +222,6 @@ bool JumpThreading::ThreadBlock(BasicBlock *BB) {
                                     ".thr_comm", this);
   }
   
-  
   DOUT << "  Threading edge from '" << PredBB->getNameStart() << "' to '"
        << SuccBB->getNameStart() << "' with cost: " << JumpThreadCost
        << ", across block:\n    "