From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40389) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bG8yc-0001iE-G7 for qemu-devel@nongnu.org; Thu, 23 Jun 2016 14:03:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bG8yW-0000Bj-Gt for qemu-devel@nongnu.org; Thu, 23 Jun 2016 14:03:42 -0400 Received: from mail-qk0-x241.google.com ([2607:f8b0:400d:c09::241]:35759) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bG8yW-0000Bc-Bi for qemu-devel@nongnu.org; Thu, 23 Jun 2016 14:03:36 -0400 Received: by mail-qk0-x241.google.com with SMTP id b136so17150757qkg.2 for ; Thu, 23 Jun 2016 11:03:36 -0700 (PDT) Sender: Richard Henderson From: Richard Henderson Date: Thu, 23 Jun 2016 11:03:01 -0700 Message-Id: <1466704982-5919-4-git-send-email-rth@twiddle.net> In-Reply-To: <1466704982-5919-1-git-send-email-rth@twiddle.net> References: <1466704982-5919-1-git-send-email-rth@twiddle.net> Subject: [Qemu-devel] [PATCH 3/4] tcg: Fold life data into TCGOp List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aurelien@aurel32.net Reduce the size of other bitfields to make room. This reduces the cache footprint of compilation. Signed-off-by: Richard Henderson --- tcg/tcg.c | 9 +++------ tcg/tcg.h | 26 ++++++++++++++------------ 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/tcg/tcg.c b/tcg/tcg.c index 3e884e4..b0c9dca 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -1329,10 +1329,7 @@ static inline void tcg_la_bb_end(TCGContext *s, uint8_t *dead_temps, static void tcg_liveness_analysis(TCGContext *s) { uint8_t *dead_temps, *mem_temps; - int oi, oi_prev, nb_ops; - - nb_ops = s->gen_next_op_idx; - s->op_arg_life = tcg_malloc(nb_ops * sizeof(TCGLifeData)); + int oi, oi_prev; dead_temps = tcg_malloc(s->nb_temps); mem_temps = tcg_malloc(s->nb_temps); @@ -1555,7 +1552,7 @@ static void tcg_liveness_analysis(TCGContext *s) } break; } - s->op_arg_life[oi] = arg_life; + op->life = arg_life; } } #else @@ -2397,7 +2394,7 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) TCGArg * const args = &s->gen_opparam_buf[op->args]; TCGOpcode opc = op->opc; const TCGOpDef *def = &tcg_op_defs[opc]; - TCGLifeData arg_life = s->op_arg_life[oi]; + TCGLifeData arg_life = op->life; oi_next = op->next; #ifdef CONFIG_PROFILER diff --git a/tcg/tcg.h b/tcg/tcg.h index 49b396d..2ff3ad2 100644 --- a/tcg/tcg.h +++ b/tcg/tcg.h @@ -513,25 +513,30 @@ typedef struct TCGTempSet { #define SYNC_ARG 1 typedef uint16_t TCGLifeData; +/* The layout here is designed to avoid crossing of a 32-bit boundary. + If we do so, gcc adds padding, expanding the size to 12. */ typedef struct TCGOp { - TCGOpcode opc : 8; + TCGOpcode opc : 8; /* 8 */ + + /* Index of the prex/next op, or 0 for the end of the list. */ + unsigned prev : 10; /* 18 */ + unsigned next : 10; /* 28 */ /* The number of out and in parameter for a call. */ - unsigned callo : 2; - unsigned calli : 6; + unsigned calli : 4; /* 32 */ + unsigned callo : 2; /* 34 */ /* Index of the arguments for this op, or 0 for zero-operand ops. */ - unsigned args : 16; + unsigned args : 14; /* 48 */ - /* Index of the prex/next op, or 0 for the end of the list. */ - unsigned prev : 16; - unsigned next : 16; + /* Lifetime data of the operands. */ + unsigned life : 16; /* 64 */ } TCGOp; /* Make sure operands fit in the bitfields above. */ QEMU_BUILD_BUG_ON(NB_OPS > (1 << 8)); -QEMU_BUILD_BUG_ON(OPC_BUF_SIZE > (1 << 16)); -QEMU_BUILD_BUG_ON(OPPARAM_BUF_SIZE > (1 << 16)); +QEMU_BUILD_BUG_ON(OPC_BUF_SIZE > (1 << 10)); +QEMU_BUILD_BUG_ON(OPPARAM_BUF_SIZE > (1 << 14)); /* Make sure that we don't overflow 64 bits without noticing. */ QEMU_BUILD_BUG_ON(sizeof(TCGOp) > 8); @@ -549,9 +554,6 @@ struct TCGContext { uint16_t *tb_jmp_insn_offset; /* tb->jmp_insn_offset if USE_DIRECT_JUMP */ uintptr_t *tb_jmp_target_addr; /* tb->jmp_target_addr if !USE_DIRECT_JUMP */ - /* liveness analysis */ - TCGLifeData *op_arg_life; - TCGRegSet reserved_regs; intptr_t current_frame_offset; intptr_t frame_start; -- 2.5.5