qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 30/46] tcg/optimize: Distinguish simplification in fold_setco


From: Pierrick Bouvier
Subject: Re: [PATCH 30/46] tcg/optimize: Distinguish simplification in fold_setcond_zmask
Date: Tue, 17 Dec 2024 12:38:56 -0800
User-agent: Mozilla Thunderbird

On 12/10/24 07:23, Richard Henderson wrote:
Change return from bool to int; distinguish between
complete folding, simplification, and no change.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
  tcg/optimize.c | 22 ++++++++++++++--------
  1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index eac5ef5eec..7b1d437c27 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -2137,7 +2137,8 @@ static bool fold_remainder(OptContext *ctx, TCGOp *op)
      return finish_folding(ctx, op);
  }
-static bool fold_setcond_zmask(OptContext *ctx, TCGOp *op, bool neg)
+/* Return 1 if finished, -1 if simplified, 0 if unchanged. */
+static int fold_setcond_zmask(OptContext *ctx, TCGOp *op, bool neg)
  {
      uint64_t a_zmask, b_val;
      TCGCond cond;
@@ -2232,11 +2233,10 @@ static bool fold_setcond_zmask(OptContext *ctx, TCGOp 
*op, bool neg)
                  op->opc = xor_opc;
                  op->args[2] = arg_new_constant(ctx, 1);
              }
-            return false;
+            return -1;
          }
      }
-
-    return false;
+    return 0;
  }
static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
@@ -2341,10 +2341,13 @@ static bool fold_setcond(OptContext *ctx, TCGOp *op)
          return tcg_opt_gen_movi(ctx, op, op->args[0], i);
      }
- if (fold_setcond_zmask(ctx, op, false)) {
+    i = fold_setcond_zmask(ctx, op, false);
+    if (i > 0) {
          return true;
      }
-    fold_setcond_tst_pow2(ctx, op, false);
+    if (i == 0) {
+        fold_setcond_tst_pow2(ctx, op, false);
+    }
ctx->z_mask = 1;
      ctx->s_mask = smask_from_zmask(1);
@@ -2359,10 +2362,13 @@ static bool fold_negsetcond(OptContext *ctx, TCGOp *op)
          return tcg_opt_gen_movi(ctx, op, op->args[0], -i);
      }
- if (fold_setcond_zmask(ctx, op, true)) {
+    i = fold_setcond_zmask(ctx, op, true);
+    if (i > 0) {
          return true;
      }
-    fold_setcond_tst_pow2(ctx, op, true);
+    if (i == 0) {
+        fold_setcond_tst_pow2(ctx, op, true);
+    }
/* Value is {0,-1} so all bits are repetitions of the sign. */
      ctx->s_mask = -1;

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]