All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, cota@braap.org
Subject: [PATCH 00/27] tcg: Simplify temporary usage
Date: Mon, 30 Jan 2023 10:59:07 -1000	[thread overview]
Message-ID: <20230130205935.1157347-1-richard.henderson@linaro.org> (raw)

Based-on: 20230126043824.54819-1-richard.henderson@linaro.org
("[PATCH v5 00/36] tcg: Support for Int128 with helpers")

The biggest pitfall for new users of TCG is the fact that "normal"
temporaries die at branches, and we must therefore use a different
"local" temporary in that case.

The following patch set changes that, so that the "normal" temporary
is the one that lives across branches, and there is a special temporary
that dies at the end of the extended basic block, and this special
case is reserved for tcg internals.

TEMP_LOCAL is renamed TEMP_TB, which I believe to be more explicit and
less confusing.  TEMP_NORMAL is removed entirely.

I thought about putting in a proper full-power liveness analysis pass.
This would have eliminated the differences between all non-global
temporaries, and would have noticed when TEMP_LOCAL finally dies
within a translation and avoid any final writeback.
But I came to the conclusion that it was too expensive in runtime,
and so retaining some distinction in the types was required.

In addition, I found that the usage of temps within plugin-gen.c
(9 per guest memory operation) meant that we *must* have some form
of temp that can be re-used.  (There is one x86 instruction which
generates 62 memory operations; 62 * 9 == 558, which is larger than
our current TCG_MAX_TEMPS.)

However I did add a new liveness pass which, with a single pass over
the opcode stream, can see that a TEMP_LOCAL is only live within a
single extended basic block, and thus may be transformed to TEMP_EBB.

With this, and by not recycling TEMP_LOCAL, we can get identical code
out of the backend even when changing the front end translators are
adjusted to use TEMP_LOCAL for everything.

Benchmarking one test case, qemu-arm linux-test, the new liveness pass
comes in at about 1.6% on perf, but I can't see any difference in
wall clock time before and after the patch set.


r~


Richard Henderson (27):
  tcg: Adjust TCGContext.temps_in_use check
  accel/tcg: Pass max_insn to gen_intermediate_code by pointer
  accel/tcg: Use more accurate max_insns for tb_overflow
  tcg: Remove branch-to-next regardless of reference count
  tcg: Rename TEMP_LOCAL to TEMP_TB
  tcg: Add liveness_pass_0
  tcg: Remove TEMP_NORMAL
  tcg: Pass TCGTempKind to tcg_temp_new_internal
  tcg: Add tcg_temp_ebb_new_{i32,i64,ptr}
  tcg: Add tcg_gen_movi_ptr
  tcg: Use tcg_temp_ebb_new_* in tcg/
  accel/tcg/plugin: Use tcg_temp_ebb_*
  accel/tcg/plugin: Tidy plugin_gen_disable_mem_helpers
  tcg: Don't re-use TEMP_TB temporaries
  tcg: Change default temp lifetime to TEMP_TB
  target/arm: Drop copies in gen_sve_{ldr,str}
  target/arm: Don't use tcg_temp_local_new_*
  target/cris: Don't use tcg_temp_local_new
  target/hexagon: Don't use tcg_temp_local_new_*
  target/hppa: Don't use tcg_temp_local_new
  target/i386: Don't use tcg_temp_local_new
  target/mips: Don't use tcg_temp_local_new
  target/ppc: Don't use tcg_temp_local_new
  target/xtensa: Don't use tcg_temp_local_new_*
  exec/gen-icount: Don't use tcg_temp_local_new_i32
  tcg: Remove tcg_temp_local_new_*, tcg_const_local_*
  tcg: Update docs/devel/tcg-ops.rst for temporary changes

 docs/devel/tcg-ops.rst                      | 103 ++++----
 target/hexagon/idef-parser/README.rst       |   4 +-
 include/exec/gen-icount.h                   |   8 +-
 include/exec/translator.h                   |   4 +-
 include/tcg/tcg-op.h                        |   7 +-
 include/tcg/tcg.h                           |  64 ++---
 target/arm/translate-a64.h                  |   1 -
 target/hexagon/gen_tcg.h                    |   4 +-
 accel/tcg/plugin-gen.c                      |  33 +--
 accel/tcg/translate-all.c                   |   2 +-
 accel/tcg/translator.c                      |   6 +-
 target/alpha/translate.c                    |   2 +-
 target/arm/translate-a64.c                  |   6 -
 target/arm/translate-sve.c                  |  38 +--
 target/arm/translate.c                      |   8 +-
 target/avr/translate.c                      |   2 +-
 target/cris/translate.c                     |   8 +-
 target/hexagon/genptr.c                     |  16 +-
 target/hexagon/idef-parser/parser-helpers.c |   4 +-
 target/hexagon/translate.c                  |   4 +-
 target/hppa/translate.c                     |   5 +-
 target/i386/tcg/translate.c                 |  29 +--
 target/loongarch/translate.c                |   2 +-
 target/m68k/translate.c                     |   2 +-
 target/microblaze/translate.c               |   2 +-
 target/mips/tcg/translate.c                 |  59 ++---
 target/nios2/translate.c                    |   2 +-
 target/openrisc/translate.c                 |   2 +-
 target/ppc/translate.c                      |   8 +-
 target/riscv/translate.c                    |   2 +-
 target/rx/translate.c                       |   2 +-
 target/s390x/tcg/translate.c                |   2 +-
 target/sh4/translate.c                      |   2 +-
 target/sparc/translate.c                    |   2 +-
 target/tricore/translate.c                  |   2 +-
 target/xtensa/translate.c                   |  18 +-
 tcg/optimize.c                              |   2 +-
 tcg/tcg-op-gvec.c                           | 270 ++++++++++----------
 tcg/tcg-op.c                                | 258 +++++++++----------
 tcg/tcg.c                                   | 270 +++++++++++---------
 target/cris/translate_v10.c.inc             |  10 +-
 target/mips/tcg/nanomips_translate.c.inc    |   4 +-
 target/ppc/translate/spe-impl.c.inc         |   8 +-
 target/ppc/translate/vmx-impl.c.inc         |   4 +-
 target/hexagon/README                       |   8 +-
 target/hexagon/gen_tcg_funcs.py             |  18 +-
 46 files changed, 640 insertions(+), 677 deletions(-)

-- 
2.34.1



             reply	other threads:[~2023-01-30 21:02 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-30 20:59 Richard Henderson [this message]
2023-01-30 20:59 ` [PATCH] target/arm: Fix physical address resolution for Stage2 Richard Henderson
2023-01-30 21:00   ` Richard Henderson
2023-01-30 20:59 ` [PATCH 01/27] tcg: Adjust TCGContext.temps_in_use check Richard Henderson
2023-01-30 23:30   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 02/27] accel/tcg: Pass max_insn to gen_intermediate_code by pointer Richard Henderson
2023-02-16  7:24   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 03/27] accel/tcg: Use more accurate max_insns for tb_overflow Richard Henderson
2023-01-30 20:59 ` [PATCH 04/27] tcg: Remove branch-to-next regardless of reference count Richard Henderson
2023-01-30 20:59 ` [PATCH 05/27] tcg: Rename TEMP_LOCAL to TEMP_TB Richard Henderson
2023-01-30 23:34   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 06/27] tcg: Add liveness_pass_0 Richard Henderson
2023-01-30 20:59 ` [PATCH 07/27] tcg: Remove TEMP_NORMAL Richard Henderson
2023-01-30 23:36   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 08/27] tcg: Pass TCGTempKind to tcg_temp_new_internal Richard Henderson
2023-01-30 23:36   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 09/27] tcg: Add tcg_temp_ebb_new_{i32,i64,ptr} Richard Henderson
2023-01-30 23:59   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 10/27] tcg: Add tcg_gen_movi_ptr Richard Henderson
2023-02-16  7:15   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 11/27] tcg: Use tcg_temp_ebb_new_* in tcg/ Richard Henderson
2023-01-30 23:59   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 12/27] accel/tcg/plugin: Use tcg_temp_ebb_* Richard Henderson
2023-02-16  7:22   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 13/27] accel/tcg/plugin: Tidy plugin_gen_disable_mem_helpers Richard Henderson
2023-01-30 23:39   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 14/27] tcg: Don't re-use TEMP_TB temporaries Richard Henderson
2023-01-30 20:59 ` [PATCH 15/27] tcg: Change default temp lifetime to TEMP_TB Richard Henderson
2023-01-30 23:52   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 16/27] target/arm: Drop copies in gen_sve_{ldr,str} Richard Henderson
2023-01-30 20:59 ` [PATCH 17/27] target/arm: Don't use tcg_temp_local_new_* Richard Henderson
2023-01-30 23:44   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 18/27] target/cris: Don't use tcg_temp_local_new Richard Henderson
2023-01-30 23:43   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 19/27] target/hexagon: Don't use tcg_temp_local_new_* Richard Henderson
2023-01-30 23:43   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 20/27] target/hppa: Don't use tcg_temp_local_new Richard Henderson
2023-01-30 23:41   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 21/27] target/i386: " Richard Henderson
2023-02-16  7:13   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 22/27] target/mips: " Richard Henderson
2023-01-30 23:42   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 23/27] target/ppc: " Richard Henderson
2023-01-30 23:43   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 24/27] target/xtensa: Don't use tcg_temp_local_new_* Richard Henderson
2023-01-30 23:44   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 25/27] exec/gen-icount: Don't use tcg_temp_local_new_i32 Richard Henderson
2023-01-30 23:45   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 26/27] tcg: Remove tcg_temp_local_new_*, tcg_const_local_* Richard Henderson
2023-01-30 23:45   ` Philippe Mathieu-Daudé
2023-01-30 20:59 ` [PATCH 27/27] tcg: Update docs/devel/tcg-ops.rst for temporary changes Richard Henderson
2023-02-10 12:35 ` [PATCH 00/27] tcg: Simplify temporary usage Emilio Cota
2023-02-16  6:15   ` Richard Henderson
2023-03-01 12:11     ` Emilio Cota
2023-02-16  6:11 ` Richard Henderson

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=20230130205935.1157347-1-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=cota@braap.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.