[llvm-dev] Any indispensable passes?

Peizhao Ou via llvm-dev llvm-dev at lists.llvm.org
Wed Mar 1 15:58:14 PST 2017


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?

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
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170301/02a63902/attachment.html>


More information about the llvm-dev mailing list