<div dir="ltr">"binary is wrong" refers to it compiles & links but produces incorrect results. I actually tried another combination, in which I used -O3 for opt, and then -O0 for llc, the problem didn't go away, but when I use -O3 for llc, the binary produces expected results.<div><br></div><div>Thanks for pointing out for the -mem2reg pass and using the bugpoint tool. BTW, the problem comes from compiling and running gcc in SPEC CPU2006.</div><div><br></div><div>Best,</div><div>Peizhao</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 1, 2017 at 12:53 PM, John Criswell <span dir="ltr"><<a href="mailto:jtcriswel@gmail.com" target="_blank">jtcriswel@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 bgcolor="#FFFFFF" text="#000000"><span class="">
    <div class="m_-6120272021930832792moz-cite-prefix">On 3/1/17 2:54 PM, Peizhao Ou via
      llvm-dev wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">Hi everyone,
        <div><br>
        </div>
        <div>I am currently testing out a combination of IR->IR
          passes with opt to benchmark how they affect performance. The
          source code works fine if simply use the clang (-O0/-O3) to
          directly compile to object files and link them. However, when
          I use opt with a select set of passes and then use llc to
          compile them to binary, the compiled binary is wrong.</div>
      </div>
    </blockquote>
    <br></span>
    Can you clarify what you mean by "binary is wrong"?  Does the
    program not link, or does it produce incorrect results when
    executed?<br>
    <br>
    You might try running mem2reg before any other passes in your random
    list of optimizations.  mem2reg does SSA construction; I'd bet that
    you're more likely to trigger a bug in other passes if you haven't
    run mem2reg first.  That said, I don't think any passes are needed
    for correctness.<br>
    <br>
    You might also try using bugpoint to reduce the bug that you're
    seeing.  As I said before, you may be triggering bugs that don't
    usually show up in the standard pass pipeline.  Reducing the bug
    (and fixing it if you are willing and able) would help improve the
    quality of the code.<br>
    <br>
    Regards,<br>
    <br>
    John Criswell<br>
    <br>
    <br>
    <blockquote type="cite"><span class="">
      <div dir="ltr">
        <div><br>
        </div>
        <div>That makes me wonder if there are any IR->IR passes that
          are indispensable and they are to guarantee the semantics?</div>
        <div><br>
        </div>
        <div>Here's my workflow just in case:<br>
        </div>
        <div>******************************<wbr>******************************<wbr>*********************</div>
        <div>1. Compile the source code to unoptimized IRs:</div>
        <div>clang -c -emit-llvm -O0 test.c -o test.bc</div>
        <div>2. Run opt with a set of IR->IR passes, e.g.,</div>
        <div>opt -simplifycfg -sroa -inferattrs -globalopt -instcombine
          -simplifycfg -prune-eh -inline  -tailcallelim -simplifycfg
          -loop-simplify -lcssa -loop-rotate -licm -gvn -verify test.bc
          -o test.bc</div>
        <div>3. Run llc with -O0:</div>
        <div>llc -file-type=obj test.bc -o test.o</div>
        <div>4. Last link all the object files:</div>
        <div>clang -O0 test1.o test2.o -o test</div>
        <div>******************************<wbr>******************************<wbr>*********************<br>
        </div>
        <div><br>
        </div>
        <div>Thanks,</div>
        <div>Peizhao</div>
        <div><br>
        </div>
      </div>
      <br>
      <fieldset class="m_-6120272021930832792mimeAttachmentHeader"></fieldset>
      <br>
      </span><span class=""><pre>______________________________<wbr>_________________
LLVM Developers mailing list
<a class="m_-6120272021930832792moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<a class="m_-6120272021930832792moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a>
</pre>
    </span></blockquote><span class="HOEnZb"><font color="#888888">
    <br>
    <p><br>
    </p>
    <pre class="m_-6120272021930832792moz-signature" cols="72">-- 
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
<a class="m_-6120272021930832792moz-txt-link-freetext" href="http://www.cs.rochester.edu/u/criswell" target="_blank">http://www.cs.rochester.edu/u/<wbr>criswell</a></pre>
  </font></span></div>

</blockquote></div><br></div>