From: Aurelien Jarno Date: Thu, 6 Sep 2012 14:47:14 +0000 (+0200) Subject: tcg/optimize: swap brcond/setcond arguments when possible X-Git-Tag: v1.2.1~220 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=decddd9021b417186901baec037cc9b4d75a58f6;p=thirdparty%2Fqemu.git tcg/optimize: swap brcond/setcond arguments when possible brcond and setcond ops are not commutative, but it's easy to compute the new condition after swapping the arguments. Try to always put the constant argument in second position like for commutative ops, to help backends to generate better code. Reviewed-by: Richard Henderson Signed-off-by: Aurelien Jarno Signed-off-by: Michael Roth --- diff --git a/tcg/optimize.c b/tcg/optimize.c index 1698ba39b36..7debc8a36ac 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -318,6 +318,24 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr, args[2] = tmp; } break; + CASE_OP_32_64(brcond): + if (temps[args[0]].state == TCG_TEMP_CONST + && temps[args[1]].state != TCG_TEMP_CONST) { + tmp = args[0]; + args[0] = args[1]; + args[1] = tmp; + args[2] = tcg_swap_cond(args[2]); + } + break; + CASE_OP_32_64(setcond): + if (temps[args[1]].state == TCG_TEMP_CONST + && temps[args[2]].state != TCG_TEMP_CONST) { + tmp = args[1]; + args[1] = args[2]; + args[2] = tmp; + args[3] = tcg_swap_cond(args[3]); + } + break; default: break; }