aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Enberg <penberg@kernel.org>2012-04-27 17:05:58 +0300
committerPekka Enberg <penberg@kernel.org>2012-04-27 17:05:58 +0300
commitb549b1efc8f7fd39b0c8cee4cbac934e2059d4d6 (patch)
treeec761ae09071aa72260f1841f3d0ff550c093be5
parentc8236e2274351a93b537459fb39855ddf79ae3be (diff)
downloadjato-b549b1efc8f7fd39b0c8cee4cbac934e2059d4d6.tar.gz
x86-64: Eliminate redundant EXPR_LOCAL_FLOAT reg -> reg store
This patch eliminates a redundant register to register store from EXPR_LOCAL_FLOAT instruction selector rule. Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r--arch/x86/insn-selector_64.brg11
1 files changed, 5 insertions, 6 deletions
diff --git a/arch/x86/insn-selector_64.brg b/arch/x86/insn-selector_64.brg
index 6407a441..e57963ec 100644
--- a/arch/x86/insn-selector_64.brg
+++ b/arch/x86/insn-selector_64.brg
@@ -237,8 +237,6 @@ freg: EXPR_FLOAT_LOCAL 0
exprsrc = to_expr(tree);
- state->reg1 = dest = get_var(s->b_parent, exprsrc->vm_type);
-
if (exprsrc->local_index < (unsigned long) method->args_count) {
enum machine_reg reg;
@@ -249,6 +247,8 @@ freg: EXPR_FLOAT_LOCAL 0
index = method->args_map[exprsrc->local_index].stack_index;
slot = get_local_slot(s->b_parent->stack_frame, index);
+ state->reg1 = dest = get_var(s->b_parent, exprsrc->vm_type);
+
if (exprsrc->vm_type == J_FLOAT)
select_insn(s, tree, memlocal_reg_insn(INSN_MOVSS_MEMLOCAL_XMM, slot, dest));
else
@@ -258,10 +258,7 @@ freg: EXPR_FLOAT_LOCAL 0
src = get_fixed_var(s->b_parent, reg);
- if (exprsrc->vm_type == J_FLOAT)
- select_insn(s, tree, reg_reg_insn(INSN_MOVSS_XMM_XMM, src, dest));
- else
- select_insn(s, tree, reg_reg_insn(INSN_MOVSD_XMM_XMM, src, dest));
+ state->reg1 = dest = src;
}
} else {
int index;
@@ -269,6 +266,8 @@ freg: EXPR_FLOAT_LOCAL 0
index = exprsrc->local_index - method->reg_args_count;
slot = get_local_slot(s->b_parent->stack_frame, index);
+ state->reg1 = dest = get_var(s->b_parent, exprsrc->vm_type);
+
if (exprsrc->vm_type == J_FLOAT)
select_insn(s, tree, memlocal_reg_insn(INSN_MOVSS_MEMLOCAL_XMM, slot, dest));
else