diff options
author | Pekka Enberg <penberg@kernel.org> | 2012-04-27 17:00:33 +0300 |
---|---|---|
committer | Pekka Enberg <penberg@kernel.org> | 2012-04-27 17:00:33 +0300 |
commit | c8236e2274351a93b537459fb39855ddf79ae3be (patch) | |
tree | 1b3f0d647869f009eae088a15df00f7e5c1eb234 | |
parent | e28b263e2ea747a82a68c2d02d7ab2c0318badbe (diff) | |
download | jato-c8236e2274351a93b537459fb39855ddf79ae3be.tar.gz |
x86-64: Eliminate redundant EXPR_LOCAL reg -> reg store
This patch eliminates a redundant register to register store from EXPR_LOCAL
instruction selector rule.
Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r-- | arch/x86/insn-selector_64.brg | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/arch/x86/insn-selector_64.brg b/arch/x86/insn-selector_64.brg index c881d31c..6407a441 100644 --- a/arch/x86/insn-selector_64.brg +++ b/arch/x86/insn-selector_64.brg @@ -196,7 +196,7 @@ reg: EXPR_LOCAL 1 struct compilation_unit *cu = s->b_parent; struct expression *expr; struct stack_slot *slot; - struct var_info *src, *result; + struct var_info *result; struct vm_method *method; enum machine_reg reg; int index; @@ -205,23 +205,21 @@ reg: EXPR_LOCAL 1 method = cu->method; - result = get_var(s->b_parent, expr->vm_type); - if (expr->local_index < (unsigned long) method->args_count) { reg = method->args_map[expr->local_index].reg; if (reg == MACH_REG_UNASSIGNED) { index = method->args_map[expr->local_index].stack_index; slot = get_local_slot(s->b_parent->stack_frame, index); + result = get_var(s->b_parent, expr->vm_type); select_insn(s, tree, memlocal_reg_insn(INSN_MOV_MEMLOCAL_REG, slot, result)); } else { - src = s->b_parent->non_fixed_args[expr->local_index]; - select_insn(s, tree, reg_reg_insn(INSN_MOV_REG_REG, - src, result)); + result = s->b_parent->non_fixed_args[expr->local_index]; } } else { index = expr->local_index - method->reg_args_count; slot = get_local_slot(s->b_parent->stack_frame, index); + result = get_var(s->b_parent, expr->vm_type); select_insn(s, tree, memlocal_reg_insn(INSN_MOV_MEMLOCAL_REG, slot, result)); } |