From a152de8bb7842dd43ed0c98b02320b222f06ca87 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20W=C3=BCrdig?= Date: Fri, 11 Aug 2006 14:34:37 +0000 Subject: [PATCH] fixed perm lowering (sometimes perm removed from schedule when it shouldn't be) --- ir/be/belower.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ir/be/belower.c b/ir/be/belower.c index 6283ac086..89a6a0d7e 100644 --- a/ir/be/belower.c +++ b/ir/be/belower.c @@ -269,8 +269,9 @@ static void lower_perm_node(ir_node *irn, void *walk_env) { const arch_register_class_t *reg_class; const arch_env_t *arch_env; lower_env_t *env = walk_env; - int real_size = 0; - int n, i, pn, do_copy, j, n_ops; + int real_size = 0; + int keep_perm = 0; + int n, i, pn, do_copy, j, n_ops; reg_pair_t *pairs; const ir_edge_t *edge; perm_cycle_t *cycle; @@ -372,6 +373,7 @@ static void lower_perm_node(ir_node *irn, void *walk_env) { */ if (n == 2 && cycle->type == PERM_CYCLE) { free(cycle); + keep_perm = 1; continue; } @@ -495,10 +497,9 @@ static void lower_perm_node(ir_node *irn, void *walk_env) { free(cycle); } - - /* remove the perm from schedule */ - sched_remove(irn); + if (! keep_perm) + sched_remove(irn); } -- 2.20.1