Message ID | 20241220041104.53105-11-richard.henderson@linaro.org |
---|---|
State | New |
Headers | show |
Series | tcg: Remove in-flight mask data from OptContext | expand |
On 12/19/24 20:10, Richard Henderson wrote: > Avoid the use of the OptContext slots. Find TempOptInfo once. > Compute s_mask from the union of the maximum count and the > op2 fallback for op1 being zero. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > tcg/optimize.c | 15 ++++++++++----- > 1 file changed, 10 insertions(+), 5 deletions(-) > > diff --git a/tcg/optimize.c b/tcg/optimize.c > index b8e9ded821..270051acd1 100644 > --- a/tcg/optimize.c > +++ b/tcg/optimize.c > @@ -1583,10 +1583,12 @@ static bool fold_call(OptContext *ctx, TCGOp *op) > > static bool fold_count_zeros(OptContext *ctx, TCGOp *op) > { > - uint64_t z_mask; > + uint64_t z_mask, s_mask; > + TempOptInfo *t1 = arg_info(op->args[1]); > + TempOptInfo *t2 = arg_info(op->args[2]); > > - if (arg_is_const(op->args[1])) { > - uint64_t t = arg_info(op->args[1])->val; > + if (t1->is_const) { > + uint64_t t = t1->val; > > if (t != 0) { > t = do_constant_folding(op->opc, ctx->type, t, 0); > @@ -1605,8 +1607,11 @@ static bool fold_count_zeros(OptContext *ctx, TCGOp *op) > default: > g_assert_not_reached(); > } > - ctx->z_mask = arg_info(op->args[2])->z_mask | z_mask; > - return false; > + s_mask = smask_from_zmask(z_mask); > + z_mask |= t2->z_mask; > + s_mask &= t2->s_mask; > + > + return fold_masks_zs(ctx, op, z_mask, s_mask); > } > > static bool fold_ctpop(OptContext *ctx, TCGOp *op) Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
diff --git a/tcg/optimize.c b/tcg/optimize.c index b8e9ded821..270051acd1 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1583,10 +1583,12 @@ static bool fold_call(OptContext *ctx, TCGOp *op) static bool fold_count_zeros(OptContext *ctx, TCGOp *op) { - uint64_t z_mask; + uint64_t z_mask, s_mask; + TempOptInfo *t1 = arg_info(op->args[1]); + TempOptInfo *t2 = arg_info(op->args[2]); - if (arg_is_const(op->args[1])) { - uint64_t t = arg_info(op->args[1])->val; + if (t1->is_const) { + uint64_t t = t1->val; if (t != 0) { t = do_constant_folding(op->opc, ctx->type, t, 0); @@ -1605,8 +1607,11 @@ static bool fold_count_zeros(OptContext *ctx, TCGOp *op) default: g_assert_not_reached(); } - ctx->z_mask = arg_info(op->args[2])->z_mask | z_mask; - return false; + s_mask = smask_from_zmask(z_mask); + z_mask |= t2->z_mask; + s_mask &= t2->s_mask; + + return fold_masks_zs(ctx, op, z_mask, s_mask); } static bool fold_ctpop(OptContext *ctx, TCGOp *op)
Avoid the use of the OptContext slots. Find TempOptInfo once. Compute s_mask from the union of the maximum count and the op2 fallback for op1 being zero. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- tcg/optimize.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)