[llvm-dev] Programmatically Toggle Specific LLVM Optimizations
First time poster here. Apologies if I am breaking some rules and please
let me know so I will not break it again!
I am a summer research student at the Computer Science Department at the
University of Toronto and I am working on benchmarking LLVM optimizations.
I tried looking for it online but was not able to find a programmatic
way to toggle specific LLVM optimizations. For example, I would like to
compile using the -O3 flag but with LICM turned off to see how much the
compiled binary degrades in performance. I would like the ability to
simultaneously toggle a few optimizations together as well. I would like
to benchmark many optimizations so I would like to program the experiments.
So to be really specific, there are two questions:
1. Are there some command line interfaces that can accomplish this task?
Is there a way to write a bash script to enumerate through the
optimizations and turning them off one a time?
2. If not, what is a good guide to PassManager so that I can program
Thanks so much for your help!
UTEA Reserach Student 2018, EcoSystem
Computer Science, University of Toronto
Re: [llvm-dev] Programmatically Toggle Specific LLVM Optimizations
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