[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