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

Sumanth Gundapaneni via llvm-dev llvm-dev at lists.llvm.org
Fri Jan 6 12:11:15 PST 2017


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
> 
> 




More information about the llvm-dev mailing list