mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
tcg/optimize: do copy propagation for all operations
It is possible to due copy propagation for all operations, even the one that have side effects or clobber arguments (it only concerns input arguments). That said, the call operation should be handled differently due to the variable number of arguments. Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
e590d4e6b3
commit
1ff8c5418a
1 changed files with 9 additions and 2 deletions
|
@ -378,8 +378,15 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
|||
op = gen_opc_buf[op_index];
|
||||
def = &tcg_op_defs[op];
|
||||
/* Do copy propagation */
|
||||
if (!(def->flags & (TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS))) {
|
||||
assert(op != INDEX_op_call);
|
||||
if (op == INDEX_op_call) {
|
||||
int nb_oargs = args[0] >> 16;
|
||||
int nb_iargs = args[0] & 0xffff;
|
||||
for (i = nb_oargs + 1; i < nb_oargs + nb_iargs + 1; i++) {
|
||||
if (temps[args[i]].state == TCG_TEMP_COPY) {
|
||||
args[i] = find_better_copy(s, args[i]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = def->nb_oargs; i < def->nb_oargs + def->nb_iargs; i++) {
|
||||
if (temps[args[i]].state == TCG_TEMP_COPY) {
|
||||
args[i] = find_better_copy(s, args[i]);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue