[llvm-dev] Query on unswitching + vectorization

Friedman, Eli via llvm-dev llvm-dev at lists.llvm.org
Fri May 11 12:05:41 PDT 2018


On 5/10/2018 10:44 PM, Gopalasubramanian, Ganesh via llvm-dev wrote:
>
> Hi,
>
> I am going through analysis on unswitching + vectorization.
>
> For the below test, llvm unswitches successfully but fails to 
> vectorize the loop after unswitching.
>
> Llvm bails out saying “Found an outside user” apparently which is the 
> value of ‘tmp’.
>
> int i, w, x[1000], y[1000],tmp;
>
> void fn()
>
> {
>
>   for (i = 0; i < 1000; i++) {
>
>     if (w==1) {
>
>         y[i] = 1; tmp = i*2;
>
>     }
>
>     else if (w==2) {
>
>         y[i] = 2; tmp = i*4;
>
>     }
>
>     x[i] += y[i] + tmp;
>
>   }
>
> }
>
> GCC vectorizes the loop after unswitching/if conversion. Request your 
> help in vectorizing this loop.
>

Looks like some sort of pass ordering issue; it will vectorize if 
indvars runs sometime between loop unswitch and the vectorizer.

-Eli

-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180511/3d908bfa/attachment.html>


More information about the llvm-dev mailing list