[llvm-dev] Replication -O3 optimizations manually (original) (raw)

Michael Kruse via llvm-dev llvm-dev at lists.llvm.org
Sat Oct 20 13:06:27 PDT 2018


Hi,

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 Threshold = None, Optional Count = None, Optional AllowPartial = None, Optional Runtime = None, Optional UpperBound = None, Optional 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).

Michael

Am Fr., 19. Okt. 2018 um 14:18 Uhr schrieb Han Cui via llvm-dev <llvm-dev at lists.llvm.org>:

Hi,

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: clang -O1 -S -emit-llvm main.c -o main.ll opt -O3 main.ll -o main-opt1.ll clang -O1 main-opt1.ll -o main-opt1 Process B: clang -O1 -S -emit-llvm main.c -o main.ll 2. opt [opt flags given by command ‘opt -O3 -disable-output -debug-pass=Arguments main.ll’] main.ll -o main-opt2.ll clang -O1 main-opt2.ll -o main-opt2 I tried this with a set of programs and I noticed the execution time of main-opt2 is often much slower than main-opt1. While ‘main.ll’ is the same, ‘main-opt1.ll’ is different to ‘main-opt2.ll’. May I get some suggestions what I should put for opt (to replace the command in the brackets), so that the two process would have identical effects? Any help would be much appreciated. Thanks, Han


LLVM Developers mailing list llvm-dev at lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev



More information about the llvm-dev mailing list