qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]