[llvm-dev] LLVMTargetMachine with optimization level passed from clang.

Robinson, Paul via llvm-dev llvm-dev at lists.llvm.org
Fri Jan 6 12:41:30 PST 2017



> -----Original Message-----
> From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Mehdi
> Amini via llvm-dev
> Sent: Friday, January 06, 2017 11:10 AM
> To: Sumanth Gundapaneni
> Cc: LLVM Developers
> Subject: Re: [llvm-dev] LLVMTargetMachine with optimization level passed
> from clang.
> 
> 
> > On Jan 6, 2017, at 10:56 AM, Sumanth Gundapaneni
> <sgundapa at codeaurora.org> wrote:
> >
> > Here is a problem scenario.
> >
> > I want to enable a backend pass at -O2 or above.
> > if (TM->getOptLevel() >= CodeGenOpt::Default)
> >    addPass(&xxxxx);
> >
> > This pass will be run at -O1 too since clang is creating the
> TargetMachine with CodeGenOpt::Default for -O1.
> 
> Right, you can’t.

Can somebody explain why it's not a bug that -O1 and -O2 are identical?
Thanks,
--paulr

> (You wrote yesterday "I want the optimization to be turned on at -O1 and
> above.”).
> 
>> Mehdi
> 
> 
> >
> > --Sumanth G
> > -----Original Message-----
> > From: mehdi.amini at apple.com [mailto:mehdi.amini at apple.com]
> > Sent: Friday, January 6, 2017 12:37 PM
> > To: Sumanth Gundapaneni <sgundapa at codeaurora.org>
> > Cc: jpaquette at apple.com; LLVM Developers <llvm-dev at lists.llvm.org>
> > Subject: Re: [llvm-dev] LLVMTargetMachine with optimization level passed
> from clang.
> >
> >
> >> On Jan 6, 2017, at 7:59 AM, Sumanth Gundapaneni via llvm-dev <llvm-
> dev at lists.llvm.org> wrote:
> >>
> >> getOptLevel() gets the level from TargetMachine which is created by
> >> the Backendutil in clang with either "Default", "None" or "Aggressive".
> Threre is no correspondence for "Less".
> >> This boils down to , if I pass "-O1", the Target Machine is created
> with CodeGenOpt::Default.
> >
> > I don’t see why is it a problem? That’s why I asked earlier if you want
> it on for O1 *and above* or only O1.
> > You just have to enable it when CodeGenOpt is Default or above (or
> disabling it when CodeGenOpt::None), or did I miss something?
> >
> > —
> > Mehdi
> >
> >
> >>
> >> I am available on IRC @ sgundapa.
> >>
> >> -----Original Message-----
> >> From: jpaquette at apple.com [mailto:jpaquette at apple.com]
> >> Sent: Thursday, January 5, 2017 12:24 PM
> >> To: sgundapa at codeaurora.org
> >> Cc: LLVM Developers <llvm-dev at lists.llvm.org>
> >> Subject: Re: [llvm-dev] LLVMTargetMachine with optimization level
> passed from clang.
> >>
> >> Most of the stuff you’re looking for lives in TargetPassConfig.cpp.
> There are a few examples of how you might do it that live in there too.
> >>
> >> What it comes down to is finding the place you want your pass to live
> and sticking in some logic like this in there:
> >>
> >> if (getOptLevel() != CodeGenOpt::None)
> >>   addPass(&MyPassID);
> >>
> >> A lot of passes are added in just TargetPassConfig::addMachinePasses(),
> but some live in more specialized areas like, for the sake of example,
> TargetPassConfig::addMachineLateOptimization(). You can add it wherever
> seems best for your specific pass.
> >>
> >> Hope that helps!
> >>
> >> Jessica Paquette
> >>
> >>> On Jan 5, 2017, at 8:12 AM, via llvm-dev <llvm-dev at lists.llvm.org>
> wrote:
> >>>
> >>> I want the optimization to be turned on at -O1 and above.
> >>> In my case, it is a target independent back-end pass. (Eg:
> >>> MachinePipeliner)
> >>>
> >>>
> >>> On 2017-01-04 18:10, Mehdi Amini wrote:
> >>>>> On Jan 4, 2017, at 4:03 PM, Sumanth Gundapaneni via llvm-dev
> >>>>> <llvm-dev at lists.llvm.org> wrote:
> >>>>> I see the BackendUtil.cpp of Clang creates the TargetMachine with
> >>>>> the optimization level based on below mentioned logic
> >>>>> CodeGenOpt::Level OptLevel = CodeGenOpt::Default; switch
> >>>>> (CodeGenOpts.OptimizationLevel) {
> >>>>> default: break;
> >>>>> case 0: OptLevel = CodeGenOpt::None; break; case 3: OptLevel =
> >>>>> CodeGenOpt::Aggressive; break; } As per my understanding, the
> >>>>> correspondence between optimization level and CodeGenOpt is as below
> >>>>> O0  -  none
> >>>>> O1  -  less
> >>>>> O2 -   default
> >>>>> O3  -  aggressive
> >>>>> My goal is to turn on a target dependent codegen optimization at
> >>>>> –O1(less).
> >>>> Apparently “less” is not used by clang, do you want your optimization
> >>>> to be turned on for O1 *and above* or just for O1 specifically?
> >>>> Also what kind of optimization is this? A SelectionDAG combine or a
> >>>> specific pass? If it is a pass, is it IR or MIR?
> >>>> —
> >>>> Mehdi
> >>>>> The TargetMachine is constructed with “CodeGenOpt::Default”. Is
> >>>>> there a way I could do this in LLVM ? What is the standard way of
> >>>>> doing this ? Also, the code in BackendUtil.cpp seem somewhat offbeat
> >>>>> to me.
> >>>>> --Sumanth G
> >>>>> _______________________________________________
> >>>>> LLVM Developers mailing list
> >>>>> llvm-dev at lists.llvm.org
> >>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> >>> _______________________________________________
> >>> LLVM Developers mailing list
> >>> llvm-dev at lists.llvm.org
> >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> >>
> >>
> >> _______________________________________________
> >> LLVM Developers mailing list
> >> llvm-dev at lists.llvm.org
> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> >
> >
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list