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

Sumanth Gundapaneni via llvm-dev llvm-dev at lists.llvm.org
Fri Jan 6 10:56:27 PST 2017


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




More information about the llvm-dev mailing list