summary refs log tree commit diff stats
path: root/tcg/optimize.c
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2025-01-06 22:06:08 -0800
committerRichard Henderson <richard.henderson@linaro.org>2025-04-28 13:40:15 -0700
commit93a9ddb84ae534a04e8d7764caa9e29b8285b2b1 (patch)
tree6b7a0e3a7b35546b6d3dbc5ba4858bdac6181b98 /tcg/optimize.c
parent899281c8f589cce55951e13307661a7253eb4909 (diff)
downloadfocaccia-qemu-93a9ddb84ae534a04e8d7764caa9e29b8285b2b1.tar.gz
focaccia-qemu-93a9ddb84ae534a04e8d7764caa9e29b8285b2b1.zip
tcg/optimize: Emit add r,r,-1 in fold_setcond_tst_pow2
We canonicalize subtract with constant to add with constant.
Fix this missed instance.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'tcg/optimize.c')
-rw-r--r--tcg/optimize.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/tcg/optimize.c b/tcg/optimize.c
index 1f6fdee734..6c7b6af624 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -2301,7 +2301,7 @@ static int fold_setcond_zmask(OptContext *ctx, TCGOp *op, bool neg)
 
 static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
 {
-    TCGOpcode sub_opc, xor_opc, neg_opc, shr_opc;
+    TCGOpcode xor_opc, neg_opc, shr_opc;
     TCGOpcode uext_opc = 0, sext_opc = 0;
     TCGCond cond = op->args[3];
     TCGArg ret, src1, src2;
@@ -2323,7 +2323,6 @@ static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
 
     switch (ctx->type) {
     case TCG_TYPE_I32:
-        sub_opc = INDEX_op_sub_i32;
         xor_opc = INDEX_op_xor_i32;
         shr_opc = INDEX_op_shr_i32;
         neg_opc = INDEX_op_neg_i32;
@@ -2335,7 +2334,6 @@ static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
         }
         break;
     case TCG_TYPE_I64:
-        sub_opc = INDEX_op_sub_i64;
         xor_opc = INDEX_op_xor_i64;
         shr_opc = INDEX_op_shr_i64;
         neg_opc = INDEX_op_neg_i64;
@@ -2379,10 +2377,10 @@ static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
     }
 
     if (neg && inv) {
-        op2 = opt_insert_after(ctx, op, sub_opc, 3);
+        op2 = opt_insert_after(ctx, op, INDEX_op_add, 3);
         op2->args[0] = ret;
         op2->args[1] = ret;
-        op2->args[2] = arg_new_constant(ctx, 1);
+        op2->args[2] = arg_new_constant(ctx, -1);
     } else if (inv) {
         op2 = opt_insert_after(ctx, op, xor_opc, 3);
         op2->args[0] = ret;