[LLVMdev] LLVM Loop Vectorizer puzzle

David Tweed david.tweed at gmail.com
Thu May 23 02:38:03 PDT 2013


Hi,

Just from personal interest, is there a canonical way in IR+metadata to
express "This small constant trip-count loop is desired to be converted
into a sequence of vector operations directly"? Ie, mapping a 4 element i32
loop into a linear sequence of <4 x i32> operations. Obviously this may not
always be a win, but I'm just wondering if there's a way to communicate
this intent and get around the vectorizer-min-trip-count in specially
desired cases, or if I should decide to generate vectorized IR directly.
(This is in code coming from a DSL which will impliciltly insert
annotations, not manually written loops.)

Cheers,
Dave



On Thu, May 23, 2013 at 5:06 AM, Arnold Schwaighofer <
aschwaighofer at apple.com> wrote:

> Hi,
>
> The TinyTripCountVectorThreshold only applies to loops with a known
> (constant) trip count. If a loop has a trip count below this value we don’t
> attempt to vectorize the loop. The loop below has an unknown trip count.
>
> Once we decide to vectorize a loop, we emit code to check whether we can
> execute one iteration of the vectorized body. This is the code quoted below.
>
> On May 22, 2013, at 10:23 PM, maxs <xtxwy.ustc at gmail.com> wrote:
>
> > Hi,
> >     I have the llvm loop vectorizer to complie the following sample:
> > //=================
> > int test(int *a, int n) {
> >
> >         for(int i = 0; i < n; i++) {
> >
> >                   a[i] += i;
> >
> >         }
> >
> >
> >         return 0;
> >
> > }
> >
> > //================
> >        The corresponded .ll file has a loop preheader:
> > //================
> >
> > for.body.lr.ph:                                   ; preds = %entry
> >   %cnt.cast = zext i32 %n to i64
> >   %0 = and i32 %n, 7
> >   %n.mod.vf = zext i32 %0 to i64
> >   %n.vec = sub i64 %cnt.cast, %n.mod.vf
> >   %cmp.zero = icmp eq i32 %0, %n
> >   br i1 %cmp.zero, label %middle.block, label %vector.body
> > //================
> >
> >        That is , if n <=7, the program will skip the vector.body. In
> LoopVectorize.cpp , I see the following code:
> > //================
> >
> >             static cl::opt<unsigned>
> >             TinyTripCountVectorThreshold("vectorizer-min-trip-count",
> cl::init(16), ... );
> > //================
> >
> >       The minimal loop count is 16. What is the "n<=7" meaning?   Thanks.
> >
> > _______________________________________________
> > 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
>



-- 
cheers, dave tweed__________________________
high-performance computing and machine vision expert: david.tweed at gmail.com
"while having code so boring anyone can maintain it, use Python." --
attempted insult seen on slashdot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130523/ac827034/attachment.html>


More information about the llvm-dev mailing list