[llvm-dev] Programmatically Toggle Specific LLVM Optimizations

Qiongsi Wu via llvm-dev llvm-dev at lists.llvm.org
Tue Jul 10 15:38:24 PDT 2018


Hi Michael! 

Thanks for your reply. I managed to add a small amount of code to PassManager to have this feature implemented. 

One can now turn off a pass by doing

opt -disablepass=licm or clang -mllvm -disablepass=licm

to turn off, for example, loop invariant code motion. 

I programmed the command line option to be really hidden. This maybe a useful thing to have in the trunk for people who want to fine tune the optimizations. 

Should I submit a patch? I am not sure if my code follows all the best practices of the community, but it is working from my own testing. 

Thanks again for your help! 

Qiongsi

> On Jun 1, 2018, at 1:16 PM, Michael Kruse <llvmdev at meinersbur.de> wrote:
> 
> Some passes have supported options to disable them, e.g.
> -fno-vectorize and -fno-unroll-loops, but there is no general option.
> Since it's not useful in general to disable arbitrary options, some
> handywork is required. Using the legacy (=default) pass manager here.
> 
> To get the passes that are run:
> $ clang -O3 -mllvm -debug-pass=Arguments
> 
> To optimize separately:
> $ clang -Xclang -disable-llvm-passes -S -emit-llvm -o - | opt <your
> list of passes> | llc
> (not tested, so don't expect to work straight out of the box)
> 
> This is not strictly the same as optimizing using clang (pass options
> are missing), so there will be performance differences. You could
> instead customize PassManagerBuilder::populateModulePassManager() and
> PassManagerBuilder::populateFunctionPassManager().
> 
> Michael



More information about the llvm-dev mailing list