[llvm] r232769 - libLTO, llvm-lto, gold: Introduce flag for controlling optimization level.

Peter Collingbourne peter at pcc.me.uk
Mon Mar 23 15:17:56 PDT 2015


On Mon, Mar 23, 2015 at 03:05:31PM -0700, Ahmed Bougacha wrote:
> On Mon, Mar 23, 2015 at 3:00 PM, Peter Collingbourne <peter at pcc.me.uk> wrote:
> > On Mon, Mar 23, 2015 at 02:52:41PM -0700, Ahmed Bougacha wrote:
> >> On Thu, Mar 19, 2015 at 3:01 PM, Peter Collingbourne <peter at pcc.me.uk> wrote:
> >> > +static cl::opt<char>
> >> > +OptLevel("O",
> >> > +         cl::desc("Optimization level. [-O0, -O1, -O2, or -O3] "
> >> > +                  "(default = '-O2')"),
> >>
> >> This means LTO now defaults to -O2 - rather than the previous -O3 -
> >> for CodeGenOpt, right?  That seems like a somewhat important change,
> >> affecting all LTO users.
> >>
> >> Don't get me wrong, I think it's for the best, but people involved
> >> with performance might be interested in this.
> >
> > I believe the default before was -O2, because OptLevel is initialized
> > to 2 by the PassManagerBuilder constructor, and none of the previous LTO
> > infrastructure changed it.
> 
> Right, that's the PassManager's OptLevel.  I'm wondering about the
> CodeGenOpt::Level though.  Consider the gold plugin:

Sorry, yes, you are right, I misread your comment.

> > --- llvm/trunk/tools/gold/gold-plugin.cpp (original)
> > +++ llvm/trunk/tools/gold/gold-plugin.cpp Thu Mar 19 17:01:00 2015
> > @@ -754,9 +760,24 @@ static void codegen(Module &M) {
> >      Features.AddFeature(A);
> >
> >    TargetOptions Options = InitTargetOptionsFromCodeGenFlags();
> > +  CodeGenOpt::Level CGOptLevel;
> > +  switch (options::OptLevel) {
> > +  case 0:
> > +    CGOptLevel = CodeGenOpt::None;
> > +    break;
> > +  case 1:
> > +    CGOptLevel = CodeGenOpt::Less;
> > +    break;
> > +  case 2:
> > +    CGOptLevel = CodeGenOpt::Default;
> > +    break;
> > +  case 3:
> > +    CGOptLevel = CodeGenOpt::Aggressive;
> > +    break;
> > +  }
> >    std::unique_ptr<TargetMachine> TM(TheTarget->createTargetMachine(
> >        TripleStr, options::mcpu, Features.getString(), Options, RelocationModel,
> > -      CodeModel::Default, CodeGenOpt::Aggressive));
> > +      CodeModel::Default, CGOptLevel));
> 
> This changed from -O3 to -O2 by default, right?

Yes.

> > Anyway, there is no difference between -O2 and -O3 for LTO, as far as I
> > can tell.
> 
> Agreed; for CodeGenOpt there's not a whole lot of difference either,
> so this isn't a huge deal.

I don't have a good sense of how much of a difference it would make.
Regardless, I do agree it would be worth mentioning somewhere, perhaps in
the release notes.

Thanks,
-- 
Peter



More information about the llvm-commits mailing list