Hi. I played a bit with -flinker-output=nolto-rel of gimple-match.ii and I identified that current default of min-lto-partition leads to too many LTRANS. We pay with LTO overhead and so that user time is high.
Base is: $ g++ -O2 /tmp/gimple-match.ii -c -fno-checking -o x.o real 0m40.130s user 0m39.911s LGEN: $ time g++ -O2 /tmp/gimple-match.ii -c -flto -fno-checking real 0m8.709s user 0m8.543s WPA+LTRANS: $ time gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -r -o gimple-match2.o --param lto-partitions=4 -fno-checking real 0m11.220s user 0m33.067s $ time gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -r -o gimple-match2.o --param lto-partitions=6 -fno-checking real 0m9.880s user 0m35.599s $ time gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -r -o gimple-match2.o --param lto-partitions=8 -fno-checking real 0m6.681s user 0m39.746s default: $ time gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -r -o gimple-match2.o -fno-checking real 0m6.065s user 1m22.698s So I would recommend to set the param value to 75000, which leads to 6 partitions. That would be: 9+10s = 19s vs. 40s (total real time 44s). That seems reasonable to me. Thoughts? Thanks, Martin gcc/ChangeLog: 2020-03-13 Martin Liska <mli...@suse.cz> * params.opt: Bump min-lto-partition in order to not create too many LTRANS. --- gcc/params.opt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc/params.opt b/gcc/params.opt index e39216aa7d0..49fafac20af 100644 --- a/gcc/params.opt +++ b/gcc/params.opt @@ -363,7 +363,7 @@ Common Joined UInteger Var(param_max_lto_streaming_parallelism) Init(32) Integer maximal number of LTO partitions streamed in parallel. -param=lto-min-partition= -Common Joined UInteger Var(param_min_partition_size) Init(10000) Param +Common Joined UInteger Var(param_min_partition_size) Init(75000) Param Minimal size of a partition for LTO (in estimated instructions). -param=lto-partitions=