make sure loops are analysid in loopana, reformatted belower
authorMatthias Braun <matze@braunis.de>
Sat, 8 Sep 2007 09:21:13 +0000 (09:21 +0000)
committerMatthias Braun <matze@braunis.de>
Sat, 8 Sep 2007 09:21:13 +0000 (09:21 +0000)
[r15718]

ir/be/beloopana.c
ir/be/belower.c

index 65541ae..26bb60e 100644 (file)
@@ -169,6 +169,11 @@ be_loopana_t *be_new_loop_pressure_cls(be_irg_t *birg,
        DBG((dbg, LEVEL_1, " Computing register pressure for class %s:\n", cls->name));
        DBG((dbg, LEVEL_1, "=====================================================\n", cls->name));
 
+       /* construct control flow loop tree */
+       if (! (get_irg_loopinfo_state(irg) & loopinfo_cf_consistent)) {
+               construct_cf_backedges(irg);
+       }
+
        be_compute_loop_pressure(loop_ana, get_irg_loop(irg), cls);
 
        return loop_ana;
@@ -190,6 +195,11 @@ be_loopana_t *be_new_loop_pressure(be_irg_t *birg) {
        loop_ana->data = new_set(cmp_loop_info, 16);
        loop_ana->birg = birg;
 
+       /* construct control flow loop tree */
+       if (! (get_irg_loopinfo_state(irg) & loopinfo_cf_consistent)) {
+               construct_cf_backedges(irg);
+       }
+
        for (i = arch_isa_get_n_reg_class(isa) - 1; i >= 0; --i) {
                const arch_register_class_t *cls = arch_isa_get_reg_class(isa, i);
                DBG((dbg, LEVEL_1, "\n=====================================================\n", cls->name));
index bd21999..3cbeec9 100644 (file)
@@ -1005,15 +1005,18 @@ found_front:
  * @param walk_env The walker environment
  */
 static void lower_nodes_after_ra_walker(ir_node *irn, void *walk_env) {
-       if (! is_Block(irn) && ! is_Proj(irn)) {
-               if (be_is_Perm(irn)) {
-                       int perm_stayed = push_through_perm(irn, walk_env);
-                       if (perm_stayed)
-                               lower_perm_node(irn, walk_env);
-               }
-       }
+       int perm_stayed;
 
-       return;
+       if (is_Block(irn) || is_Proj(irn))
+               return;
+       if (!be_is_Perm(irn))
+               return;
+
+       perm_stayed = push_through_perm(irn, walk_env);
+       if (!perm_stayed)
+               return;
+
+       lower_perm_node(irn, walk_env);
 }
 
 /**