<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>