From c69a615abed6ce2c2224191e564fe4a2f46ba6fd Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Fri, 10 Oct 2008 16:09:46 +0000 Subject: [PATCH] HACK: Prevent folding reload AM when the node already has a "real" memory input. This should fix 176.gcc [r22655] --- ir/be/ia32/bearch_ia32.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/ir/be/ia32/bearch_ia32.c b/ir/be/ia32/bearch_ia32.c index 6b25e8595..1ca37fc79 100644 --- a/ir/be/ia32/bearch_ia32.c +++ b/ir/be/ia32/bearch_ia32.c @@ -832,7 +832,9 @@ static int ia32_possible_memory_operand(const ir_node *irn, unsigned int i) return 0; case ia32_am_unary: - return i == n_ia32_unary_op; + if (i != n_ia32_unary_op) + return 0; + break; case ia32_am_binary: switch (i) { @@ -847,20 +849,27 @@ static int ia32_possible_memory_operand(const ir_node *irn, unsigned int i) req = get_ia32_in_req(irn, n_ia32_binary_left); if (req->type & arch_register_req_type_limited) return 0; - - return 1; + break; } case n_ia32_binary_right: - return 1; + break; default: return 0; } + break; default: panic("Unknown AM type"); } + + /* HACK: must not already use "real" memory. + * This can happen for Call and Div */ + if (!is_NoMem(get_irn_n(irn, n_ia32_mem))) + return 0; + + return 1; } static void ia32_perform_memory_operand(ir_node *irn, ir_node *spill, -- 2.20.1