[llvm-commits] [llvm] r167942 - /llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp
Hal Finkel
hfinkel at anl.gov
Wed Nov 14 11:40:51 PST 2012
----- Original Message -----
> From: "Sean Silva" <silvas at purdue.edu>
> To: "Hal Finkel" <hfinkel at anl.gov>
> Cc: llvm-commits at cs.uiuc.edu
> Sent: Wednesday, November 14, 2012 1:31:28 PM
> Subject: Re: [llvm-commits] [llvm] r167942 - /llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp
>
> > 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).
I did not mean to imply that this is not worth fixing. I plan on fixing it soon (it is just a more invasive change).
> Do we have any reason to believe that the addresses will actually be
> ordered like this?
No (unless, for example, we know that they come from a BumpPtrAllocator). In practice, however, I think it is common for the address to be ordered w.r.t. to the allocation order (which is likely to be deterministic).
-Hal
>
> -- 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
>
--
Hal Finkel
Postdoctoral Appointee
Leadership Computing Facility
Argonne National Laboratory
More information about the llvm-commits
mailing list