This patchset improves the optimizer in 3 different ways: - by optimizing temp tracking using a bit array - by allowing constants to have copy - by differentiating 32 <-> 64 bits conversions from moves in the frontend by using specific instructions
The latter change introduces 2 new mandatory ext/extu_i32_i64 ops. For the future we might want to allow each guest to only implement 2 of the 3 size changing ops as I started to do in the following patchset: http://lists.nongnu.org/archive/html/qemu-devel/2015-07/msg03369.html That said we probably want to experiment with that first and see the impact on the performances. If wrongly implemented, things might seem to work but some bugs might appear in very rare cases, like the truncation problem we recently got on aarch64 and x86-64 hosts. Alternatively we might want to always implement the 3 ops on all backends to avoid multiplying variants of the code and with that bugs. This patchset has been fully tested on x86-64 host, but only lightly tested on aarch64, ppc64 and s390x hosts. Aurelien Jarno (10): tcg/optimize: optimize temps tracking tcg/optimize: add temp_is_const and temp_is_copy functions tcg/optimize: track const/copy status separately tcg/optimize: allow constant to have copies tcg: rename trunc_shr_i32 into trunc_shr_i64_i32 tcg: don't abuse TCG type in tcg_gen_trunc_shr_i64_i32 tcg: implement real ext_i32_i64 and extu_i32_i64 ops tcg/optimize: add optimizations for ext_i32_i64 and extu_i32_i64 ops tcg/optimize: do not remember garbage high bits for 32-bit ops tcg: update README about size changing ops tcg/README | 20 +++- tcg/aarch64/tcg-target.c | 4 + tcg/aarch64/tcg-target.h | 2 +- tcg/i386/tcg-target.c | 5 + tcg/i386/tcg-target.h | 2 +- tcg/ia64/tcg-target.c | 4 + tcg/ia64/tcg-target.h | 2 +- tcg/optimize.c | 246 ++++++++++++++++++++++------------------------- tcg/ppc/tcg-target.c | 6 ++ tcg/ppc/tcg-target.h | 2 +- tcg/s390/tcg-target.c | 5 + tcg/s390/tcg-target.h | 2 +- tcg/sparc/tcg-target.c | 12 ++- tcg/sparc/tcg-target.h | 2 +- tcg/tcg-op.c | 16 ++- tcg/tcg-opc.h | 7 +- tcg/tcg.h | 2 +- tcg/tci/tcg-target.c | 4 + tcg/tci/tcg-target.h | 2 +- tci.c | 6 +- 20 files changed, 193 insertions(+), 158 deletions(-) -- 2.1.4