[llvm] r230965 - SLPVectorizer: Rewrite ArrayRef slice compare to be more idiomatic.

David Blaikie dblaikie at gmail.com
Mon Mar 2 12:37:10 PST 2015


On Mon, Mar 2, 2015 at 12:34 PM, Benjamin Kramer <benny.kra at gmail.com>
wrote:

> On Mon, Mar 2, 2015 at 7:43 PM, David Blaikie <dblaikie at gmail.com> wrote:
> >
> >
> > On Mon, Mar 2, 2015 at 7:24 AM, Benjamin Kramer <
> benny.kra at googlemail.com>
> > wrote:
> >>
> >> Author: d0k
> >> Date: Mon Mar  2 09:24:36 2015
> >> New Revision: 230965
> >>
> >> URL: http://llvm.org/viewvc/llvm-project?rev=230965&view=rev
> >> Log:
> >> SLPVectorizer: Rewrite ArrayRef slice compare to be more idiomatic.
> >>
> >> NFC intended.
> >>
> >> Modified:
> >>     llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp
> >>
> >> Modified: llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp?rev=230965&r1=230964&r2=230965&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp (original)
> >> +++ llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp Mon Mar  2
> >> 09:24:36 2015
> >> @@ -3178,15 +3178,11 @@ private:
> >>  /// the WeakVH array.
> >>  /// Vectorization of part of the VL array may cause later values in the
> >> VL array
> >>  /// to become invalid. We track when this has happened in the WeakVH
> >> array.
> >> -static bool hasValueBeenRAUWed(ArrayRef<Value *> &VL,
> >> -                               SmallVectorImpl<WeakVH> &VH,
> >> -                               unsigned SliceBegin,
> >> -                               unsigned SliceSize) {
> >> -  for (unsigned i = SliceBegin; i < SliceBegin + SliceSize; ++i)
> >> -    if (VH[i] != VL[i])
> >> -      return true;
> >> -
> >> -  return false;
> >> +static bool hasValueBeenRAUWed(ArrayRef<Value *> VL, ArrayRef<WeakVH>
> VH,
> >> +                               unsigned SliceBegin, unsigned
> SliceSize) {
> >> +  VL = VL.slice(SliceBegin, SliceSize);
> >> +  VH = VH.slice(SliceBegin, SliceSize);
> >> +  return !std::equal(VL.begin(), VL.end(), VH.begin());
> >
> >
> > Can we not just "return VL == VH;" here?
>
> Currently ArrayRef::operator== requires both sides to be of the same
> type (here it's Value * and WeakVH which implicitly converts to Value
> *). This could be solved by making it a template, but I'm not sure
> about the implications of that.
>

Ooh, tricksy. Right - thanks for the explanation!


>
> - Ben
>
> >
> >>
> >>  }
> >>
> >>  bool SLPVectorizer::vectorizeStoreChain(ArrayRef<Value *> Chain,
> >>
> >>
> >> _______________________________________________
> >> llvm-commits mailing list
> >> llvm-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150302/788f0a56/attachment.html>


More information about the llvm-commits mailing list