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. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130411/73bb2216/attachment.html>
You can take unoptimized bitcode and run it through ‘opt’ to have complete flexibility in which passes get run. It may take some fiddling to find out the pass sequence and ordering that does what you want, as some passes rely on previous passes to canonicaplize code into a form it can effectively work with. -Jim 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-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130410/f28f01ad/attachment.html>
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-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130410/cfe55fc7/attachment.html>
Thanks for the suggestion Jim. I already tried to do it by 'opt' but it also requires O3. BTW I think that if I invoke 'opt' with '-vectorize-loops' option, it will figure out the passes required for LV since every pass mentions what other passes are prerequisite. Am I correct? Best, Anadi. On Thu, Apr 11, 2013 at 2:48 AM, Jim Grosbach <grosbach at apple.com> wrote:> You can take unoptimized bitcode and run it through ‘opt’ to have complete > flexibility in which passes get run. It may take some fiddling to find out > the pass sequence and ordering that does what you want, as some passes rely > on previous passes to canonicaplize code into a form it can effectively > work with. > > -Jim > > > 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 > > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130411/3277c1c9/attachment.html>
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 > >