[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