[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