Only deactivate AM support for a node with an immediate, if the match flags do not...
authorChristoph Mallon <christoph.mallon@gmx.de>
Sat, 4 Oct 2008 15:15:17 +0000 (15:15 +0000)
committerChristoph Mallon <christoph.mallon@gmx.de>
Sat, 4 Oct 2008 15:15:17 +0000 (15:15 +0000)
[r22470]

ir/be/ia32/ia32_transform.c

index b69957b..b70d73d 100644 (file)
@@ -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));