[PATCH v2 35/51] tcg/optimize: Fix sign mask in fold_negsetcond

Richard Henderson posted 51 patches 3 days, 19 hours ago
There is a newer version of this series
[PATCH v2 35/51] tcg/optimize: Fix sign mask in fold_negsetcond
Posted by Richard Henderson 3 days, 19 hours ago
The sign mask is about repetitions, a la clrsb64(), so the lsb
itself can never be a repetition.  Thus ~1 not -1 is correct.

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

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 5bfcb22a0e..63f80efeec 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -2403,8 +2403,8 @@ static bool fold_negsetcond(OptContext *ctx, TCGOp *op)
         fold_setcond_tst_pow2(ctx, op, true);
     }
 
-    /* Value is {0,-1} so all bits are repetitions of the sign. */
-    return fold_masks_s(ctx, op, -1);
+    /* Value is {0,-1} so all bits above lsb are repetitions of the lsb. */
+    return fold_masks_s(ctx, op, ~1);
 }
 
 static bool fold_setcond2(OptContext *ctx, TCGOp *op)
-- 
2.43.0
Re: [PATCH v2 35/51] tcg/optimize: Fix sign mask in fold_negsetcond
Posted by Pierrick Bouvier 3 days, 2 hours ago
On 12/19/24 20:10, Richard Henderson wrote:
> The sign mask is about repetitions, a la clrsb64(), so the lsb
> itself can never be a repetition.  Thus ~1 not -1 is correct.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   tcg/optimize.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tcg/optimize.c b/tcg/optimize.c
> index 5bfcb22a0e..63f80efeec 100644
> --- a/tcg/optimize.c
> +++ b/tcg/optimize.c
> @@ -2403,8 +2403,8 @@ static bool fold_negsetcond(OptContext *ctx, TCGOp *op)
>           fold_setcond_tst_pow2(ctx, op, true);
>       }
>   
> -    /* Value is {0,-1} so all bits are repetitions of the sign. */
> -    return fold_masks_s(ctx, op, -1);
> +    /* Value is {0,-1} so all bits above lsb are repetitions of the lsb. */
> +    return fold_masks_s(ctx, op, ~1);
>   }
>   
>   static bool fold_setcond2(OptContext *ctx, TCGOp *op)

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