tcg/optimize: Propagate sign info for bit counting
authorRichard Henderson <richard.henderson@linaro.org>
Thu, 26 Aug 2021 20:24:17 +0000 (13:24 -0700)
committerRichard Henderson <richard.henderson@linaro.org>
Fri, 29 Oct 2021 03:55:07 +0000 (20:55 -0700)
The results are generally 6 bit unsigned values, though
the count leading and trailing bits may produce any value
for a zero input.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
tcg/optimize.c

index 5fa4d7285d51ffd85ba15545a762dda3211decde..c0eccc61d6218d8ed51ab8edc6e2a7a311557c94 100644 (file)
@@ -1229,7 +1229,7 @@ static bool fold_count_zeros(OptContext *ctx, TCGOp *op)
         g_assert_not_reached();
     }
     ctx->z_mask = arg_info(op->args[2])->z_mask | z_mask;
-
+    ctx->s_mask = smask_from_zmask(ctx->z_mask);
     return false;
 }
 
@@ -1249,6 +1249,7 @@ static bool fold_ctpop(OptContext *ctx, TCGOp *op)
     default:
         g_assert_not_reached();
     }
+    ctx->s_mask = smask_from_zmask(ctx->z_mask);
     return false;
 }