[llvm-dev] LLVMTargetMachine with optimization level passed from clang.
Mehdi Amini via llvm-dev
llvm-dev at lists.llvm.org
Fri Jan 6 10:36:33 PST 2017
> 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