> > $ 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
I did /aux/hubicka/trunk-git/build2/./prev-gcc/xg++ -B/aux/hubicka/trunk-git/build2/./prev-gcc/ -B/usr/local/x86_64-pc-linux-gnu/bin/ -nostdinc++ -B/aux/hubicka/trunk-git/build2/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs -B/aux/hubicka/trunk-git/build2/prev-x86_64-pc-linux-gnu/libstdc++-v3/libsupc++/.libs -I/aux/hubicka/trunk-git/build2/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu -I/aux/hubicka/trunk-git/build2/prev-x86_64-pc-linux-gnu/libstdc++-v3/include -I/aux/hubicka/trunk-git/libstdc++-v3/libsupc++ -L/aux/hubicka/trunk-git/build2/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs -L/aux/hubicka/trunk-git/build2/prev-x86_64-pc-linux-gnu/libstdc++-v3/libsupc++/.libs -fno-PIE -c -g -O2 -fchecking=0 -DIN_GCC -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-error=format-diag -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -Werror -fno-common -Wno-unused -DHAVE_CONFIG_H -I. -I. -I../../gcc -I../../gcc/. -I../../gcc/../include -I../../gcc/../libcpp/include -I/aux/hubicka/trunk-git/build2/./gmp -I/aux/hubicka/trunk-git/gmp -I/aux/hubicka/trunk-git/build2/./mpfr/src -I/aux/hubicka/trunk-git/mpfr/src -I/aux/hubicka/trunk-git/mpc/src -I../../gcc/../libdecnumber -I../../gcc/../libdecnumber/bid -I../libdecnumber -I../../gcc/../libbacktrace -I/aux/hubicka/trunk-git/build2/./isl/include -I/aux/hubicka/trunk-git/isl/include -o gimple-match.o -MT gimple-match.o -MMD -MP -MF ./.deps/gimple-match.TPo gimple-match.c -flto (copying from build disabling checking and adding -flto) and I get: hubicka@lomikamen-jh:/aux/hubicka/trunk-git/build2/gcc$ time /aux/hubicka/trunk-install/bin/gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -fno-checking --param lto-partitions=128 -r real 0m10.394s user 2m13.809s sys 0m3.896s hubicka@lomikamen-jh:/aux/hubicka/trunk-git/build2/gcc$ time /aux/hubicka/trunk-install/bin/gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -fno-checking --param lto-partitions=8 -r real 0m21.033s user 2m3.063s sys 0m2.539s hubicka@lomikamen-jh:/aux/hubicka/trunk-git/build2/gcc$ time /aux/hubicka/trunk-install/bin/gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -fno-checking --param lto-partitions=6 -r real 0m23.975s user 1m56.139s sys 0m2.595s hubicka@lomikamen-jh:/aux/hubicka/trunk-git/build2/gcc$ time /aux/hubicka/trunk-install/bin/gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -fno-checking --param lto-partitions=4 -r real 0m32.383s user 1m39.411s sys 0m2.213s With debug info disabled (like you do, but I guess in less realistic setting) I get: hubicka@lomikamen-jh:/aux/hubicka/trunk-git/build2/gcc$ time /aux/hubicka/trunk-install/bin/gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -fno-checking --param lto-partitions=128 -r real 0m10.905s user 1m55.065s sys 0m2.956s hubicka@lomikamen-jh:/aux/hubicka/trunk-git/build2/gcc$ time /aux/hubicka/trunk-install/bin/gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -fno-checking --param lto-partitions=8 -r real 0m17.297s user 1m26.513s sys 0m1.626s hubicka@lomikamen-jh:/aux/hubicka/trunk-git/build2/gcc$ time /aux/hubicka/trunk-install/bin/gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -fno-checking --param lto-partitions=6 -r real 0m22.365s user 1m30.969s sys 0m1.386s hubicka@lomikamen-jh:/aux/hubicka/trunk-git/build2/gcc$ time /aux/hubicka/trunk-install/bin/gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -fno-checking --param lto-partitions=4 -r real 0m26.534s user 1m21.593s sys 0m0.902s So I do not see such notable idfference in user times (but they are consistently worse than yours). Perhaps, can you try to perf it including the system profile? It may give us some idea why things behave differently. Compiler binary I use is profiledbootstrapped with LTO. Honza > > > > 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= > > >