Skip to content

Commit

Permalink
tcg/optimize: do copy propagation for all operations
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
aurel32 committed Sep 22, 2012
1 parent e590d4e commit 1ff8c54
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions tcg/optimize.c
Expand Up @@ -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]);
Expand Down

0 comments on commit 1ff8c54

Please sign in to comment.