Replication -O3 optimizations manually


I’m having a very similar question to this thread, about replicating the O3 optimization processing manually using opt.

This is my setup:

Process A:


it is not possible (or at least difficult) to entirely get the same
behavior. This is because the pass manager builder for the
optimization levels add the passes with additional options. See
PassManagerBuilder.cpp. For instance, the Loop Unroll pass takes the
following options:

LoopUnroll(int OptLevel = 2, Optional<unsigned> Threshold = None,
             Optional<unsigned> Count = None,
             Optional<bool> AllowPartial = None, Optional<bool> Runtime = None,
             Optional<bool> UpperBound = None,
             Optional<bool> AllowPeeling = None)

It is added twice in the typical pipeline: Once to only unroll loops
completely, and another time to allow more general unrolling. What
adding it to the pass pipeline using opt -loop-unroll, it is added
with the default options.
Most passes have command line options to control this behaviour as
well (such as -unroll-runtime), but this would apply to both instances
of the pass. You would have to invoke opt multiple times with
different options for each instance, but this would also split the
module/function/loop pass hierarchy and different preserved analysis
passes (such as alias analysis which have to be re-added again).


Hi Han,

What is your ultimate goal here?


Hi Philip,

I would like to try different pass sequences with opt and see how they affect program optimization, and I was thinking replicating the O3 sequence would be a start point.