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
Reasonably Related Threads
- LLVMTargetMachine with optimization level passed from clang.
- LLVMTargetMachine with optimization level passed from clang.
- LLVMTargetMachine with optimization level passed from clang.
- LLVMTargetMachine with optimization level passed from clang.
- [LLVMdev] CMake: Gold linker detection