[LLVMdev] Meaning of LLVM optimization levels

Renato Golin renato.golin at linaro.org
Thu Jun 6 13:40:41 PDT 2013


Folks,

I'm trying to rationalize about optimization levels and maybe we should
come up with a document like this:

http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

Though, I remember a discussion a few months ago, and some people
recommended we had names, rather than numbers, to dissociate the idea that
3 is better than 2. Regardless, would be good to have some guidelines on
what goes where, so we don't end up in yet another long discussion about
where to put the optimization <insert-name-here>.

As far as I can get from our side is:

-O3 : throw everything and hope it sticks
-O2 : optimized build, but should not explode in code size nor consume all
resources while compiling
-O1 : optimized debug binaries, don't change the execution order but remove
dead code and stuff
-O0 : don't touch it
-Os : optimize, but don't run passes that could blow up code. Try to be a
bit more drastic when removing code. When in doubt, prefer small, not fast
code.
-Oz : only perform optimizations that reduce code size. Don't even try to
run things that could potentially increase code size.

I've been thinking about this, and I think, regarding those criteria, it
would make sense to use a try/compare/rollback approach to some passes, at
least the most dramatic ones.

For instance, the vectorizer keeps the old loops hanging, and under Os/Oz,
it should be possible to rollback the pass if the end result is bigger. Of
course, IR size has little to do with final code size, but that's why we
have (and rely so much on) heuristics.

AFAIK, for that to work on any pass as they are, we'd have to implement a
transactional model on IRBuilder, which is not trivial, but could be done.
Does anyone have a strong opinion about this?

cheers,
--renato
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130606/76d60f3b/attachment.html>


More information about the llvm-dev mailing list