[LLVMdev] IR Passes and TargetTransformInfo: Straw Man

Hal Finkel hfinkel at anl.gov
Mon Jul 29 16:24:19 PDT 2013


----- Original Message -----
> 
> On Jul 27, 2013, at 5:47 PM, Shuxin Yang <shuxin.llvm at gmail.com>
> wrote:
> 
> > Hi, Sean:
> > 
> >   I'm sorry I lie.  I didn't mean to lie. I did try to avoid making
> >   a *BIG* change
> > to the IPO pass-ordering for now. However, when I make a minor
> > change to
> > populateLTOPassManager() by separating module-pass and
> > non-module-passes, I
> > saw quite a few performance difference, most of them are
> > degradations. Attacking
> > these degradations one by one in a piecemeal manner is wasting
> > time. We might as
> > well define the pass-ordering for Pre-IPO, IPO and Post-IPO phases
> > at this time,
> > and hopefully once for all.
> >    
> >  In order to repair the image of being a liar, I post some
> >  preliminary result in this cozy
> > Saturday afternoon which I normally denote to daydreaming :-)
> > 
> >  So far I only measure the result of MultiSource benchmarks on my
> >  iMac (late
> > 2012 model), and the command to run the benchmark is
> >  "make TEST=simple report OPTFLAGS='-O3 -flto'".
> > 
> >  In terms of execution-time, some degrade, but more improve, few of
> >  them
> > are quite substantial. User-time is used for comparison. I measure
> > the
> > result twice, they are basically very stable. As far as I can tell
> > from the result,
> > the proposed pass-ordering is basically toward good change.
> > 
> >  Interesting enough, if I combine the populatePreIPOPassMgr() as
> >  the preIPO phase
> > (see the patch) with original populateLTOPassManager() for both IPO
> > and postIPO,
> > I see significant improve to
> > "Benchmarks/Trimaran/netbench-crc/netbench-crc"
> > (about 94%, 0.5665s(was) vs 0.0295s), as of I write this mail, I
> > have not yet got chance
> > to figure out why this combination improves this benchmark this
> > much.
> > 
> >  In teams of compile-time, the result reports my change improve the
> >  compile
> > time by about 2x, which is non-sense. I guess test-script doesn't
> > count
> > link-time.
> > 
> >   The new pass ordering Pre-IPO, IPO, and PostIPO are defined by
> > populate{PreIPO|IPO|PostIPO}PassMgr().
> > 
> >   I will discuss with Andy next Monday in order to be consistent
> >   with the
> > pass-ordering design he is envisioning, and measure more benchmarks
> > then
> > post the patch and result to the community for discussion and
> > approval.
> > 
> > Thanks
> > Shuxin
> 
> I don't have any objection to this as long as your compile times are
> comparable.
> 
> The major differences that I could spot are:
> 
> You've moved the second iteration of some scalar opts into post-IPO:
> - JumpThreading
> - CorrelatedValueProp
> 
> You no longer run InstCombine after the first round of scalar opts
> (in preIPO) and before the second round (in PostIPO).
> 
> You now have an extra (3rd) SROA in PostIPO.
> 
> I don't see a problem, but I'd like to understand the rationale. I
> think it would be valuable to capture some of the motivation behind
> the standard pass ordering and any changes we make to it. Sometimes
> part of the design becomes obsolete but no one can be sure.

Out of curiosity, has anyone tried to optimize the pass ordering in some (quasi-)automated way? Naively, a genetic algorithm seems like a perfect fit for this.

 -Hal

> Shall we
> start a new doc under LLVM subsystems?
> 
> -Andy
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-dev mailing list