tcg/optimize: Distinguish simplification in fold_setcond_zmask
Change return from bool to int; distinguish between complete folding, simplification, and no change. Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
f9e3934903
commit
95eb229363
@ -2155,7 +2155,8 @@ static bool fold_remainder(OptContext *ctx, TCGOp *op)
|
|||||||
return finish_folding(ctx, op);
|
return finish_folding(ctx, op);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool fold_setcond_zmask(OptContext *ctx, TCGOp *op, bool neg)
|
/* Return 1 if finished, -1 if simplified, 0 if unchanged. */
|
||||||
|
static int fold_setcond_zmask(OptContext *ctx, TCGOp *op, bool neg)
|
||||||
{
|
{
|
||||||
uint64_t a_zmask, b_val;
|
uint64_t a_zmask, b_val;
|
||||||
TCGCond cond;
|
TCGCond cond;
|
||||||
@ -2250,11 +2251,10 @@ static bool fold_setcond_zmask(OptContext *ctx, TCGOp *op, bool neg)
|
|||||||
op->opc = xor_opc;
|
op->opc = xor_opc;
|
||||||
op->args[2] = arg_new_constant(ctx, 1);
|
op->args[2] = arg_new_constant(ctx, 1);
|
||||||
}
|
}
|
||||||
return false;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
|
static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
|
||||||
@ -2359,10 +2359,13 @@ static bool fold_setcond(OptContext *ctx, TCGOp *op)
|
|||||||
return tcg_opt_gen_movi(ctx, op, op->args[0], i);
|
return tcg_opt_gen_movi(ctx, op, op->args[0], i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fold_setcond_zmask(ctx, op, false)) {
|
i = fold_setcond_zmask(ctx, op, false);
|
||||||
|
if (i > 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
fold_setcond_tst_pow2(ctx, op, false);
|
if (i == 0) {
|
||||||
|
fold_setcond_tst_pow2(ctx, op, false);
|
||||||
|
}
|
||||||
|
|
||||||
ctx->z_mask = 1;
|
ctx->z_mask = 1;
|
||||||
return false;
|
return false;
|
||||||
@ -2376,10 +2379,13 @@ static bool fold_negsetcond(OptContext *ctx, TCGOp *op)
|
|||||||
return tcg_opt_gen_movi(ctx, op, op->args[0], -i);
|
return tcg_opt_gen_movi(ctx, op, op->args[0], -i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fold_setcond_zmask(ctx, op, true)) {
|
i = fold_setcond_zmask(ctx, op, true);
|
||||||
|
if (i > 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
fold_setcond_tst_pow2(ctx, op, true);
|
if (i == 0) {
|
||||||
|
fold_setcond_tst_pow2(ctx, op, true);
|
||||||
|
}
|
||||||
|
|
||||||
/* Value is {0,-1} so all bits are repetitions of the sign. */
|
/* Value is {0,-1} so all bits are repetitions of the sign. */
|
||||||
ctx->s_mask = -1;
|
ctx->s_mask = -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user