[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 19/64] tcg/optimize: Fold movcond 0/1 into se
From: |
Alex Bennée |
Subject: |
Re: [Qemu-devel] [PATCH v4 19/64] tcg/optimize: Fold movcond 0/1 into setcond |
Date: |
Tue, 06 Dec 2016 16:22:10 +0000 |
User-agent: |
mu4e 0.9.18; emacs 25.1.90.2 |
Richard Henderson <address@hidden> writes:
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> tcg/optimize.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/tcg/optimize.c b/tcg/optimize.c
> index f41ed2c..9e26bb7 100644
> --- a/tcg/optimize.c
> +++ b/tcg/optimize.c
> @@ -1105,6 +1105,21 @@ void tcg_optimize(TCGContext *s)
> tcg_opt_gen_mov(s, op, args, args[0], args[4-tmp]);
> break;
> }
> + if (temp_is_const(args[3]) && temp_is_const(args[4])) {
> + tcg_target_ulong tv = temps[args[3]].val;
> + tcg_target_ulong fv = temps[args[4]].val;
> + TCGCond cond = args[5];
> + if (fv == 1 && tv == 0) {
> + cond = tcg_invert_cond(cond);
> + } else if (!(tv == 1 && fv == 0)) {
> + goto do_default;
> + }
Why the weird exit early here on an inverted test. Couldn't it just be
} else if (tv == 1 && fv == 0) {
args[3] = cond;
op->opc = opc = (opc == INDEX_op_movcond_i32
? INDEX_op_setcond_i32
: INDEX_op_setcond_i64);
nb_iargs = 2;
}
And fall through to the goto do_default as before?
> goto do_default;
>
> case INDEX_op_add2_i32:
--
Alex Bennée
- Re: [Qemu-devel] [PATCH v4 19/64] tcg/optimize: Fold movcond 0/1 into setcond,
Alex Bennée <=