qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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



  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).