[llvm-dev] Any indispensable passes?

Peizhao Ou via llvm-dev llvm-dev at lists.llvm.org
Wed Mar 1 17:27:04 PST 2017


Thanks again John. I will go for that direction and hopefully report the
problem later if I manage to pinpoint it.

Best,
Peizhao

On Wed, Mar 1, 2017 at 5:21 PM, John Criswell <jtcriswel at gmail.com> wrote:

> 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/
>
> On Wed, Mar 1, 2017 at 2:35 PM, Sean Silva <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> 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 listllvm-dev at lists.llvm.orghttp://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>> --
>>> John Criswell
>>> Assistant Professor
>>> Department of Computer Science, University of Rochesterhttp://www.cs.rochester.edu/u/criswell
>>>
>>> _______________________________________________ LLVM Developers mailing
>>> list llvm-dev at lists.llvm.org http://lists.llvm.org/cgi-bin/
>>> mailman/listinfo/llvm-dev
>>
>> --
> John Criswell
> Assistant Professor
> Department of Computer Science, University of Rochesterhttp://www.cs.rochester.edu/u/criswell
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170301/007c39ce/attachment.html>


More information about the llvm-dev mailing list