Sumanth Gundapaneni via llvm-dev
2017-Jan-06 18:56 UTC
[llvm-dev] LLVMTargetMachine with optimization level passed from clang.
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. --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
Mehdi Amini via llvm-dev
2017-Jan-06 19:10 UTC
[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. (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 > >
Sumanth Gundapaneni via llvm-dev
2017-Jan-06 20:11 UTC
[llvm-dev] LLVMTargetMachine with optimization level passed from clang.
Apologies for the confusion. I was trying to understand why passes were run at -O1 when they are intended for -O2 and above. Is there a way I could avoid running optimizations at -O1 that are meant to run at -O2 and above? --Sumanth G -----Original Message----- From: mehdi.amini at apple.com [mailto:mehdi.amini at apple.com] Sent: Friday, January 6, 2017 1:10 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 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. (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 > >
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