[llvm-commits] [llvm] r136638 - /llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp

Chris Lattner clattner at apple.com
Mon Aug 1 12:49:58 PDT 2011


On Aug 1, 2011, at 12:16 PM, Jakub Staszak wrote:

> Author: kuba
> Date: Mon Aug  1 14:16:26 2011
> New Revision: 136638
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=136638&view=rev
> Log:
> Change SmallVector to SmallPtrSet in BranchProbabilityInfo. Handle cases where
> one than one successor goes to the same block.

Hi Kuba,

Are you sure that this won't introduce non-determinstic behavior?  You're iterating over the sets, which will now be in "random order".

-Chris

> 
> Modified:
>    llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp
> 
> Modified: llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp?rev=136638&r1=136637&r2=136638&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp Mon Aug  1 14:16:26 2011
> @@ -142,15 +142,15 @@
>   if (BB->getTerminator()->getNumSuccessors() == 1)
>     return false;
> 
> -  SmallVector<BasicBlock *, 4> ReturningEdges;
> -  SmallVector<BasicBlock *, 4> StayEdges;
> +  SmallPtrSet<BasicBlock *, 4> ReturningEdges;
> +  SmallPtrSet<BasicBlock *, 4> StayEdges;
> 
>   for (succ_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) {
>     BasicBlock *Succ = *I;
>     if (isReturningBlock(Succ))
> -      ReturningEdges.push_back(Succ);
> +      ReturningEdges.insert(Succ);
>     else
> -      StayEdges.push_back(Succ);
> +      StayEdges.insert(Succ);
>   }
> 
>   if (uint32_t numStayEdges = StayEdges.size()) {
> @@ -158,7 +158,7 @@
>     if (stayWeight < NORMAL_WEIGHT)
>       stayWeight = NORMAL_WEIGHT;
> 
> -    for (SmallVector<BasicBlock *, 4>::iterator I = StayEdges.begin(),
> +    for (SmallPtrSet<BasicBlock *, 4>::iterator I = StayEdges.begin(),
>          E = StayEdges.end(); I != E; ++I)
>       BP->setEdgeWeight(BB, *I, stayWeight);
>   }
> @@ -167,7 +167,7 @@
>     uint32_t retWeight = RH_NONTAKEN_WEIGHT / numRetEdges;
>     if (retWeight < MIN_WEIGHT)
>       retWeight = MIN_WEIGHT;
> -    for (SmallVector<BasicBlock *, 4>::iterator I = ReturningEdges.begin(),
> +    for (SmallPtrSet<BasicBlock *, 4>::iterator I = ReturningEdges.begin(),
>          E = ReturningEdges.end(); I != E; ++I) {
>       BP->setEdgeWeight(BB, *I, retWeight);
>     }
> @@ -220,9 +220,9 @@
>   if (!L)
>     return false;
> 
> -  SmallVector<BasicBlock *, 8> BackEdges;
> -  SmallVector<BasicBlock *, 8> ExitingEdges;
> -  SmallVector<BasicBlock *, 8> InEdges; // Edges from header to the loop.
> +  SmallPtrSet<BasicBlock *, 8> BackEdges;
> +  SmallPtrSet<BasicBlock *, 8> ExitingEdges;
> +  SmallPtrSet<BasicBlock *, 8> InEdges; // Edges from header to the loop.
> 
>   bool isHeader = BB == L->getHeader();
> 
> @@ -230,11 +230,11 @@
>     BasicBlock *Succ = *I;
>     Loop *SuccL = LI->getLoopFor(Succ);
>     if (SuccL != L)
> -      ExitingEdges.push_back(Succ);
> +      ExitingEdges.insert(Succ);
>     else if (Succ == L->getHeader())
> -      BackEdges.push_back(Succ);
> +      BackEdges.insert(Succ);
>     else if (isHeader)
> -      InEdges.push_back(Succ);
> +      InEdges.insert(Succ);
>   }
> 
>   if (uint32_t numBackEdges = BackEdges.size()) {
> @@ -242,7 +242,7 @@
>     if (backWeight < NORMAL_WEIGHT)
>       backWeight = NORMAL_WEIGHT;
> 
> -    for (SmallVector<BasicBlock *, 8>::iterator EI = BackEdges.begin(),
> +    for (SmallPtrSet<BasicBlock *, 8>::iterator EI = BackEdges.begin(),
>          EE = BackEdges.end(); EI != EE; ++EI) {
>       BasicBlock *Back = *EI;
>       BP->setEdgeWeight(BB, Back, backWeight);
> @@ -254,7 +254,7 @@
>     if (inWeight < NORMAL_WEIGHT)
>       inWeight = NORMAL_WEIGHT;
> 
> -    for (SmallVector<BasicBlock *, 8>::iterator EI = InEdges.begin(),
> +    for (SmallPtrSet<BasicBlock *, 8>::iterator EI = InEdges.begin(),
>          EE = InEdges.end(); EI != EE; ++EI) {
>       BasicBlock *Back = *EI;
>       BP->setEdgeWeight(BB, Back, inWeight);
> @@ -267,7 +267,7 @@
>     if (exitWeight < MIN_WEIGHT)
>       exitWeight = MIN_WEIGHT;
> 
> -    for (SmallVector<BasicBlock *, 8>::iterator EI = ExitingEdges.begin(),
> +    for (SmallPtrSet<BasicBlock *, 8>::iterator EI = ExitingEdges.begin(),
>          EE = ExitingEdges.end(); EI != EE; ++EI) {
>       BasicBlock *Exiting = *EI;
>       BP->setEdgeWeight(BB, Exiting, exitWeight);
> 
> 
> _______________________________________________
> 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