aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Enberg <penberg@kernel.org>2012-04-27 17:00:33 +0300
committerPekka Enberg <penberg@kernel.org>2012-04-27 17:00:33 +0300
commitc8236e2274351a93b537459fb39855ddf79ae3be (patch)
tree1b3f0d647869f009eae088a15df00f7e5c1eb234
parente28b263e2ea747a82a68c2d02d7ab2c0318badbe (diff)
downloadjato-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.brg10
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));
}