<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>Hi Zinovy, </div><div><br></div><div>The loop vectorizer probably decided that it was not profitable to vectorize the function. You can force the vectorization of the function by setting a low threshold. </div><div><br></div><div>Thanks,</div><div>Nadav</div><br><div><div>On Mar 12, 2014, at 3:34 AM, Zinovy Nis <<a href="mailto:zinovy.nis@gmail.com">zinovy.nis@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr">Hi,<div><br></div><div>I'm reading "<a href="http://llvm.org/docs/Vectorizers.html">http://llvm.org/docs/Vectorizers.html</a>" and have few question. Hope someone has answers on it.</div><br><br>
The Loop Vectorizer can vectorize code that becomes a sequence of scalar instructions that scatter/gathers memory. (<a href="http://llvm.org/docs/Vectorizers.html#scatter-gather">http://llvm.org/docs/Vectorizers.html#scatter-gather</a>)<br>
<br>int foo(int *A, int *B, int n, int k) {<br>  for (int i = 0; i < n; ++i)<br>    A[i*7] += B[i*k];<br>}<div><br></div><div>I replaced "int *A"/"int *B" into "double *A"/"double *B" and then compiled the sample with </div>
<div><br><div>$> ./clang -Ofast -ffast-math test.c -std=c99 -march=core-avx2 -S -o bb.S  -fslp-vectorize-aggressive<br></div><div><br></div><div>and loop body looks like:</div><div><br></div><div><div>.LBB1_2:                                # %for.body</div>
<div>                                        # =>This Inner Loop Header: Depth=1</div><div>        cltq</div><div>        vmovsd  (%rsi,%rax,8), %xmm0</div><div>        movq    %r9, %r10</div><div>        sarq    $32, %r10</div>
<div>        vaddsd  (%rdi,%r10,8), %xmm0, %xmm0</div><div>        vmovsd  %xmm0, (%rdi,%r10,8)</div><div>        addq    %r8, %r9</div><div>        addl    %ecx, %eax</div><div>        decl    %edx</div><div>        jne     .LBB1_2</div>
</div><div><br></div><div>so vector instructions for scalars (vaddsd, vmovsd) were used in the loop and no real gather/scatter emitted.</div><div><br></div><div>The question is why this loop was not vectorized? Typo in docs?</div>
<div><br></div></div></div>
_______________________________________________<br>LLVM Developers mailing list<br><a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br></blockquote></div><br></body></html>