[llvm-commits] [llvm] r96377 - in /llvm/trunk: include/llvm/Transforms/Utils/BasicBlockUtils.h lib/Transforms/Scalar/GVN.cpp lib/Transforms/Utils/BasicBlockUtils.cpp
Chris Lattner
clattner at apple.com
Tue Feb 16 12:53:52 PST 2010
On Feb 16, 2010, at 11:49 AM, Bob Wilson wrote:
> Author: bwilson
> Date: Tue Feb 16 13:49:17 2010
> New Revision: 96377
>
> URL: http://llvm.org/viewvc/llvm-project?rev=96377&view=rev
> Log:
> Refactor to share code to find the position of a basic block successor in the
> terminator's list of successors.
Thanks Bob, please name it "GetSuccessorNumber" so it is clear what it does,
-Chris
>
> Modified:
> llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h
> llvm/trunk/lib/Transforms/Scalar/GVN.cpp
> llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp
>
> Modified: llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h?rev=96377&r1=96376&r2=96377&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h (original)
> +++ llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h Tue Feb 16 13:49:17 2010
> @@ -102,6 +102,11 @@
> //
> void RemoveSuccessor(TerminatorInst *TI, unsigned SuccNum);
>
> +/// SuccessorNumber - Search for the specified successor of basic block BB and
> +/// return its position in the terminator instruction's list of successors.
> +/// It is an error to call this with a block that is not a successor.
> +unsigned SuccessorNumber(BasicBlock *BB, BasicBlock *Succ);
> +
> /// isCriticalEdge - Return true if the specified edge is a critical edge.
> /// Critical edges are edges from a block with multiple successors to a block
> /// with multiple predecessors.
>
> Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=96377&r1=96376&r2=96377&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Tue Feb 16 13:49:17 2010
> @@ -2141,14 +2141,7 @@
> // We can't do PRE safely on a critical edge, so instead we schedule
> // the edge to be split and perform the PRE the next time we iterate
> // on the function.
> - unsigned SuccNum = 0;
> - for (unsigned i = 0, e = PREPred->getTerminator()->getNumSuccessors();
> - i != e; ++i)
> - if (PREPred->getTerminator()->getSuccessor(i) == CurrentBlock) {
> - SuccNum = i;
> - break;
> - }
> -
> + unsigned SuccNum = SuccessorNumber(PREPred, CurrentBlock);
> if (isCriticalEdge(PREPred->getTerminator(), SuccNum)) {
> toSplit.push_back(std::make_pair(PREPred->getTerminator(), SuccNum));
> continue;
>
> Modified: llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp?rev=96377&r1=96376&r2=96377&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp Tue Feb 16 13:49:17 2010
> @@ -274,24 +274,30 @@
> ReplaceInstWithInst(TI, NewTI);
> }
>
> -/// SplitEdge - Split the edge connecting specified block. Pass P must
> -/// not be NULL.
> -BasicBlock *llvm::SplitEdge(BasicBlock *BB, BasicBlock *Succ, Pass *P) {
> - TerminatorInst *LatchTerm = BB->getTerminator();
> - unsigned SuccNum = 0;
> +/// SuccessorNumber - Search for the specified successor of basic block BB and
> +/// return its position in the terminator instruction's list of successors.
> +/// It is an error to call this with a block that is not a successor.
> +unsigned llvm::SuccessorNumber(BasicBlock *BB, BasicBlock *Succ) {
> + TerminatorInst *Term = BB->getTerminator();
> #ifndef NDEBUG
> - unsigned e = LatchTerm->getNumSuccessors();
> + unsigned e = Term->getNumSuccessors();
> #endif
> for (unsigned i = 0; ; ++i) {
> assert(i != e && "Didn't find edge?");
> - if (LatchTerm->getSuccessor(i) == Succ) {
> - SuccNum = i;
> - break;
> - }
> + if (Term->getSuccessor(i) == Succ)
> + return i;
> }
> + return 0;
> +}
> +
> +/// SplitEdge - Split the edge connecting specified block. Pass P must
> +/// not be NULL.
> +BasicBlock *llvm::SplitEdge(BasicBlock *BB, BasicBlock *Succ, Pass *P) {
> + unsigned SuccNum = SuccessorNumber(BB, Succ);
>
> // If this is a critical edge, let SplitCriticalEdge do it.
> - if (SplitCriticalEdge(BB->getTerminator(), SuccNum, P))
> + TerminatorInst *LatchTerm = BB->getTerminator();
> + if (SplitCriticalEdge(LatchTerm, SuccNum, P))
> return LatchTerm->getSuccessor(SuccNum);
>
> // If the edge isn't critical, then BB has a single successor or Succ has a
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list