<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br><div><div>On Oct 14, 2013, at 3:27 AM, Zakk <<a href="mailto:zakk0610@gmail.com">zakk0610@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr">Hi all, <div>I meet this problem when <span style="font-family:arial,sans-serif;font-size:13.888888359069824px">compiling the</span> TREAM benchmark (<a href="http://www.cs.virginia.edu/stream/FTP/Code/">http://www.cs.virginia.edu/stream/FTP/Code/</a>) with enable-misched</div>
<div><br></div><div>The small function will be scheduled as good code, but if opt inline this function, the inline part will be scheduled as bad code.</div></div></blockquote><div><br></div><div>A bug for this is welcome. Pretty soon, I’ll be verifying A9 performance and changing the default scheduler. When I do this, I’ll be using the new machine model:</div><div><br></div><div>(-mllvm) -sched-itins=false</div><div><br></div><div>However, some scheduler changes are required for that mode to fully enforce pipeline hazards.</div><br><blockquote type="cite"><div dir="ltr"><div>so I rewrite a simple code as attached link (foo.c), and compiled with two different methods:<br>
</div><div><br></div><div><b><font face="arial, helvetica, sans-serif">method A:</font></b></div><div><b><font face="arial, helvetica, sans-serif">$clang -O3 foo.c -static -S -o foo.s -mllvm -enable-misched  -mllvm -unroll-count=4 <font>--target=arm </font><font>-mfloat-abi=hard </font>-mcpu=cortex-a9 -fno-vectorize -fno-slp-vectorize</font></b></div>
<div><b><font face="arial, helvetica, sans-serif"><br></font></b></div><div><b><font face="arial, helvetica, sans-serif">and</font></b></div><div><b><font face="arial, helvetica, sans-serif"><br></font></b></div><div><b><font face="arial, helvetica, sans-serif">method B:</font></b></div>
<div><b><font face="arial, helvetica, sans-serif"><font>$clang foo.c -S -emit-llvm -o foo.bc --target=arm -mfloat-abi=hard -mcpu=cortex-a9</font><br></font></b></div><div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; direction: ltr; word-break: normal;"><font face="arial, helvetica, sans-serif"><b>$opt foo.bc -O3 -unroll-count=4 -o foo.opt.bc</b></font></div><b><font face="arial, helvetica, sans-serif">

</font></b><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; direction: ltr; word-break: normal;"><font face="arial, helvetica, sans-serif"><b>$llc foo.opt.bc -o foo.opt.s -march=arm -mcpu=cortex-a9 -enable-misched</b></font><br></div></div></div></blockquote><div><br></div><div>You can try “clang -O3 -mllvm -disable-llvm-optzns …”. clang should generate the same bitcode, but skip the “opt” step.</div><div><br></div><div>If that doesn’t work it can be a nightmare trying to decompose the compilations steps with fidelity. You can try:</div><div>- clang -### … </div><div>- clang -mllvm -print-options …</div><div>- Passing a full triple to all tools with -mtriple</div><div>- Debug the TargetOptions fields</div><div>- -print-after-all to see which phase is different</div><div><br></div><div>Even if you get all the options right, the process of serializing and rereading the IR can affect the optimizations.</div><div><br></div><div>Sorry. I’ve been trying to think of a way to improve this situation.</div><div><br></div><div>-Andy</div><div><br></div><blockquote type="cite"><div dir="ltr"><div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; direction: ltr; word-break: normal;">
</div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; word-break: normal;">
<span style="font-size: 12pt; font-family: Calibri;">(ps. I had checked with debug-pass=structure, so I think they are </span><font face="Calibri"><span style="font-size:15.972221374511719px">equivalently)</span></font></div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; word-break: normal;"><br></div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; word-break: normal;"><span style="font-family: Calibri; font-size: 12pt;">but the result is different: </span><br>
</div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; word-break: normal;"><span style="font-size: 12pt; font-family: Calibri;">You can find the </span><font face="Calibri"><span style="font-size:15.972221374511719px">LBB1_4 of foo.s, it always reuses the same reg for computation, but LBB1_4 of foo.opt.s doesn't.</span></font></div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; word-break: normal;"><font face="Calibri"><span style="font-size:15.972221374511719px"><br></span></font></div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; word-break: normal;">
<font face="Calibri"><span style="font-size:15.972221374511719px">My question is how to just use clang (method A) to achieve B result? <br>Or i am missing something here?</span></font></div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; word-break: normal;">
<font face="Calibri"><span style="font-size:15.972221374511719px"><br></span></font></div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; word-break: normal;"><span style="font-family:arial,sans-serif;font-size:13.888888359069824px">I really appreciate </span><span class="" style="background-color:rgb(255,255,204);font-family:arial,sans-serif;font-size:13.888888359069824px">any</span><span style="font-family:arial,sans-serif;font-size:13.888888359069824px"> </span><span class="" style="background-color:rgb(255,255,204);font-family:arial,sans-serif;font-size:13.888888359069824px">help and suggestions</span><span style="font-family:arial,sans-serif;font-size:13.888888359069824px">.</span><font face="Calibri"><span style="font-size:15.972221374511719px"><br>
</span></font></div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; word-break: normal;"><span style="font-family:arial,sans-serif;font-size:13.888888359069824px">Thanks</span><br></div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; word-break: normal;">
<span style="font-family:arial,sans-serif;font-size:13.888888359069824px"><br></span></div>Kuan-Hsu<br><br>------- file link -------
</div><div><div style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; word-break: normal;">foo.c: <a href="http://goo.gl/nVa2K0">http://goo.gl/nVa2K0</a><br></div><div>foo.s: <a href="http://goo.gl/ML9eNj">http://goo.gl/ML9eNj</a></div>
<div>foo.opt.s: <a href="http://goo.gl/31PCnf">http://goo.gl/31PCnf</a></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>