qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Alex Bennée" <alex.bennee@linaro.org>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: [PATCH v5 04/23] tcg: Add temp_readonly
Date: Thu, 17 Dec 2020 08:51:56 -0600	[thread overview]
Message-ID: <20201217145215.534637-5-richard.henderson@linaro.org> (raw)
In-Reply-To: <20201217145215.534637-1-richard.henderson@linaro.org>

In most, but not all, places that we check for TEMP_FIXED,
we are really testing that we do not modify the temporary.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 include/tcg/tcg.h |  5 +++++
 tcg/tcg.c         | 21 ++++++++++-----------
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
index 30bd525d83..9a9ced3b15 100644
--- a/include/tcg/tcg.h
+++ b/include/tcg/tcg.h
@@ -681,6 +681,11 @@ struct TCGContext {
     target_ulong gen_insn_data[TCG_MAX_INSNS][TARGET_INSN_START_WORDS];
 };
 
+static inline bool temp_readonly(TCGTemp *ts)
+{
+    return ts->kind == TEMP_FIXED;
+}
+
 extern TCGContext tcg_init_ctx;
 extern __thread TCGContext *tcg_ctx;
 extern TCGv_env cpu_env;
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 07a25e59b6..54619c1cbc 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -3200,7 +3200,7 @@ static void temp_load(TCGContext *, TCGTemp *, TCGRegSet, TCGRegSet, TCGRegSet);
    mark it free; otherwise mark it dead.  */
 static void temp_free_or_dead(TCGContext *s, TCGTemp *ts, int free_or_dead)
 {
-    if (ts->kind == TEMP_FIXED) {
+    if (temp_readonly(ts)) {
         return;
     }
     if (ts->val_type == TEMP_VAL_REG) {
@@ -3224,7 +3224,7 @@ static inline void temp_dead(TCGContext *s, TCGTemp *ts)
 static void temp_sync(TCGContext *s, TCGTemp *ts, TCGRegSet allocated_regs,
                       TCGRegSet preferred_regs, int free_or_dead)
 {
-    if (ts->kind == TEMP_FIXED) {
+    if (temp_readonly(ts)) {
         return;
     }
     if (!ts->mem_coherent) {
@@ -3407,8 +3407,7 @@ static void temp_save(TCGContext *s, TCGTemp *ts, TCGRegSet allocated_regs)
 {
     /* The liveness analysis already ensures that globals are back
        in memory. Keep an tcg_debug_assert for safety. */
-    tcg_debug_assert(ts->val_type == TEMP_VAL_MEM
-                     || ts->kind == TEMP_FIXED);
+    tcg_debug_assert(ts->val_type == TEMP_VAL_MEM || temp_readonly(ts));
 }
 
 /* save globals to their canonical location and assume they can be
@@ -3488,7 +3487,7 @@ static void tcg_reg_alloc_do_movi(TCGContext *s, TCGTemp *ots,
                                   TCGRegSet preferred_regs)
 {
     /* ENV should not be modified.  */
-    tcg_debug_assert(ots->kind != TEMP_FIXED);
+    tcg_debug_assert(!temp_readonly(ots));
 
     /* The movi is not explicitly generated here.  */
     if (ots->val_type == TEMP_VAL_REG) {
@@ -3528,7 +3527,7 @@ static void tcg_reg_alloc_mov(TCGContext *s, const TCGOp *op)
     ts = arg_temp(op->args[1]);
 
     /* ENV should not be modified.  */
-    tcg_debug_assert(ots->kind != TEMP_FIXED);
+    tcg_debug_assert(!temp_readonly(ots));
 
     /* Note that otype != itype for no-op truncation.  */
     otype = ots->type;
@@ -3589,7 +3588,7 @@ static void tcg_reg_alloc_mov(TCGContext *s, const TCGOp *op)
                  * Store the source register into the destination slot
                  * and leave the destination temp as TEMP_VAL_MEM.
                  */
-                assert(ots->kind != TEMP_FIXED);
+                assert(!temp_readonly(ots));
                 if (!ts->mem_allocated) {
                     temp_allocate_frame(s, ots);
                 }
@@ -3626,7 +3625,7 @@ static void tcg_reg_alloc_dup(TCGContext *s, const TCGOp *op)
     its = arg_temp(op->args[1]);
 
     /* ENV should not be modified.  */
-    tcg_debug_assert(ots->kind != TEMP_FIXED);
+    tcg_debug_assert(!temp_readonly(ots));
 
     itype = its->type;
     vece = TCGOP_VECE(op);
@@ -3858,7 +3857,7 @@ static void tcg_reg_alloc_op(TCGContext *s, const TCGOp *op)
             ts = arg_temp(arg);
 
             /* ENV should not be modified.  */
-            tcg_debug_assert(ts->kind != TEMP_FIXED);
+            tcg_debug_assert(!temp_readonly(ts));
 
             if (arg_ct->oalias && !const_args[arg_ct->alias_index]) {
                 reg = new_args[arg_ct->alias_index];
@@ -3899,7 +3898,7 @@ static void tcg_reg_alloc_op(TCGContext *s, const TCGOp *op)
         ts = arg_temp(op->args[i]);
 
         /* ENV should not be modified.  */
-        tcg_debug_assert(ts->kind != TEMP_FIXED);
+        tcg_debug_assert(!temp_readonly(ts));
 
         if (NEED_SYNC_ARG(i)) {
             temp_sync(s, ts, o_allocated_regs, 0, IS_DEAD_ARG(i));
@@ -4031,7 +4030,7 @@ static void tcg_reg_alloc_call(TCGContext *s, TCGOp *op)
         ts = arg_temp(arg);
 
         /* ENV should not be modified.  */
-        tcg_debug_assert(ts->kind != TEMP_FIXED);
+        tcg_debug_assert(!temp_readonly(ts));
 
         reg = tcg_target_call_oarg_regs[i];
         tcg_debug_assert(s->reg_to_temp[reg] == NULL);
-- 
2.25.1



  parent reply	other threads:[~2020-12-17 15:09 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-17 14:51 [PATCH v5 00/23] tcg: Better handling of constants Richard Henderson
2020-12-17 14:51 ` [PATCH v5 01/23] tcg: Use tcg_out_dupi_vec from temp_load Richard Henderson
2020-12-17 14:51 ` [PATCH v5 02/23] tcg: Increase tcg_out_dupi_vec immediate to int64_t Richard Henderson
2020-12-17 14:51 ` [PATCH v5 03/23] tcg: Consolidate 3 bits into enum TCGTempKind Richard Henderson
2020-12-17 14:51 ` Richard Henderson [this message]
2020-12-17 14:51 ` [PATCH v5 05/23] tcg: Expand TCGTemp.val to 64-bits Richard Henderson
2020-12-17 14:51 ` [PATCH v5 06/23] tcg: Rename struct tcg_temp_info to TempOptInfo Richard Henderson
2020-12-17 14:51 ` [PATCH v5 07/23] tcg: Expand TempOptInfo to 64-bits Richard Henderson
2020-12-17 14:52 ` [PATCH v5 08/23] tcg: Introduce TYPE_CONST temporaries Richard Henderson
2020-12-17 14:52 ` [PATCH v5 09/23] tcg/optimize: Improve find_better_copy Richard Henderson
2020-12-17 14:52 ` [PATCH v5 10/23] tcg/optimize: Adjust TempOptInfo allocation Richard Henderson
2020-12-17 14:52 ` [PATCH v5 11/23] tcg/optimize: Use tcg_constant_internal with constant folding Richard Henderson
2020-12-17 14:52 ` [PATCH v5 12/23] tcg: Convert tcg_gen_dupi_vec to TCG_CONST Richard Henderson
2020-12-17 14:52 ` [PATCH v5 13/23] tcg: Use tcg_constant_i32 with icount expander Richard Henderson
2020-12-17 14:52 ` [PATCH v5 14/23] tcg: Use tcg_constant_{i32, i64} with tcg int expanders Richard Henderson
2020-12-17 14:52 ` [PATCH v5 15/23] tcg: Use tcg_constant_{i32,i64} with tcg plugins Richard Henderson
2020-12-17 14:52 ` [PATCH v5 16/23] tcg: Use tcg_constant_{i32, i64, vec} with gvec expanders Richard Henderson
2020-12-17 14:52 ` [PATCH v5 17/23] tcg/tci: Add special tci_movi_{i32,i64} opcodes Richard Henderson
2020-12-17 14:52 ` [PATCH v5 18/23] tcg: Remove movi and dupi opcodes Richard Henderson
2020-12-17 14:52 ` [PATCH v5 19/23] tcg: Add tcg_reg_alloc_dup2 Richard Henderson
2020-12-17 14:52 ` [PATCH v5 20/23] tcg/i386: Use tcg_constant_vec with tcg vec expanders Richard Henderson
2020-12-17 14:52 ` [PATCH v5 21/23] tcg: Remove tcg_gen_dup{8,16,32,64}i_vec Richard Henderson
2020-12-17 14:52 ` [PATCH v5 22/23] tcg/ppc: Use tcg_constant_vec with tcg vec expanders Richard Henderson
2020-12-17 14:52 ` [PATCH v5 23/23] tcg/aarch64: " 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=20201217145215.534637-5-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=alex.bennee@linaro.org \
    --cc=f4bug@amsat.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).