[llvm-commits] [llvm] r167942 - /llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp

Sean Silva silvas at purdue.edu
Wed Nov 14 11:31:28 PST 2012


> There are some remaining iterations over std::*map containers where the order
> might matter, but so long as the Value* for instructions in a block increase
> with the order of the instructions in the block (or decrease) monotonically,
> then this will appear to be deterministic.

This makes it sound like the other situations aren't worth fixing
because of this assumption about the addresses (sorry if I
misunderstood).
Do we have any reason to believe that the addresses will actually be
ordered like this?

-- Sean Silva

On Wed, Nov 14, 2012 at 1:38 PM, Hal Finkel <hfinkel at anl.gov> wrote:
> Author: hfinkel
> Date: Wed Nov 14 12:38:11 2012
> New Revision: 167942
>
> URL: http://llvm.org/viewvc/llvm-project?rev=167942&view=rev
> Log:
> Fix the largest offender of determinism in BBVectorize
>
> Iterating over the children of each node in the potential vectorization
> plan must happen in a deterministic order (because it affects which children
> are erased when two children conflict). There was no need for this data
> structure to be a map in the first place, so replacing it with a vector
> is a small change.
>
> I believe that this was the last remaining instance if iterating over the
> elements of a Dense* container where the iteration order could matter.
> There are some remaining iterations over std::*map containers where the order
> might matter, but so long as the Value* for instructions in a block increase
> with the order of the instructions in the block (or decrease) monotonically,
> then this will appear to be deterministic.
>
> Modified:
>     llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp
>
> Modified: llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp?rev=167942&r1=167941&r2=167942&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp (original)
> +++ llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp Wed Nov 14 12:38:11 2012
> @@ -1485,7 +1485,7 @@
>        PrunedTree.insert(QTop.first);
>
>        // Visit each child, pruning as necessary...
> -      DenseMap<ValuePair, size_t> BestChildren;
> +      std::vector<ValuePairWithDepth> BestChildren;
>        VPPIteratorPair QTopRange = ConnectedPairs.equal_range(QTop.first);
>        for (std::multimap<ValuePair, ValuePair>::iterator K = QTopRange.first;
>             K != QTopRange.second; ++K) {
> @@ -1517,7 +1517,7 @@
>          DenseSet<ValuePair> CurrentPairs;
>
>          bool CanAdd = true;
> -        for (DenseMap<ValuePair, size_t>::iterator C2
> +        for (std::vector<ValuePairWithDepth>::iterator C2
>                = BestChildren.begin(), E2 = BestChildren.end();
>               C2 != E2; ++C2) {
>            if (C2->first.first == C->first.first ||
> @@ -1602,22 +1602,22 @@
>          // to an already-selected child. Check for this here, and if a
>          // conflict is found, then remove the previously-selected child
>          // before adding this one in its place.
> -        for (DenseMap<ValuePair, size_t>::iterator C2
> +        for (std::vector<ValuePairWithDepth>::iterator C2
>                = BestChildren.begin(); C2 != BestChildren.end();) {
>            if (C2->first.first == C->first.first ||
>                C2->first.first == C->first.second ||
>                C2->first.second == C->first.first ||
>                C2->first.second == C->first.second ||
>                pairsConflict(C2->first, C->first, PairableInstUsers))
> -            BestChildren.erase(C2++);
> +            C2 = BestChildren.erase(C2);
>            else
>              ++C2;
>          }
>
> -        BestChildren.insert(ValuePairWithDepth(C->first, C->second));
> +        BestChildren.push_back(ValuePairWithDepth(C->first, C->second));
>        }
>
> -      for (DenseMap<ValuePair, size_t>::iterator C
> +      for (std::vector<ValuePairWithDepth>::iterator C
>              = BestChildren.begin(), E2 = BestChildren.end();
>             C != E2; ++C) {
>          size_t DepthF = getDepthFactor(C->first.first);
>
>
> _______________________________________________
> 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