Sumanth Gundapaneni via llvm-dev
2017-Jan-06 15:59 UTC
[llvm-dev] LLVMTargetMachine with optimization level passed from clang.
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 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
Mehdi Amini via llvm-dev
2017-Jan-06 18:36 UTC
[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 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
Apparently Analagous 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] C++ demangler for llvm tools