mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
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 <rth@twiddle.net> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
01ee5282ea
commit
65a7cce17d
1 changed files with 18 additions and 0 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue