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/68408fd4/attachment.html>
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>
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>