From 15edc2dea0ed01a1c836cdd97d41f3a33d30ee57 Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Sat, 4 Oct 2008 15:15:17 +0000 Subject: [PATCH] Only deactivate AM support for a node with an immediate, if the match flags do not include match_am_and_immediates. This allows folding reloads into IMul with immediate. [r22470] --- ir/be/ia32/ia32_transform.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ir/be/ia32/ia32_transform.c b/ir/be/ia32/ia32_transform.c index b69957b84..b70d73d87 100644 --- a/ir/be/ia32/ia32_transform.c +++ b/ir/be/ia32/ia32_transform.c @@ -818,7 +818,8 @@ static ir_node *gen_binop(ir_node *node, ir_node *op1, ir_node *op2, am.new_op1, am.new_op2); set_am_attributes(new_node, &am); /* we can't use source address mode anymore when using immediates */ - if (is_ia32_Immediate(am.new_op1) || is_ia32_Immediate(am.new_op2)) + if (!(flags & match_am_and_immediates) && + (is_ia32_Immediate(am.new_op1) || is_ia32_Immediate(am.new_op2))) set_ia32_am_support(new_node, ia32_am_none); SET_IA32_ORIG_NODE(new_node, ia32_get_old_node_name(env_cg, node)); @@ -868,7 +869,8 @@ static ir_node *gen_binop_flags(ir_node *node, construct_binop_flags_func *func, addr->mem, am.new_op1, am.new_op2, new_eflags); set_am_attributes(new_node, &am); /* we can't use source address mode anymore when using immediates */ - if(is_ia32_Immediate(am.new_op1) || is_ia32_Immediate(am.new_op2)) + if (!(flags & match_am_and_immediates) && + (is_ia32_Immediate(am.new_op1) || is_ia32_Immediate(am.new_op2))) set_ia32_am_support(new_node, ia32_am_none); SET_IA32_ORIG_NODE(new_node, ia32_get_old_node_name(env_cg, node)); -- 2.20.1