[llvm-dev] Any indispensable passes?

John Criswell via llvm-dev llvm-dev at lists.llvm.org
Wed Mar 1 17:21:46 PST 2017


On 3/1/17 6:58 PM, Peizhao Ou wrote:
> Yeah, it looks like SROA does mem2reg too. One more update is that the 
> following two combinations are fine:
> 1. opt (no optimization) + llc (-O0)
> 2. opt (-O3) + llc (-O3)
>
> And the problematic combination is "opt (-O3) + llc (-O0)". Now I 
> suspect that there are even synergistic effects between frontend and 
> backend optimizations.  Any comments about that?

There are passes like UnifyExitNodes that some passes may assume have 
already been executed.  That could trigger a misoptimization.

That said, I would really like to see bugpoint try to reduce this bug.  
Your situation is a perfect case for bugpoint, and bugpoint should be 
able to reduce the optimizations and code down to a point where someone 
can tell whether it's a missing optimization or a bug in an optimization.

Regards,

John Criswell

>
> Thanks,
> Peizhao
> http://plrg.eecs.uci.edu/~peizhaoo/profile/ 
> <http://plrg.eecs.uci.edu/%7Epeizhaoo/profile/>
>
> On Wed, Mar 1, 2017 at 2:35 PM, Sean Silva <chisophugis at gmail.com 
> <mailto:chisophugis at gmail.com>> wrote:
>
>
>
>     On Wed, Mar 1, 2017 at 12:53 PM, John Criswell via llvm-dev
>     <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>
>         On 3/1/17 2:54 PM, Peizhao Ou via llvm-dev wrote:
>>         Hi everyone,
>>
>>         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.
>
>         Can you clarify what you mean by "binary is wrong"?  Does the
>         program not link, or does it produce incorrect results when
>         executed?
>
>         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.
>
>
>     SROA does this too (among other things).
>
>     -- Sean Silva
>
>
>         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.
>
>         Regards,
>
>         John Criswell
>
>
>>
>>         That makes me wonder if there are any IR->IR passes that are
>>         indispensable and they are to guarantee the semantics?
>>
>>         Here's my workflow just in case:
>>         *********************************************************************************
>>         1. Compile the source code to unoptimized IRs:
>>         clang -c -emit-llvm -O0 test.c -o test.bc
>>         2. Run opt with a set of IR->IR passes, e.g.,
>>         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
>>         3. Run llc with -O0:
>>         llc -file-type=obj test.bc -o test.o
>>         4. Last link all the object files:
>>         clang -O0 test1.o test2.o -o test
>>         *********************************************************************************
>>
>>         Thanks,
>>         Peizhao
>>
>>
>>
>>         _______________________________________________
>>         LLVM Developers mailing list
>>         llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>         http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>         <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>         -- 
>         John Criswell
>         Assistant Professor
>         Department of Computer Science, University of Rochester
>         http://www.cs.rochester.edu/u/criswell
>         <http://www.cs.rochester.edu/u/criswell>
>
>         _______________________________________________ LLVM
>         Developers mailing list llvm-dev at lists.llvm.org
>         <mailto:llvm-dev at lists.llvm.org>
>         http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>         <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev> 
>
-- 
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
http://www.cs.rochester.edu/u/criswell
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170301/1ce53591/attachment.html>


More information about the llvm-dev mailing list