Message ID | 1348766397-20731-4-git-send-email-rth@twiddle.net |
---|---|
State | New |
Headers | show |
On Thu, Sep 27, 2012 at 10:19:53AM -0700, Richard Henderson wrote: > Signed-off-by: Richard Henderson <rth@twiddle.net> > --- > tcg/optimize.c | 26 ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/tcg/optimize.c b/tcg/optimize.c > index 004c336..d39926e 100644 > --- a/tcg/optimize.c > +++ b/tcg/optimize.c > @@ -397,6 +397,22 @@ static bool swap_commutative(TCGArg dest, TCGArg *p1, TCGArg *p2) > return false; > } > > +static bool swap_commutative2(TCGArg *p1, TCGArg *p2) > +{ > + int sum = 0; > + sum += temps[p1[0]].state == TCG_TEMP_CONST; > + sum += temps[p1[1]].state == TCG_TEMP_CONST; > + sum -= temps[p2[0]].state == TCG_TEMP_CONST; > + sum -= temps[p2[1]].state == TCG_TEMP_CONST; > + if (sum > 0) { > + TCGArg t; > + t = p1[0], p1[0] = p2[0], p2[0] = t; > + t = p1[1], p1[1] = p2[1], p2[1] = t; > + return true; > + } > + return false; > +} > + > /* Propagate constants and copies, fold constant expressions. */ > static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr, > TCGArg *args, TCGOpDef *tcg_op_defs) > @@ -475,6 +491,16 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr, > swap_commutative(args[0], &args[2], &args[4]); > swap_commutative(args[1], &args[3], &args[5]); > break; > + case INDEX_op_brcond2_i32: > + if (swap_commutative2(&args[0], &args[2])) { > + args[4] = tcg_swap_cond(args[4]); > + } > + break; > + case INDEX_op_setcond2_i32: > + if (swap_commutative2(&args[1], &args[3])) { > + args[5] = tcg_swap_cond(args[5]); > + } > + break; > default: > break; > } Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
diff --git a/tcg/optimize.c b/tcg/optimize.c index 004c336..d39926e 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -397,6 +397,22 @@ static bool swap_commutative(TCGArg dest, TCGArg *p1, TCGArg *p2) return false; } +static bool swap_commutative2(TCGArg *p1, TCGArg *p2) +{ + int sum = 0; + sum += temps[p1[0]].state == TCG_TEMP_CONST; + sum += temps[p1[1]].state == TCG_TEMP_CONST; + sum -= temps[p2[0]].state == TCG_TEMP_CONST; + sum -= temps[p2[1]].state == TCG_TEMP_CONST; + if (sum > 0) { + TCGArg t; + t = p1[0], p1[0] = p2[0], p2[0] = t; + t = p1[1], p1[1] = p2[1], p2[1] = t; + return true; + } + return false; +} + /* Propagate constants and copies, fold constant expressions. */ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr, TCGArg *args, TCGOpDef *tcg_op_defs) @@ -475,6 +491,16 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr, swap_commutative(args[0], &args[2], &args[4]); swap_commutative(args[1], &args[3], &args[5]); break; + case INDEX_op_brcond2_i32: + if (swap_commutative2(&args[0], &args[2])) { + args[4] = tcg_swap_cond(args[4]); + } + break; + case INDEX_op_setcond2_i32: + if (swap_commutative2(&args[1], &args[3])) { + args[5] = tcg_swap_cond(args[5]); + } + break; default: break; }
Signed-off-by: Richard Henderson <rth@twiddle.net> --- tcg/optimize.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)