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 > >
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>
Hi David, Thanks for the suggestion, here is the link for the bug report. http://llvm.org/bugs/show_bug.cgi?id=15720 Best, Anadi. On Mon, Apr 15, 2013 at 12:30 PM, David Blaikie <dblaikie at gmail.com> wrote:> 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