On 08/19/2015 07:41 AM, Artyom Tarasenko wrote:
Without the patch:
time g++ -DHAVE_CONFIG_H -I. -I../binutils-gdb/gold
-I../binutils-gdb/gold -I../binutils-gdb/gold/../include
-I../binutils-gdb/gold/../elfcpp
-DLOCALEDIR="\"/usr/local/share/locale\""
-DBINDIR="\"/usr/local/bin\"" -DTOOLBINDIR="\"/usr/local//bin\""
-DTOOLLIBDIR="\"/usr/local//lib\"" -W -Wall -Werror
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -frandom-seed=tilegx.o
-I../binutils-gdb/gold/../zlib -g -O2 -MT tilegx.o -MD -MP -MF
.deps/tilegx.Tpo -c -o tilegx.o ../binutils-gdb/gold/tilegx.cc
real 18m31.407s
user 18m23.661s
sys 0m6.784s
The patch surely improves the situation, tcg_optimize in the perf top
takes ~7% (instead of~12%), and the only function marked red by
perf-top is init_temp_info(). So with the patch:
real 17m46.380s
user 17m37.522s
sys 0m7.120s
And if I completely disable optimizer (// #define
USE_TCG_OPTIMIZATIONS in tcg.c), it's still quite faster:
real 14m17.668s
user 14m10.241s
sys 0m6.060s
This isn't surprising, because at the moment tcg optimizations are almost
completely ineffective for sparc. The way the register windows are implemented
means that there are very few proper tcg temporaries to optimize.
I've just updated an old branch that attempts to cure this. It creates proper
tcg temporaries for the windowed registers, and uses a bit of recursion to find
the place at which they should be stored.
git://github.com/rth7680/qemu.git tcg-indirect
With a few quick unscientific tests, it appears to help. It would be nice to
put that branch side-by-side with your tests above.
r~