Robinson, Paul via llvm-dev
2017-Jan-06 20:41 UTC
[llvm-dev] LLVMTargetMachine with optimization level passed from clang.
> -----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
Mehdi Amini via llvm-dev
2017-Jan-06 20:49 UTC
[llvm-dev] LLVMTargetMachine with optimization level passed from clang.
> On Jan 6, 2017, at 12:41 PM, Robinson, Paul <paul.robinson at sony.com> wrote: > > > >> -----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?This is only a CodegenOpts, I don’t think it *has to* be a bug that this option is the same between O1 and O2. There are many other diff between O1/O2 However I clearly don’t like that `llc -O1` and `clang -O1` are not using the same settings here: https://reviews.llvm.org/D28409 — Mehdi
Robinson, Paul via llvm-dev
2017-Jan-06 23:39 UTC
[llvm-dev] LLVMTargetMachine with optimization level passed from clang.
> -----Original Message----- > From: mehdi.amini at apple.com [mailto:mehdi.amini at apple.com] > Sent: Friday, January 06, 2017 12:49 PM > To: Robinson, Paul > Cc: Sumanth Gundapaneni; llvm-dev at lists.llvm.org > Subject: Re: [llvm-dev] LLVMTargetMachine with optimization level passed > from clang. > > > > On Jan 6, 2017, at 12:41 PM, Robinson, Paul <paul.robinson at sony.com> > wrote: > > > > > > > >> -----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? > > This is only a CodegenOpts, I don’t think it *has to* be a bug that this > option is the same between O1 and O2. There are many other diff between > O1/O2 > > However I clearly don’t like that `llc -O1` and `clang -O1` are not using > the same settings here: https://reviews.llvm.org/D28409Awesome, thanks! --paulr> > > > — > Mehdi