[LLVMdev] Decouple LoopVectorizer from O3

David Blaikie dblaikie at gmail.com
Mon Apr 15 03:30:41 PDT 2013


Just an FYI: it's often handy to mention the PR number when a thread is
concluded by filing a bug. That way other people reading (now, or more
importantly, later) can follow the issue through to the bug and its
resolution
On Apr 11, 2013 4:24 PM, "Anadi Mishra" <reachanadi at gmail.com> wrote:

> Done.
>
> Best,
> Anadi.
>
>
> On Thu, Apr 11, 2013 at 7:01 AM, Nadav Rotem <nrotem at apple.com> wrote:
> > Hi Anadi,
> >
> > Yes, this is a bug in the loop vectorizer. The loop vectorizer expects
> only
> > one loop counter (integer with step=1).  There is no reason why we should
> > not handle the case below, and it should be easy to fix.  Interestingly
> > enough if you reverse the order of iterations and count from SIZE to
> zero,
> > the loop vectorizer would vectorize it.  If you open a bugzilla report
> and
> > assign it to me I will look at it.
> >
> > Example:
> >
> > int foo(int *aa, int *bb, int SIZE) {
> >   int count = 190;
> >   for(int i=SIZE;i > 0;i--) {
> >     aa[i] = bb[i] + count;
> >     count++;
> >   }
> > }
> >
> >
> > Thanks,
> > Nadav
> >
> >   The loop vectorizer has some LSR-like capabilities for merging multiple
> > induction variables into a
> >
> >
> > On Apr 10, 2013, at 7:52 PM, Anadi Mishra <reachanadi at gmail.com> wrote:
> >
> > Hi Nadav,
> >
> > I tried your suggestion by changing the condition to :
> >
> > 189   if (LoopVectorize && OptLevel >= 0)
> > 190     MPM.add(createLoopVectorizePass());
> >
> > and compiled. Then I used the following command:
> >
> > opt -mtriple=x86_64-linux-gnu -vectorize-loops
> > -vectorizer-min-trip-count=6 -debug-only=loop-vectorize -O1-S -o
> > example1_vect.s example1.s
> >
> > where example1.s is IR generated by
> >
> > clang -S -emit-llvm example1.c
> >
> > example1.c contains the following loop:
> >
> > for(int i=0;i<SIZE;i++)
> >        {
> >                aa[i] = bb[i] + count;
> >                count++;
> >                printf("a[%d] is %d", i,aa[i]);
> >        }
> >
> > LV runs and says "LV: Found too many inductions".
> >
> > I am guessing that this because some of the loop passes are missing.
> > Could you please shed some light on what passes should be used to
> > prepare the IR for LV?
> >
> >
> > Best,
> > Anadi
> >
> >
> > On Thu, Apr 11, 2013 at 2:48 AM, Nadav Rotem <nrotem at apple.com> wrote:
> >
> >
> > Hi Anadi,
> >
> > In the file PassManagerBuilder.cpp you can change the lines below to get
> rid
> > of the O3 restriction.
> >
> > 189   if (LoopVectorize && OptLevel > 2)
> > 190     MPM.add(createLoopVectorizePass());
> >
> > Nadav
> >
> >
> >
> >
> > On Apr 10, 2013, at 5:39 PM, Anadi Mishra <reachanadi at gmail.com> wrote:
> >
> > Hello,
> >
> > I am trying out the LoopVectorizer(LV) pass and would like to decouple it
> > from O3 which is currently required to run LV. I want to do this because
> I
> > want to understand the behaviour of LV by trying simple loops but the O3
> > mostly optimises away the loop body.
> >
> > Any ideas would be appreciated.
> >
> > Best,
> > Anadi.
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >
> >
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130415/f68a12e1/attachment.html>


More information about the llvm-dev mailing list