diff options
author | Chris Lattner <sabre@nondot.org> | 2008-04-22 06:36:15 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-04-22 06:36:15 +0000 |
commit | d38c14e6ed0136624a18cf8338c82f1709d804aa (patch) | |
tree | ae9588121f26986be930f6074037dfb36da10e22 /lib/Transforms/Scalar/JumpThreading.cpp | |
parent | f29984f695a16d68f6983c7741e1ae77d1619c5d (diff) |
refactor some code, no functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50094 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/JumpThreading.cpp')
-rw-r--r-- | lib/Transforms/Scalar/JumpThreading.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/Transforms/Scalar/JumpThreading.cpp b/lib/Transforms/Scalar/JumpThreading.cpp index b68a969bc1..fd75c90d9a 100644 --- a/lib/Transforms/Scalar/JumpThreading.cpp +++ b/lib/Transforms/Scalar/JumpThreading.cpp @@ -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 " |