We shouldn't alter the tree from the instruction selector. Instead, we should implement copy propagation later.
Signed-off-by: Eduard - Gabriel Munteanu <eduard.munte...@linux360.ro> --- arch/x86/insn-selector.brg | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) diff --git a/arch/x86/insn-selector.brg b/arch/x86/insn-selector.brg index ec98e82..b32fedf 100644 --- a/arch/x86/insn-selector.brg +++ b/arch/x86/insn-selector.brg @@ -1570,7 +1570,7 @@ stmt: STMT_STORE(EXPR_TEMPORARY, EXPR_LOCAL) 1 struct expression *exprdest, *exprsrc; struct stack_slot *slot; struct statement *stmt; - struct var_info *dest; + struct var_info *src, *dest; enum machine_reg reg; int index; @@ -1579,16 +1579,19 @@ stmt: STMT_STORE(EXPR_TEMPORARY, EXPR_LOCAL) 1 exprsrc = to_expr(stmt->store_src); exprdest = to_expr(stmt->store_dest); + dest = exprdest->tmp_low; + reg = args_local_to_reg(s->b_parent->method, exprsrc->local_index); if (reg == REG_UNASSIGNED) { index = args_stack_index(s->b_parent->method, exprsrc->local_index); slot = get_local_slot(s->b_parent->stack_frame, index); - dest = exprdest->tmp_low; select_insn(s, tree, memlocal_reg_insn(INSN_MOV_MEMLOCAL_REG, slot, dest)); - } else - exprdest->tmp_low = get_fixed_var(s->b_parent, reg); + } else { + src = get_fixed_var(s->b_parent, reg); + select_insn(s, tree, reg_reg_insn(INSN_MOV_REG_REG, src, dest)); + } } %endif -- 1.6.0.6 ------------------------------------------------------------------------------ _______________________________________________ Jatovm-devel mailing list Jatovm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jatovm-devel