diff mbox series

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

Message ID 20241220041104.53105-36-richard.henderson@linaro.org
State New
Headers show
Series tcg: Remove in-flight mask data from OptContext | expand

Commit Message

Richard Henderson Dec. 20, 2024, 4:10 a.m. UTC
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(-)

Comments

Pierrick Bouvier Dec. 20, 2024, 8:19 p.m. UTC | #1
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>
diff mbox series

Patch

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)