From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org
Subject: [PATCH v3 07/30] tcg: Add liveness_pass_0
Date: Fri, 24 Feb 2023 22:59:22 -1000 [thread overview]
Message-ID: <20230225085945.1798188-8-richard.henderson@linaro.org> (raw)
In-Reply-To: <20230225085945.1798188-1-richard.henderson@linaro.org>
Attempt to reduce the lifetime of TEMP_TB.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
tcg/tcg.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 70 insertions(+)
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 7ee935701a..6646770268 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -2858,6 +2858,75 @@ static void la_cross_call(TCGContext *s, int nt)
}
}
+/*
+ * Liveness analysis: Verify the lifetime of TEMP_TB, and reduce
+ * to TEMP_EBB, if possible.
+ */
+static void __attribute__((noinline))
+liveness_pass_0(TCGContext *s)
+{
+ void * const multiple_ebb = (void *)(uintptr_t)-1;
+ int nb_temps = s->nb_temps;
+ TCGOp *op, *ebb;
+
+ for (int i = s->nb_globals; i < nb_temps; ++i) {
+ s->temps[i].state_ptr = NULL;
+ }
+
+ /*
+ * Represent each EBB by the op at which it begins. In the case of
+ * the first EBB, this is the first op, otherwise it is a label.
+ * Collect the uses of each TEMP_TB: NULL for unused, EBB for use
+ * within a single EBB, else MULTIPLE_EBB.
+ */
+ ebb = QTAILQ_FIRST(&s->ops);
+ QTAILQ_FOREACH(op, &s->ops, link) {
+ const TCGOpDef *def;
+ int nb_oargs, nb_iargs;
+
+ switch (op->opc) {
+ case INDEX_op_set_label:
+ ebb = op;
+ continue;
+ case INDEX_op_discard:
+ continue;
+ case INDEX_op_call:
+ nb_oargs = TCGOP_CALLO(op);
+ nb_iargs = TCGOP_CALLI(op);
+ break;
+ default:
+ def = &tcg_op_defs[op->opc];
+ nb_oargs = def->nb_oargs;
+ nb_iargs = def->nb_iargs;
+ break;
+ }
+
+ for (int i = 0; i < nb_oargs + nb_iargs; ++i) {
+ TCGTemp *ts = arg_temp(op->args[i]);
+
+ if (ts->kind != TEMP_TB) {
+ continue;
+ }
+ if (ts->state_ptr == NULL) {
+ ts->state_ptr = ebb;
+ } else if (ts->state_ptr != ebb) {
+ ts->state_ptr = multiple_ebb;
+ }
+ }
+ }
+
+ /*
+ * For TEMP_TB that turned out not to be used beyond one EBB,
+ * reduce the liveness to TEMP_EBB.
+ */
+ for (int i = s->nb_globals; i < nb_temps; ++i) {
+ TCGTemp *ts = &s->temps[i];
+ if (ts->kind == TEMP_TB && ts->state_ptr != multiple_ebb) {
+ ts->kind = TEMP_EBB;
+ }
+ }
+}
+
/* Liveness analysis : update the opc_arg_life array to tell if a
given input arguments is dead. Instructions updating dead
temporaries are removed. */
@@ -4873,6 +4942,7 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb, target_ulong pc_start)
#endif
reachable_code_pass(s);
+ liveness_pass_0(s);
liveness_pass_1(s);
if (s->nb_indirects > 0) {
--
2.34.1
next prev parent reply other threads:[~2023-02-25 9:04 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-25 8:59 [PATCH v3 00/30] tcg: Simplify temporary usage Richard Henderson
2023-02-25 8:59 ` [PATCH v3 01/30] tcg: Adjust TCGContext.temps_in_use check Richard Henderson
2023-02-25 8:59 ` [PATCH v3 02/30] accel/tcg: Pass max_insn to gen_intermediate_code by pointer Richard Henderson
2023-02-25 8:59 ` [PATCH v3 03/30] accel/tcg: Use more accurate max_insns for tb_overflow Richard Henderson
2023-02-25 8:59 ` [PATCH v3 04/30] tcg: Remove branch-to-next regardless of reference count Richard Henderson
2023-02-25 8:59 ` [PATCH v3 05/30] tcg: Rename TEMP_LOCAL to TEMP_TB Richard Henderson
2023-02-25 8:59 ` [PATCH v3 06/30] tcg: Use noinline for major tcg_gen_code subroutines Richard Henderson
2023-02-25 8:59 ` Richard Henderson [this message]
2023-02-25 8:59 ` [PATCH v3 08/30] tcg: Remove TEMP_NORMAL Richard Henderson
2023-02-25 8:59 ` [PATCH v3 09/30] tcg: Pass TCGTempKind to tcg_temp_new_internal Richard Henderson
2023-02-25 8:59 ` [PATCH v3 10/30] tcg: Use tcg_constant_i32 in tcg_gen_io_start Richard Henderson
2023-02-25 9:34 ` Daniel Henrique Barboza
2023-02-25 9:57 ` Philippe Mathieu-Daudé
2023-02-25 8:59 ` [PATCH v3 11/30] tcg: Add tcg_gen_movi_ptr Richard Henderson
2023-02-25 8:59 ` [PATCH v3 12/30] tcg: Add tcg_temp_ebb_new_{i32,i64,ptr} Richard Henderson
2023-02-25 8:59 ` [PATCH v3 13/30] tcg: Use tcg_temp_ebb_new_* in tcg/ Richard Henderson
2023-02-25 8:59 ` [PATCH v3 14/30] tcg: Use tcg_constant_ptr in do_dup Richard Henderson
2023-02-25 9:35 ` Daniel Henrique Barboza
2023-02-25 9:53 ` Philippe Mathieu-Daudé
2023-02-25 10:01 ` Richard Henderson
2023-02-25 8:59 ` [PATCH v3 15/30] accel/tcg/plugin: Use tcg_temp_ebb_* Richard Henderson
2023-02-25 8:59 ` [PATCH v3 16/30] accel/tcg/plugin: Tidy plugin_gen_disable_mem_helpers Richard Henderson
2023-02-25 8:59 ` [PATCH v3 17/30] tcg: Don't re-use TEMP_TB temporaries Richard Henderson
2023-02-25 8:59 ` [PATCH v3 18/30] tcg: Change default temp lifetime to TEMP_TB Richard Henderson
2023-02-25 8:59 ` [PATCH v3 19/30] target/arm: Drop copies in gen_sve_{ldr,str} Richard Henderson
2023-02-25 8:59 ` [PATCH v3 20/30] target/arm: Don't use tcg_temp_local_new_* Richard Henderson
2023-02-25 10:05 ` Philippe Mathieu-Daudé
2023-02-25 10:09 ` Richard Henderson
2023-02-25 10:13 ` Philippe Mathieu-Daudé
2023-02-25 8:59 ` [PATCH v3 21/30] target/cris: Don't use tcg_temp_local_new Richard Henderson
2023-02-25 8:59 ` [PATCH v3 22/30] target/hexagon: Don't use tcg_temp_local_new_* Richard Henderson
2023-02-25 8:59 ` [PATCH v3 23/30] target/hppa: Don't use tcg_temp_local_new Richard Henderson
2023-02-25 8:59 ` [PATCH v3 24/30] target/i386: " Richard Henderson
2023-02-25 8:59 ` [PATCH v3 25/30] target/mips: " Richard Henderson
2023-02-25 8:59 ` [PATCH v3 26/30] target/ppc: " Richard Henderson
2023-02-25 8:59 ` [PATCH v3 27/30] target/xtensa: Don't use tcg_temp_local_new_* Richard Henderson
2023-02-25 8:59 ` [PATCH v3 28/30] exec/gen-icount: Don't use tcg_temp_local_new_i32 Richard Henderson
2023-02-25 8:59 ` [PATCH v3 29/30] tcg: Remove tcg_temp_local_new_*, tcg_const_local_* Richard Henderson
2023-02-25 8:59 ` [PATCH v3 30/30] tcg: Update docs/devel/tcg-ops.rst for temporary changes Richard Henderson
2023-02-25 9:54 ` Daniel Henrique Barboza
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230225085945.1798188-8-richard.henderson@linaro.org \
--to=richard.henderson@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).