[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