[LLVMdev] Decouple LoopVectorizer from O3

Anadi Mishra reachanadi at gmail.com
Wed Apr 10 23:22:06 PDT 2013


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
>
>



More information about the llvm-dev mailing list