[LLVMdev] Autovectorization questions

Chandler Carruth chandlerc at google.com
Wed Mar 12 16:48:32 PDT 2014


On Wed, Mar 12, 2014 at 4:45 PM, Arnold Schwaighofer <
aschwaighofer at apple.com> wrote:

> The loop vectorizer relies on scev’s nowrap flags. We need to improve SCEV
> for this.
>
>   %conv = sext i32 %k to i64
>   -->  (sext i32 %k to i64)
>   %i.06 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
>   -->  {0,+,1}<nuw><nsw><%for.body>             Exits: 1023
>   %mul1 = mul nsw i64 %i.06, 7
>   -->  {0,+,7}<%for.body>               Exits: 7161
>   %arrayidx2 = getelementptr inbounds i32* %A, i64 %mul1
>   -->  {%A,+,28}<%for.body>           <== we want to see a nw flag here.
>
>
> Scev sometimes drops new flags for safety (cannonicalization can make them
> invalid if the same expression is used in different contexts) . See past
> discussions on this.
>

Sure, but I think its really important to clarify that the *example* is
fine, and there is nothing fundamental about it that prevents vectorization.

We simply need to fix SCEV.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140312/30fcf6d9/attachment.html>


More information about the llvm-dev mailing list