<div dir="ltr">if you replace "<span style="font-size:12.8px">zero *= a;</span>" by "<span style="font-size:12.8px">zero += a;</span>",  you get:<div><br></div><div><div>; Function Attrs: norecurse nounwind readnone uwtable</div><div>define i32 @foo(i32 %a) #0 {</div><div>entry:</div><div>  %0 = mul i32 %a, 10000</div><div>  ret i32 %0</div><div>}</div></div><div><br></div><div>I think the problem is ScalarEvolution only have "SCEVAddRecExpr" for <span style="font-size:12.8px">zero += a, but no corresponding expression to represent and optimize zero *= a;</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px"><br></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 2, 2016 at 3:24 PM, zet via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>test.c :</div><div>-----------------------------------------------------------------------</div><div><div>int foo(int a)</div><div>{</div><div>  int zero = 0;</div><div>  for (int i = 0; i < 10000; i++)</div><div>    zero *= a;</div><div>  return zero;</div><div>}</div></div><div>-------------------------------------------------------------------------</div><div><br></div><div>run clang : clang -O2 -S test.c -o test.s</div><div><br></div><div>My clang version is 3.7.1.</div><div>We will get a horrible assembly output.<br></div><div><br></div><div>Why constant propagation and other optimization skills can not find out that variable zero is initialized 0, and the only statement in for loop (i.e. zero *= a) always get a 0?</div><div><br></div><div>I can read the clang/llvm source, Please tell me more details.</div><div><br></div><div>THX</div><span class="HOEnZb"><font color="#888888"><div><br></div><div><br></div>-- <br><div><div dir="ltr"><div><font face="nsimsun, monospace"><span style="color:rgb(51,51,51);line-height:24px;white-space:pre-wrap;background-color:rgb(241,254,221)">业精于勤</span><span style="color:rgb(51,51,51);line-height:24px;white-space:pre-wrap;background-color:rgb(241,254,221)">,</span><span style="color:rgb(51,51,51);line-height:24px;white-space:pre-wrap;background-color:rgb(241,254,221)">荒于嬉..</span></font></div></div></div>
</font></span></div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>