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

Jessica Paquette via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 5 10:24:09 PST 2017


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



More information about the llvm-dev mailing list