<div dir="ltr">Notice that the code you provided, for globals and stack allocations, at least, <br>is semantically equivalent to:<br><br>  int a = d[19];<br>  for(int k = 20; k < 50; k++)<br>    dataY[k] = a;<br><br>Like so, the load you see missing was redundant, probably hoisted by GVN/PRE <br>
and replaced with "%.pre".<br><br>H.<br><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Nov 3, 2013 at 11:26 AM, Sara Elshobaky <span dir="ltr"><<a href="mailto:sara.elshobaky@gmail.com" target="_blank">sara.elshobaky@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">








<div link="blue" vlink="purple" lang="EN-US">

<div>

<p class="MsoNormal">Hello,<u></u><u></u></p>

<p class="MsoNormal">I was trying to trace the Loop vectorizer of the LLVM, I
wrote a simple loop with a clear dependency. <u></u><u></u></p>

<p class="MsoNormal">But found that the debug shows that ‘we can vectorize this
loop’<u></u><u></u></p>

<p class="MsoNormal"><u></u> <u></u></p>

<p class="MsoNormal">Here you are my  loop with dependency:<u></u><u></u></p>

<p class="MsoNormal">for(int k=20;k<50;k++)<u></u><u></u></p>

<p class="MsoNormal">     dataY[k] = dataY[k-1];<u></u><u></u></p>

<p class="MsoNormal"><u></u> <u></u></p>

<p class="MsoNormal">And the debug prints:<u></u><u></u></p>

<p class="MsoNormal">LV: Checking a loop in "main"<u></u><u></u></p>

<p class="MsoNormal">LV: Found a loop: for.body4<u></u><u></u></p>

<p class="MsoNormal">LV: Found an induction variable.<u></u><u></u></p>

<p class="MsoNormal">LV: Found a write-only loop!<u></u><u></u></p>

<p class="MsoNormal">LV: We can vectorize this loop!<u></u><u></u></p>

<p class="MsoNormal">...<u></u><u></u></p>

<p class="MsoNormal">LV: Vectorization is possible but not beneficial.<u></u><u></u></p>

<p class="MsoNormal"><u></u> <u></u></p>

<p class="MsoNormal">From the LLVM IR, it contains only one ‘store’ instruction
with ‘%.pre’. Seems that no ‘load’ instruction prevented the Vectorizer to
detect dependency.<u></u><u></u></p>

<p class="MsoNormal">Is that a bug, or I’m missing something? Please advice<u></u><u></u></p>

<p class="MsoNormal"><u></u> <u></u></p>

<p class="MsoNormal">for.body4:                                       
; preds = %for.body4, %for.cond2.preheader<u></u><u></u></p>

<p class="MsoNormal">  %k.030 = phi i32 [ 20, %for.cond2.preheader ], [
%inc8, %for.body4 ]<u></u><u></u></p>

<p class="MsoNormal">  %arrayidx6 = getelementptr inbounds i32* %0, i32
%k.030<u></u><u></u></p>

<p class="MsoNormal">  store i32 %.pre, i32* %arrayidx6, align 4, !tbaa !0<u></u><u></u></p>

<p class="MsoNormal">  %inc8 = add nsw i32 %k.030, 1<u></u><u></u></p>

<p class="MsoNormal">  %exitcond32 = icmp eq i32 %inc8, 50<u></u><u></u></p>

<p class="MsoNormal">  br i1 %exitcond32, label %for.cond10.preheader, label
%for.body4<u></u><u></u></p>

<p class="MsoNormal"><u></u> <u></u></p>

<p class="MsoNormal"><u></u> <u></u></p>

<p class="MsoNormal">Thanks in advance,<u></u><u></u></p>

<p class="MsoNormal">Sara Elshobaky<u></u><u></u></p>

<p class="MsoNormal"><u></u> <u></u></p>

<p class="MsoNormal"><u></u> <u></u></p>

</div>

</div>


<br>_______________________________________________<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" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br></blockquote></div><br></div>