From b861b5c9edeb8f62f662d2104d27cd8319743155 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Thu, 3 Sep 2009 10:37:47 +0000 Subject: [PATCH] fix (nearly) endless loops in some cases of propagate_phi [r26475] --- ir/be/benewalloc.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/ir/be/benewalloc.c b/ir/be/benewalloc.c index f9e769c2b..1ec0c73ba 100644 --- a/ir/be/benewalloc.c +++ b/ir/be/benewalloc.c @@ -1299,20 +1299,17 @@ static void propagate_phi_register(ir_node *phi, unsigned r) int arity = get_irn_arity(phi); for (i = 0; i < arity; ++i) { - ir_node *op = get_Phi_pred(phi, i); - allocation_info_t *info = get_allocation_info(op); - ir_node *pred; - float weight; - - pred = get_Block_cfgpred_block(block, i); - weight = get_block_execfreq(execfreqs, pred); - weight *= AFF_PHI; + ir_node *op = get_Phi_pred(phi, i); + allocation_info_t *info = get_allocation_info(op); + ir_node *pred_block = get_Block_cfgpred_block(block, i); + float weight + = get_block_execfreq(execfreqs, pred_block) * AFF_PHI; if (info->prefs[r] >= weight) continue; /* promote the prefered register */ - info->prefs[r] += AFF_PHI * weight; + info->prefs[r] = AFF_PHI * weight; if (is_Phi(op)) propagate_phi_register(op, r); } -- 2.20.1