fix parameter loads not being rematerialized
[libfirm] / ir / ana / irscc.c
1 /*
2  * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
6  * This file may be distributed and/or modified under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation and appearing in the file LICENSE.GPL included in the
9  * packaging of this file.
10  *
11  * Licensees holding valid libFirm Professional Edition licenses may use
12  * this file in accordance with the libFirm Commercial License.
13  * Agreement provided with the Software.
14  *
15  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief    Compute the strongly connected regions and build
23  *              backedge/loop datastructures.
24  *              A variation on the Tarjan algorithm. See also [Trapp:99],
25  *              Chapter 5.2.1.2.
26  * @author   Goetz Lindenmaier
27  * @date     7.2002
28  * @version  $Id$
29  */
30 #ifdef HAVE_CONFIG_H
31 # include "config.h"
32 #endif
33
34 #ifdef HAVE_STRING_H
35 # include <string.h>
36 #endif
37 #ifdef HAVE_STDLIB_H
38 # include <stdlib.h>
39 #endif
40
41 #include "irloop_t.h"
42
43 #include "irprog_t.h"
44 #include "irgraph_t.h"
45 #include "irnode_t.h"
46 #include "irgwalk.h"
47 #include "array.h"
48 #include "pmap.h"
49
50 #include "irdump.h"
51
52 /* A variant of the loop tree that avoids loops without head.
53    This reduces the depth of the loop tree. */
54 #define NO_LOOPS_WITHOUT_HEAD 1
55
56 static ir_graph *outermost_ir_graph;      /* The outermost graph the scc is computed
57                                              for */
58 static ir_loop *current_loop;      /* Current loop construction is working
59                                       on. */
60 static int loop_node_cnt = 0;      /* Counts the number of allocated loop nodes.
61                                       Each loop node gets a unique number.
62                                       What for? ev. remove. @@@ */
63 static int current_dfn = 1;        /* Counter to generate depth first numbering
64                                       of visited nodes.  */
65
66 static int max_loop_depth = 0;
67
68 void link_to_reg_end (ir_node *n, void *env);
69 void set_projx_link(ir_node *cb_projx, ir_node *end_projx);
70 ir_node *get_projx_link(ir_node *cb_projx);
71
72 /**********************************************************************/
73 /* Node attributes                                                   **/
74 /**********************************************************************/
75
76 /**********************************************************************/
77 /* Node attributes needed for the construction.                      **/
78 /**********************************************************************/
79
80 typedef struct scc_info {
81   int in_stack;          /**< Marks whether node is on the stack. */
82   int dfn;               /**< Depth first search number. */
83   int uplink;            /**< dfn number of ancestor. */
84   /*  ir_loop *loop;         *//* Refers to the containing loop. */
85   /*
86       struct section *section;
87       xset def;
88       xset use;
89   */
90 } scc_info;
91
92 static INLINE scc_info* new_scc_info(void) {
93   scc_info *info = obstack_alloc (outermost_ir_graph->obst, sizeof (scc_info));
94   memset (info, 0, sizeof (scc_info));
95   return info;
96 }
97
98 static INLINE void
99 mark_irn_in_stack (ir_node *n) {
100   scc_info *scc = get_irn_link(n);
101   assert(scc);
102   scc->in_stack = 1;
103 }
104
105 static INLINE void
106 mark_irn_not_in_stack (ir_node *n) {
107   scc_info *scc = get_irn_link(n);
108   assert(scc);
109   scc->in_stack = 0;
110 }
111
112 static INLINE int
113 irn_is_in_stack (ir_node *n) {
114   scc_info *scc = get_irn_link(n);
115   assert(scc);
116   return scc->in_stack;
117 }
118
119 static INLINE void
120 set_irn_uplink (ir_node *n, int uplink) {
121   scc_info *scc = get_irn_link(n);
122   assert(scc);
123   scc->uplink = uplink;
124 }
125
126 int
127 get_irn_uplink (ir_node *n) {
128   scc_info *scc = get_irn_link(n);
129   assert(scc);
130   return scc->uplink;
131 }
132
133 static INLINE void
134 set_irn_dfn (ir_node *n, int dfn) {
135   scc_info *scc = get_irn_link(n);
136   assert(scc);
137   scc->dfn = dfn;
138 }
139
140 int
141 get_irn_dfn (ir_node *n) {
142   scc_info *scc = get_irn_link(n);
143   assert(scc);
144   return scc->dfn;
145 }
146
147
148 void
149 set_irn_loop (ir_node *n, ir_loop *loop) {
150   n->loop = loop;
151 }
152
153 /* Uses temporary information to get the loop */
154 ir_loop *(get_irn_loop)(const ir_node *n) {
155   return _get_irn_loop(n);
156 }
157
158
159 #if 0
160 static ir_loop *find_nodes_loop (ir_node *n, ir_loop *l) {
161   int i;
162   ir_loop *res = NULL;
163
164   /* Test whether n is contained in this loop. */
165   for (i = 0; i < get_loop_n_nodes(l); i++)
166     if (n == get_loop_node(l, i)) return l;
167
168   /* Is this a leave in the loop tree? If so loop not found. */
169   if (get_loop_n_sons(l) == 0) return NULL;
170
171   /* Else descend in the loop tree. */
172   for (i = 0; i < get_loop_n_sons(l); i++) {
173     res = find_nodes_loop(n, get_loop_son(l, i));
174     if (res) break;
175   }
176   return res;
177 }
178
179 /* @@@ temporary implementation, costly!!! */
180 ir_loop * get_irn_loop(ir_node *n) {
181   ir_loop *l = get_irg_loop(current_ir_graph);
182   l = find_nodes_loop(n, l);
183   return l;
184 }
185 #endif
186
187 /**********************************************************************/
188 /* A stack.                                                          **/
189 /**********************************************************************/
190
191 static ir_node **stack = NULL;
192 static int tos = 0;                /* top of stack */
193
194 /**
195  * initializes the stack
196  */
197 static INLINE void init_stack(void) {
198   if (stack) {
199     ARR_RESIZE (ir_node *, stack, 1000);
200   } else {
201     stack = NEW_ARR_F (ir_node *, 1000);
202   }
203   tos = 0;
204 }
205
206 #if 0
207 static INLINE void free_stack(void) {
208   DEL_ARR_F(stack);
209   stack = NULL;
210   tos = 0;
211 }
212 #endif
213
214 /**
215  * push a node onto the stack
216  *
217  * @param n  The node to push
218  */
219 static INLINE void
220 push (ir_node *n)
221 {
222   if (tos == ARR_LEN (stack)) {
223     int nlen = ARR_LEN (stack) * 2;
224     ARR_RESIZE (ir_node *, stack, nlen);
225   }
226   stack [tos++] = n;
227   mark_irn_in_stack(n);
228 }
229
230 /**
231  * pop a node from the stack
232  *
233  * @return  The topmost node
234  */
235 static INLINE ir_node *
236 pop (void)
237 {
238   ir_node *n = stack[--tos];
239   mark_irn_not_in_stack(n);
240   return n;
241 }
242
243 /**
244  * The nodes up to n belong to the current loop.
245  * Removes them from the stack and adds them to the current loop.
246  */
247 static INLINE void
248 pop_scc_to_loop (ir_node *n)
249 {
250   ir_node *m;
251   int i = 0;
252
253   do {
254     m = pop();
255
256     loop_node_cnt++;
257     set_irn_dfn(m, loop_node_cnt);
258     add_loop_node(current_loop, m);
259     set_irn_loop(m, current_loop);
260     i++;
261
262     /*    if (m==n) break;*/
263   } while(m != n);
264
265   /* i might be bigger than 1 for dead (and that's why bad) loops */
266   /* if(i > 1)
267     printf("Mehr als eine Iteration!!!!!!!!!!!!!!!!!!!!!!!!!!!!11111\n");
268    */
269 }
270
271 /* GL ??? my last son is my grandson???  Removes loops with no
272    ir_nodes in them.  Such loops have only another loop as son. (Why
273    can't they have two loops as sons? Does it never get that far? ) */
274 static void close_loop (ir_loop *l)
275 {
276   int last = get_loop_n_elements(l) - 1;
277   loop_element lelement = get_loop_element(l, last);
278   ir_loop *last_son = lelement.son;
279
280   if (get_kind(last_son) == k_ir_loop &&
281       get_loop_n_elements(last_son) == 1) {
282     ir_loop *gson;
283
284     lelement = get_loop_element(last_son, 0);
285     gson = lelement.son;
286
287     if (get_kind(gson) == k_ir_loop) {
288       loop_element new_last_son;
289
290       gson->outer_loop = l;
291       new_last_son.son = gson;
292       l->children[last] = new_last_son;
293     }
294   }
295
296   current_loop = l;
297 }
298
299 /* Removes and unmarks all nodes up to n from the stack.
300    The nodes must be visited once more to assign them to a scc. */
301 static INLINE void
302 pop_scc_unmark_visit (ir_node *n)
303 {
304   ir_node *m = NULL;
305
306   while (m != n) {
307     m = pop();
308     set_irn_visited(m, 0);
309   }
310 }
311
312 /**********************************************************************/
313 /* The loop datastructure.                                           **/
314 /**********************************************************************/
315
316 /* Allocates a new loop as son of current_loop.  Sets current_loop
317    to the new loop and returns the father. */
318 ir_loop *new_loop (void) {
319   ir_loop *father, *son;
320
321   father = current_loop;
322
323   son = (ir_loop *) obstack_alloc (outermost_ir_graph->obst, sizeof (ir_loop));
324   memset (son, 0, sizeof (ir_loop));
325   son->kind = k_ir_loop;
326   son->children = NEW_ARR_F (loop_element, 0);
327   son->n_nodes = 0;
328   son->n_sons=0;
329   if (father) {
330     son->outer_loop = father;
331     add_loop_son(father, son);
332     son->depth = father->depth+1;
333     if (son->depth > max_loop_depth) max_loop_depth = son->depth;
334   } else {  /* The root loop */
335     son->outer_loop = son;
336     son->depth = 0;
337   }
338
339 #ifdef DEBUG_libfirm
340   son->loop_nr = get_irp_new_node_nr();
341   son->link = NULL;
342 #endif
343
344   current_loop = son;
345   return father;
346 }
347
348 #if 0
349 /* Finishes the datastructures, copies the arrays to the obstack
350    of current_ir_graph.
351    A. Schoesser: Caution: loop -> sons is gone. */
352 static void mature_loop (ir_loop *loop) {
353   ir_loop **new_sons;
354
355   new_sons = NEW_ARR_D (ir_loop *, current_ir_graph->obst, ARR_LEN(loop->sons));
356   memcpy (new_sons, loop->sons, sizeof (ir_loop *) * ARR_LEN(loop->sons));
357   DEL_ARR_F(loop->sons);
358   loop->sons = new_sons;
359 }
360 #endif
361
362 /* Returns outer loop, itself if outermost. */
363 ir_loop *(get_loop_outer_loop)(const ir_loop *loop) {
364   return _get_loop_outer_loop(loop);
365 }
366
367 /* Returns nesting depth of this loop */
368 int (get_loop_depth)(const ir_loop *loop) {
369   return _get_loop_depth(loop);
370 }
371
372 /* Returns the number of inner loops */
373 int (get_loop_n_sons)(const ir_loop *loop) {
374   return _get_loop_n_sons(loop);
375 }
376
377 /* Returns the pos`th loop_node-child              *
378  * TODO: This method isn`t very efficient !        *
379  * Returns NULL if there isn`t a pos`th loop_node */
380 ir_loop *get_loop_son (ir_loop *loop, int pos) {
381   int child_nr = 0, loop_nr = -1;
382
383   assert(loop && loop->kind == k_ir_loop);
384   while(child_nr < ARR_LEN(loop->children))
385    {
386     if(*(loop -> children[child_nr].kind) == k_ir_loop)
387       loop_nr++;
388     if(loop_nr == pos)
389       return(loop -> children[child_nr].son);
390     child_nr++;
391    }
392   return NULL;
393 }
394
395 /* Use EXCLUSIVELY this function to add sons, otherwise the loop->n_sons
396    is invalid! */
397
398 void
399 add_loop_son(ir_loop *loop, ir_loop *son) {
400   loop_element lson;
401   lson.son = son;
402   assert(loop && loop->kind == k_ir_loop);
403   assert(get_kind(son) == k_ir_loop);
404   ARR_APP1 (loop_element, loop->children, lson);
405   loop -> n_sons++;
406 }
407
408 /* Returns the number of nodes in the loop */
409 int      get_loop_n_nodes (ir_loop *loop) {
410   assert(loop); assert(loop->kind == k_ir_loop);
411   return loop -> n_nodes;
412 /*  return ARR_LEN(loop->nodes); */
413 }
414
415 /* Returns the pos`th ir_node-child                *
416  * TODO: This method isn`t very efficient !        *
417  * Returns NULL if there isn`t a pos`th ir_node   */
418 ir_node *get_loop_node (ir_loop *loop, int pos) {
419   int child_nr, node_nr = -1;
420
421   assert(loop && loop->kind == k_ir_loop);
422   assert(pos < get_loop_n_nodes(loop));
423
424   for (child_nr = 0; child_nr < ARR_LEN(loop->children); child_nr++) {
425     if(*(loop -> children[child_nr].kind) == k_ir_node)
426       node_nr++;
427     if(node_nr == pos)
428       return(loop -> children[child_nr].node);
429   }
430
431   assert(0 && "no child at pos found");
432   return NULL;
433 }
434
435 /* Use EXCLUSIVELY this function to add nodes, otherwise the loop->n_nodes
436    is invalid! */
437
438 void
439 add_loop_node(ir_loop *loop, ir_node *n) {
440   loop_element ln;
441   ln.node = n;
442   assert(loop && loop->kind == k_ir_loop);
443   assert(get_kind(n) == k_ir_node || get_kind(n) == k_ir_graph);  /* used in callgraph.c */
444   ARR_APP1 (loop_element, loop->children, ln);
445   loop->n_nodes++;
446 }
447
448 /* Returns the number of elements contained in loop.  */
449 int get_loop_n_elements (const ir_loop *loop) {
450   assert(loop && loop->kind == k_ir_loop);
451   return(ARR_LEN(loop->children));
452 }
453
454 /*
455  Returns the pos`th loop element.
456  This may be a loop_node or a ir_node. The caller of this function has
457  to check the *(loop_element.kind) field for "k_ir_node" or "k_ir_loop"
458  and then select the appropriate "loop_element.node" or "loop_element.son".
459 */
460
461 loop_element get_loop_element(const ir_loop *loop, int pos) {
462   assert(loop && loop->kind == k_ir_loop && pos < ARR_LEN(loop->children));
463   return(loop -> children[pos]);
464 }
465
466 int get_loop_element_pos(const ir_loop *loop, void *le) {
467   int i, n;
468   assert(loop && loop->kind == k_ir_loop);
469
470   n = get_loop_n_elements(loop);
471   for (i = 0; i < n; i++)
472     if (get_loop_element(loop, i).node == le) return i;
473   return -1;
474 }
475
476 int get_loop_loop_nr(const ir_loop *loop) {
477   assert(loop && loop->kind == k_ir_loop);
478 #ifdef DEBUG_libfirm
479   return loop->loop_nr;
480 #else
481   return (int)loop;
482 #endif
483 }
484
485
486 /** A field to connect additional information to a loop.  Only valid
487     if libfirm_debug is set. */
488 void  set_loop_link (ir_loop *loop, void *link) {
489   assert(loop && loop->kind == k_ir_loop);
490   loop->link = link;
491 }
492 void *get_loop_link (const ir_loop *loop) {
493   assert(loop && loop->kind == k_ir_loop);
494   return loop->link;
495 }
496
497 int (is_ir_loop)(const void *thing) {
498   return _is_ir_loop(thing);
499 }
500
501 /* The outermost loop is remarked in the surrounding graph. */
502 void (set_irg_loop)(ir_graph *irg, ir_loop *loop) {
503   _set_irg_loop(irg, loop);
504 }
505
506 /* Returns the root loop info (if exists) for an irg. */
507 ir_loop *(get_irg_loop)(ir_graph *irg) {
508   return _get_irg_loop(irg);
509 }
510
511
512 /**********************************************************************/
513 /* Constructing and destructing the loop/backedge information.       **/
514 /**********************************************************************/
515
516 /* Initialization steps. **********************************************/
517
518 static INLINE void
519 init_node (ir_node *n, void *env) {
520   (void) env;
521   set_irn_link (n, new_scc_info());
522   clear_backedges(n);
523 }
524
525 static INLINE void
526 init_scc_common (void) {
527   current_dfn = 1;
528   loop_node_cnt = 0;
529   init_stack();
530 }
531
532 static INLINE void
533 init_scc (ir_graph *irg) {
534   init_scc_common();
535   irg_walk_graph (irg, init_node, NULL, NULL);
536   /*
537   irg_walk (irg, link_to_reg_end, NULL, NULL);
538   */
539 }
540
541 #ifdef INTERPROCEDURAL_VIEW
542 static INLINE void
543 init_ip_scc (void) {
544   init_scc_common();
545   cg_walk (init_node, NULL, NULL);
546
547 #if EXPERIMENTAL_LOOP_TREE
548   cg_walk (link_to_reg_end, NULL, NULL);
549 #endif
550 }
551 #endif
552
553 /* Condition for breaking the recursion. */
554 static int is_outermost_Start(ir_node *n) {
555   /* Test whether this is the outermost Start node.  If so
556      recursion must end. */
557   if ((get_irn_op(n) == op_Block)     &&
558       (get_Block_n_cfgpreds(n) == 1)  &&
559       (get_irn_op(skip_Proj(get_Block_cfgpred(n, 0))) == op_Start) &&
560       (get_nodes_block(skip_Proj(get_Block_cfgpred(n, 0))) == n)) {
561     return 1;
562   }
563 #if 0
564   /*  @@@ Bad condition:
565       not possible in interprocedural view as outermost_graph is
566       not necessarily the only with a dead-end start block.
567       Besides current_ir_graph is not set properly. */
568   if ((get_irn_op(n) == op_Block) &&
569       (n == get_irg_start_block(current_ir_graph))) {
570     if ((!get_interprocedural_view())  ||
571     (current_ir_graph == outermost_ir_graph))
572       return 1;
573   }
574 #endif
575   return 0;
576 }
577
578 /* When to walk from nodes to blocks. Only for Control flow operations? */
579 static INLINE int
580 get_start_index(ir_node *n) {
581 #undef BLOCK_BEFORE_NODE
582 #define BLOCK_BEFORE_NODE 1
583
584 #if BLOCK_BEFORE_NODE
585
586   /* This version assures, that all nodes are ordered absolutely.  This allows
587      to undef all nodes in the heap analysis if the block is false, which means
588      not reachable.
589      I.e., with this code, the order on the loop tree is correct. But a (single)
590      test showed the loop tree is deeper.   */
591   if (get_irn_op(n) == op_Phi   ||
592       get_irn_op(n) == op_Block ||
593       (get_irn_op(n) == op_Filter && get_interprocedural_view()) ||
594       (get_irg_pinned(get_irn_irg(n)) == op_pin_state_floats &&
595        get_irn_pinned(n) == op_pin_state_floats))
596     // Here we could test for backedge at -1 which is illegal
597     return 0;
598   else
599     return -1;
600
601 #else
602
603   /* This version causes deeper loop trees (at least we verified this
604      for Polymor).
605      But it guarantees that Blocks are analysed before nodes contained in the
606      block.  If so, we can set the value to undef if the block is not \
607      executed. */
608    if (is_cfop(n) || is_fragile_op(n) || get_irn_op(n) == op_Start)
609      return -1;
610    else
611      return 0;
612
613 #endif
614 }
615
616 /* Test for legal loop header: Block, Phi, ... */
617 static INLINE int is_possible_loop_head(ir_node *n) {
618   ir_op *op = get_irn_op(n);
619   return ((op == op_Block) ||
620           (op == op_Phi) ||
621           ((op == op_Filter) && get_interprocedural_view()));
622 }
623
624 /* Returns non-zero if n is a loop header, i.e., it is a Block, Phi
625    or Filter node and has predecessors within the loop and out
626    of the loop.
627    @arg root: only needed for assertion. */
628 static int
629 is_head (ir_node *n, ir_node *root)
630 {
631   int i, arity;
632   int some_outof_loop = 0, some_in_loop = 0;
633
634   /* Test for legal loop header: Block, Phi, ... */
635   if (!is_possible_loop_head(n))
636     return 0;
637
638   if (!is_outermost_Start(n)) {
639     arity = get_irn_arity(n);
640     for (i = get_start_index(n); i < arity; i++) {
641       ir_node *pred = get_irn_n(n, i);
642       assert(pred);
643       if (is_backedge(n, i)) continue;
644       if (!irn_is_in_stack(pred)) {
645         some_outof_loop = 1;
646       } else {
647         if(get_irn_uplink(pred) < get_irn_uplink(root)) {
648           assert(get_irn_uplink(pred) >= get_irn_uplink(root));
649         }
650         some_in_loop = 1;
651       }
652     }
653   }
654   return some_outof_loop && some_in_loop;
655 }
656
657 /**
658  * Returns non-zero if n is possible loop head of an endless loop.
659  * I.e., it is a Block, Phi or Filter node and has only predecessors
660  * within the loop.
661  * @param root: only needed for assertion.
662  */
663 static int
664 is_endless_head (ir_node *n, ir_node *root)
665 {
666   int i, arity;
667   int some_outof_loop = 0, some_in_loop = 0;
668
669   /* Test for legal loop header: Block, Phi, ... */
670   if (!is_possible_loop_head(n))
671     return 0;
672
673   if (!is_outermost_Start(n)) {
674     arity = get_irn_arity(n);
675     for (i = get_start_index(n); i < arity; i++) {
676       ir_node *pred = get_irn_n(n, i);
677       assert(pred);
678       if (is_backedge(n, i)) { continue; }
679       if (!irn_is_in_stack(pred)) {
680         some_outof_loop = 1; //printf(" some out of loop ");
681       } else {
682         if(get_irn_uplink(pred) < get_irn_uplink(root)) {
683           assert(get_irn_uplink(pred) >= get_irn_uplink(root));
684         }
685         some_in_loop = 1;
686       }
687     }
688   }
689   return !some_outof_loop && some_in_loop;
690 }
691
692 /* Returns index of the predecessor with the smallest dfn number
693    greater-equal than limit. */
694 static int
695 smallest_dfn_pred (ir_node *n, int limit)
696 {
697   int i, index = -2, min = -1;
698
699   if (!is_outermost_Start(n)) {
700     int arity = get_irn_arity(n);
701     for (i = get_start_index(n); i < arity; i++) {
702       ir_node *pred = get_irn_n(n, i);
703       assert(pred);
704       if (is_backedge(n, i) || !irn_is_in_stack(pred)) continue;
705       if (get_irn_dfn(pred) >= limit && (min == -1 || get_irn_dfn(pred) < min)) {
706         index = i;
707         min = get_irn_dfn(pred);
708       }
709     }
710   }
711   return index;
712 }
713
714 /* Returns index of the predecessor with the largest dfn number. */
715 static int
716 largest_dfn_pred (ir_node *n)
717 {
718   int i, index = -2, max = -1;
719
720   if (!is_outermost_Start(n)) {
721     int arity = get_irn_arity(n);
722     for (i = get_start_index(n); i < arity; i++) {
723       ir_node *pred = get_irn_n(n, i);
724       if (is_backedge (n, i) || !irn_is_in_stack(pred)) continue;
725       if (get_irn_dfn(pred) > max) {
726         index = i;
727         max = get_irn_dfn(pred);
728       }
729     }
730   }
731   return index;
732 }
733
734 /** Searches the stack for possible loop heads.  Tests these for backedges.
735     If it finds a head with an unmarked backedge it marks this edge and
736     returns the tail of the loop.
737     If it finds no backedge returns NULL.
738     ("disable_backedge" in fiasco)
739 *
740 *  @param n  A node where uplink == dfn.
741 **/
742
743 static ir_node *
744 find_tail (ir_node *n) {
745   ir_node *m;
746   int i, res_index = -2;
747
748   /*
749     if (!icfg && rm_cyclic_phis && remove_cyclic_phis (n)) return NULL;
750   */
751   m = stack[tos-1];  /* tos = top of stack */
752   if (is_head (m, n)) {
753     res_index = smallest_dfn_pred(m, 0);
754     if ((res_index == -2) &&  /* no smallest dfn pred found. */
755     (n ==  m))
756       return NULL;
757   } else {
758     if (m == n) return NULL;    // Is this to catch Phi - self loops?
759     for (i = tos-2; i >= 0; --i) {
760       m = stack[i];
761
762       if (is_head (m, n)) {
763         res_index = smallest_dfn_pred (m, get_irn_dfn(m) + 1);
764         if (res_index == -2)  /* no smallest dfn pred found. */
765           res_index = largest_dfn_pred (m);
766
767         if ((m == n) && (res_index == -2)) {  /* dont walk past loop head. */
768           i = -1;
769         }
770         break;
771       }
772
773       /* We should not walk past our selves on the stack:  The upcoming nodes
774          are not in this loop. We assume a loop not reachable from Start. */
775       if (m == n) {
776         i = -1;
777         break;
778       }
779
780     }
781
782     if (i < 0) {
783       /* A dead loop not reachable from Start. */
784       for (i = tos-2; i >= 0; --i) {
785         m = stack[i];
786         if (is_endless_head (m, n)) {
787           res_index = smallest_dfn_pred (m, get_irn_dfn(m) + 1);
788           if (res_index == -2)  /* no smallest dfn pred found. */
789             res_index = largest_dfn_pred (m);
790           break;
791         }
792         if (m == n) { break; }  /* It's not an unreachable loop, either. */
793       }
794       //assert(0 && "no head found on stack");
795     }
796
797   }
798   if (res_index <= -2) {
799     /* It's a completely bad loop: without Phi/Block nodes that can
800        be a head. I.e., the code is "dying".  We break the loop by
801        setting Bad nodes. */
802     int arity = get_irn_arity(n);
803     for (i = -1; i < arity; ++i) {
804       set_irn_n(n, i, get_irg_bad(get_irn_irg(n)));
805     }
806     return NULL;
807   }
808   assert (res_index > -2);
809
810   set_backedge (m, res_index);
811   return is_outermost_Start(n) ? NULL : get_irn_n(m, res_index);
812 }
813
814
815 #if EXPERIMENTAL_LOOP_TREE
816
817 /*  ----------------------------------------------------------------
818     AS:  This is experimental code to build loop trees suitable for
819     the heap analysis. Does not work correctly right now... :-(
820
821
822     Search in stack for the corresponding first Call-End-ProjX that
823     corresponds to one of the control flow predecessors of the given
824     block, that is the possible callers.
825     returns: the control predecessor to chose\
826     or       -1 if no corresponding Call-End-Node could be found
827              on the stack.
828     - -------------------------------------------------------------- */
829
830 int search_endproj_in_stack(ir_node *start_block)
831 {
832   int i, j;
833   assert(is_Block(start_block));
834   for(i = tos - 1; i >= 0; --i)
835   {
836     if(get_irn_op(stack[i]) == op_Proj && get_irn_mode(stack[i]) == mode_X &&
837        get_irn_op(get_irn_n(stack[i], 0)) == op_EndReg)
838     {
839       printf("FOUND PROJ!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
840       ir_node *end_projx = stack[i];
841
842       int arity = get_irn_arity(start_block);
843       for(j = 0; j < arity; j++)
844       {
845         ir_node *begin_projx = get_Block_cfgpred(get_irg_start_block(get_irn_irg(end_projx)),
846                                                  get_Proj_proj(end_projx));
847         if(get_irn_n(start_block, j) == begin_projx)
848               {
849                 printf("FOUND IT!!!!!!!!!!!!!!!!!!\n");
850                 return(j);
851               }
852       }
853     }
854   }
855   return(-1);
856 }
857
858
859 static pmap *projx_link = NULL;
860
861 void link_to_reg_end (ir_node *n, void *env) {
862   if(get_irn_op(n) == op_Proj &&
863      get_irn_mode(n) == mode_X &&
864      get_irn_op(get_irn_n(n, 0)) == op_EndReg) {
865       /* Reg End Projx -> Find the CallBegin Projx and hash it */
866       ir_node *end_projx = n;
867       ir_node *begin_projx = get_Block_cfgpred(get_irg_start_block(get_irn_irg(end_projx)),
868                                                get_Proj_proj(end_projx));
869       set_projx_link(begin_projx, end_projx);
870     }
871 }
872
873 void set_projx_link(ir_node *cb_projx, ir_node *end_projx)
874 {
875   if(projx_link == NULL)
876     projx_link = pmap_create();
877   pmap_insert(projx_link, (void *)cb_projx, (void *)end_projx);
878 }
879
880 ir_node *get_projx_link(ir_node *cb_projx)
881 {
882   return((ir_node *) pmap_get(projx_link, (void *)cb_projx));
883 }
884
885 #endif
886
887 static INLINE int
888 is_outermost_loop(ir_loop *l) {
889   return l == get_loop_outer_loop(l);
890 }
891
892
893 /*-----------------------------------------------------------*
894  *                   The core algorithm.                     *
895  *-----------------------------------------------------------*/
896
897 static void scc (ir_node *n) {
898   int i;
899   if (irn_visited(n)) return;
900   mark_irn_visited(n);
901
902   /* Initialize the node */
903   set_irn_dfn(n, current_dfn);      /* Depth first number for this node */
904   set_irn_uplink(n, current_dfn);   /* ... is default uplink. */
905   set_irn_loop(n, NULL);
906   current_dfn ++;
907   push(n);
908
909   /* AS: get_start_index might return -1 for Control Flow Nodes, and thus a negative
910      array index would be passed to is_backedge(). But CFG Nodes dont't have a backedge array,
911      so is_backedge does not access array[-1] but correctly returns false! */
912
913   if (!is_outermost_Start(n)) {
914     int arity = get_irn_arity(n);
915
916     for (i = get_start_index(n); i < arity; i++) {
917       ir_node *m;
918       if (is_backedge(n, i)) continue;
919       m = get_irn_n(n, i); /* get_irn_ip_pred(n, i); */
920       /* if ((!m) || (get_irn_op(m) == op_Unknown)) continue; */
921       scc (m);
922       if (irn_is_in_stack(m)) {
923         /* Uplink of m is smaller if n->m is a backedge.
924            Propagate the uplink to mark the loop. */
925         if (get_irn_uplink(m) < get_irn_uplink(n))
926           set_irn_uplink(n, get_irn_uplink(m));
927       }
928     }
929   }
930
931   if (get_irn_dfn(n) == get_irn_uplink(n)) {
932     /* This condition holds for
933        1) the node with the incoming backedge.
934           That is: We found a loop!
935        2) Straight line code, because no uplink has been propagated, so the
936           uplink still is the same as the dfn.
937
938        But n might not be a proper loop head for the analysis. Proper loop
939        heads are Block and Phi nodes. find_tail searches the stack for
940        Block's and Phi's and takes those nodes as loop heads for the current
941        loop instead and marks the incoming edge as backedge. */
942
943     ir_node *tail = find_tail(n);
944     if (tail) {
945       /* We have a loop, that is no straight line code,
946          because we found a loop head!
947          Next actions: Open a new loop on the loop tree and
948                        try to find inner loops */
949
950 #if NO_LOOPS_WITHOUT_HEAD
951       /* This is an adaption of the algorithm from fiasco / optscc to
952        * avoid loops without Block or Phi as first node.  This should
953        * severely reduce the number of evaluations of nodes to detect
954        * a fixpoint in the heap analysis.
955        * Further it avoids loops without firm nodes that cause errors
956        * in the heap analyses.
957        * But attention:  don't do it for the outermost loop:  This loop
958        * is not iterated.  A first block can be a loop head in case of
959        * an endless recursion. */
960
961       ir_loop *l;
962       int close;
963       if ((get_loop_n_elements(current_loop) > 0) || (is_outermost_loop(current_loop))) {
964         l = new_loop();
965         close = 1;
966       } else {
967         l = current_loop;
968         close = 0;
969       }
970 #else
971       ir_loop *l = new_loop();
972 #endif
973
974       /* Remove the loop from the stack ... */
975       pop_scc_unmark_visit (n);
976
977       /* The current backedge has been marked, that is temporarily eliminated,
978          by find tail. Start the scc algorithm
979          anew on the subgraph that is left (the current loop without the backedge)
980          in order to find more inner loops. */
981       scc (tail);
982
983       assert (irn_visited(n));
984 #if NO_LOOPS_WITHOUT_HEAD
985       if (close)
986 #endif
987         close_loop(l);
988     }
989     else
990     {
991       /* No loop head was found, that is we have straightline code.
992          Pop all nodes from the stack to the current loop. */
993       pop_scc_to_loop(n);
994     }
995   }
996 }
997
998 static void my_scc (ir_node *n) {
999   int i;
1000   if (irn_visited(n)) return;
1001   mark_irn_visited(n);
1002
1003   /* Initialize the node */
1004   set_irn_dfn(n, current_dfn);      /* Depth first number for this node */
1005   set_irn_uplink(n, current_dfn);   /* ... is default uplink. */
1006   set_irn_loop(n, NULL);
1007   current_dfn ++;
1008   push(n);
1009
1010   /* AS: get_start_index might return -1 for Control Flow Nodes, and thus a negative
1011      array index would be passed to is_backedge(). But CFG Nodes dont't have a backedge array,
1012      so is_backedge does not access array[-1] but correctly returns false! */
1013
1014   if (!is_outermost_Start(n)) {
1015     int arity = get_irn_arity(n);
1016
1017     for (i = get_start_index(n); i < arity; i++) {
1018       ir_node *m;
1019       if (is_backedge(n, i)) continue;
1020       m = get_irn_n(n, i); /* get_irn_ip_pred(n, i); */
1021       /* if ((!m) || (get_irn_op(m) == op_Unknown)) continue; */
1022       my_scc (m);
1023       if (irn_is_in_stack(m)) {
1024         /* Uplink of m is smaller if n->m is a backedge.
1025            Propagate the uplink to mark the loop. */
1026         if (get_irn_uplink(m) < get_irn_uplink(n))
1027           set_irn_uplink(n, get_irn_uplink(m));
1028       }
1029     }
1030   }
1031
1032   if (get_irn_dfn(n) == get_irn_uplink(n)) {
1033     /* This condition holds for
1034        1) the node with the incoming backedge.
1035           That is: We found a loop!
1036        2) Straight line code, because no uplink has been propagated, so the
1037           uplink still is the same as the dfn.
1038
1039        But n might not be a proper loop head for the analysis. Proper loop
1040        heads are Block and Phi nodes. find_tail searches the stack for
1041        Block's and Phi's and takes those nodes as loop heads for the current
1042        loop instead and marks the incoming edge as backedge. */
1043
1044     ir_node *tail = find_tail(n);
1045     if (tail) {
1046       /* We have a loop, that is no straight line code,
1047          because we found a loop head!
1048          Next actions: Open a new loop on the loop tree and
1049                        try to find inner loops */
1050
1051 #if NO_LOOPS_WITHOUT_HEAD
1052       /* This is an adaption of the algorithm from fiasco / optscc to
1053        * avoid loops without Block or Phi as first node.  This should
1054        * severely reduce the number of evaluations of nodes to detect
1055        * a fixpoint in the heap analysis.
1056        * Further it avoids loops without firm nodes that cause errors
1057        * in the heap analyses. */
1058
1059       ir_loop *l;
1060       int close;
1061       if ((get_loop_n_elements(current_loop) > 0) || (is_outermost_loop(current_loop))) {
1062         l = new_loop();
1063         close = 1;
1064       } else {
1065         l = current_loop;
1066         close = 0;
1067       }
1068 #else
1069       ir_loop *l = new_loop();
1070 #endif
1071
1072       /* Remove the loop from the stack ... */
1073       pop_scc_unmark_visit (n);
1074
1075       /* The current backedge has been marked, that is temporarily eliminated,
1076          by find tail. Start the scc algorithm
1077          anew on the subgraph that is left (the current loop without the backedge)
1078          in order to find more inner loops. */
1079       my_scc (tail);
1080
1081       assert (irn_visited(n));
1082 #if NO_LOOPS_WITHOUT_HEAD
1083       if (close)
1084 #endif
1085         close_loop(l);
1086     }
1087     else
1088     {
1089       /* No loop head was found, that is we have straightline code.
1090          Pop all nodes from the stack to the current loop. */
1091       pop_scc_to_loop(n);
1092     }
1093   }
1094 }
1095
1096 /* Constructs backedge information for irg. In interprocedural view constructs
1097    backedges for all methods called by irg, too. */
1098 int construct_backedges(ir_graph *irg) {
1099   ir_graph *rem = current_ir_graph;
1100   ir_loop *head_rem;
1101
1102   assert(!get_interprocedural_view() &&
1103      "not implemented, use construct_ip_backedges");
1104
1105   max_loop_depth = 0;
1106   current_ir_graph   = irg;
1107   outermost_ir_graph = irg;
1108
1109   init_scc(current_ir_graph);
1110
1111   current_loop = NULL;
1112   new_loop();  /* sets current_loop */
1113   head_rem = current_loop; /* Just for assertion */
1114
1115   inc_irg_visited(current_ir_graph);
1116
1117   scc(get_irg_end(current_ir_graph));
1118
1119   assert(head_rem == current_loop);
1120   set_irg_loop(current_ir_graph, current_loop);
1121   set_irg_loopinfo_state(current_ir_graph, loopinfo_consistent);
1122   assert(get_irg_loop(current_ir_graph)->kind == k_ir_loop);
1123   /*
1124   irg->loops = current_loop;
1125   if (icfg == 1) {
1126     int count = 0;
1127     int depth = 0;
1128     count_loop (the_loop, &count, &depth);
1129     }
1130   }
1131   */
1132   current_ir_graph = rem;
1133
1134   return max_loop_depth;
1135 }
1136
1137
1138 #ifdef INTERPROCEDURAL_VIEW
1139 int construct_ip_backedges (void) {
1140   ir_graph *rem = current_ir_graph;
1141   int rem_ipv = get_interprocedural_view();
1142   int i;
1143
1144   max_loop_depth = 0;
1145   assert(get_irp_ip_view_state() == ip_view_valid);
1146
1147   outermost_ir_graph = get_irp_main_irg();
1148
1149   init_ip_scc();
1150
1151   current_loop = NULL;
1152   new_loop();  /* sets current_loop */
1153   set_interprocedural_view(1);
1154
1155   inc_max_irg_visited();
1156   for (i = 0; i < get_irp_n_irgs(); i++)
1157     set_irg_visited(get_irp_irg(i), get_max_irg_visited());
1158
1159   /** We have to start the walk at the same nodes as cg_walk. **/
1160   /* Walk starting at unreachable procedures. Only these
1161    * have End blocks visible in interprocedural view. */
1162   for (i = 0; i < get_irp_n_irgs(); i++) {
1163     ir_node *sb;
1164     current_ir_graph = get_irp_irg(i);
1165
1166     sb = get_irg_start_block(current_ir_graph);
1167
1168     if ((get_Block_n_cfgpreds(sb) > 1) ||
1169     (get_nodes_block(get_Block_cfgpred(sb, 0)) != sb)) continue;
1170
1171     scc(get_irg_end(current_ir_graph));
1172   }
1173
1174   /* Check whether we walked all procedures: there could be procedures
1175      with cyclic calls but no call from the outside. */
1176   for (i = 0; i < get_irp_n_irgs(); i++) {
1177     ir_node *sb;
1178     current_ir_graph = get_irp_irg(i);
1179
1180     /* Test start block: if inner procedure end and end block are not
1181      * visible and therefore not marked. */
1182     sb = get_irg_start_block(current_ir_graph);
1183     if (get_irn_visited(sb) < get_irg_visited(current_ir_graph)) scc(sb);
1184   }
1185
1186   /* Walk all endless loops in inner procedures.
1187    * We recognize an inner procedure if the End node is not visited. */
1188   for (i = 0; i < get_irp_n_irgs(); i++) {
1189     ir_node *e;
1190     current_ir_graph = get_irp_irg(i);
1191
1192     e = get_irg_end(current_ir_graph);
1193     if (get_irn_visited(e) < get_irg_visited(current_ir_graph)) {
1194       int j;
1195       /* Don't visit the End node. */
1196       for (j = 0; j < get_End_n_keepalives(e); j++) scc(get_End_keepalive(e, j));
1197     }
1198   }
1199
1200   set_irg_loop(outermost_ir_graph, current_loop);
1201   set_irg_loopinfo_state(current_ir_graph, loopinfo_ip_consistent);
1202   assert(get_irg_loop(outermost_ir_graph)->kind == k_ir_loop);
1203
1204   current_ir_graph = rem;
1205   set_interprocedural_view(rem_ipv);
1206   return max_loop_depth;
1207 }
1208
1209 void my_construct_ip_backedges (void) {
1210   ir_graph *rem = current_ir_graph;
1211   int rem_ipv = get_interprocedural_view();
1212   int i;
1213
1214   assert(get_irp_ip_view_state() == ip_view_valid);
1215
1216   outermost_ir_graph = get_irp_main_irg();
1217
1218   init_ip_scc();
1219
1220   current_loop = NULL;
1221   new_loop();  /* sets current_loop */
1222   set_interprocedural_view(1);
1223
1224   inc_max_irg_visited();
1225   for (i = 0; i < get_irp_n_irgs(); i++)
1226     set_irg_visited(get_irp_irg(i), get_max_irg_visited());
1227
1228   /** We have to start the walk at the same nodes as cg_walk. **/
1229   /* Walk starting at unreachable procedures. Only these
1230    * have End blocks visible in interprocedural view. */
1231   for (i = 0; i < get_irp_n_irgs(); i++) {
1232     ir_node *sb;
1233     current_ir_graph = get_irp_irg(i);
1234
1235     sb = get_irg_start_block(current_ir_graph);
1236
1237     if ((get_Block_n_cfgpreds(sb) > 1) ||
1238     (get_nodes_block(get_Block_cfgpred(sb, 0)) != sb)) continue;
1239
1240     my_scc(get_irg_end(current_ir_graph));
1241   }
1242
1243   /* Check whether we walked all procedures: there could be procedures
1244      with cyclic calls but no call from the outside. */
1245   for (i = 0; i < get_irp_n_irgs(); i++) {
1246     ir_node *sb;
1247     current_ir_graph = get_irp_irg(i);
1248
1249     /* Test start block: if inner procedure end and end block are not
1250      * visible and therefore not marked. */
1251     sb = get_irg_start_block(current_ir_graph);
1252     if (get_irn_visited(sb) < get_irg_visited(current_ir_graph)) scc(sb);
1253   }
1254
1255   /* Walk all endless loops in inner procedures.
1256    * We recognize an inner procedure if the End node is not visited. */
1257   for (i = 0; i < get_irp_n_irgs(); i++) {
1258     ir_node *e;
1259     current_ir_graph = get_irp_irg(i);
1260
1261     e = get_irg_end(current_ir_graph);
1262     if (get_irn_visited(e) < get_irg_visited(current_ir_graph)) {
1263       int j;
1264       /* Don't visit the End node. */
1265       for (j = 0; j < get_End_n_keepalives(e); j++) scc(get_End_keepalive(e, j));
1266     }
1267   }
1268
1269   set_irg_loop(outermost_ir_graph, current_loop);
1270   set_irg_loopinfo_state(current_ir_graph, loopinfo_ip_consistent);
1271   assert(get_irg_loop(outermost_ir_graph)->kind == k_ir_loop);
1272
1273   current_ir_graph = rem;
1274   set_interprocedural_view(rem_ipv);
1275 }
1276 #endif
1277
1278 static void reset_backedges(ir_node *n) {
1279   if (is_possible_loop_head(n)) {
1280 #ifdef INTERPROCEDURAL_VIEW
1281     int rem = get_interprocedural_view();
1282
1283     set_interprocedural_view(1);
1284     clear_backedges(n);
1285     set_interprocedural_view(1);
1286     clear_backedges(n);
1287     set_interprocedural_view(rem);
1288 #else
1289     clear_backedges(n);
1290 #endif
1291   }
1292 }
1293
1294
1295 /*
1296 static void loop_reset_backedges(ir_loop *l) {
1297   int i;
1298   reset_backedges(get_loop_node(l, 0));
1299   for (i = 0; i < get_loop_n_nodes(l); ++i)
1300     set_irn_loop(get_loop_node(l, i), NULL);
1301   for (i = 0; i < get_loop_n_sons(l); ++i) {
1302     loop_reset_backedges(get_loop_son(l, i));
1303   }
1304 }
1305 */
1306
1307 static void loop_reset_node(ir_node *n, void *env) {
1308   (void) env;
1309   set_irn_loop(n, NULL);
1310   reset_backedges(n);
1311 }
1312
1313
1314 /** Removes all loop information.
1315     Resets all backedges */
1316 void free_loop_information(ir_graph *irg) {
1317   /* We can not use this recursion, as the loop might contain
1318      illegal nodes by now.  Why else would we throw away the
1319      representation?
1320   if (get_irg_loop(irg)) loop_reset_backedges(get_irg_loop(irg));
1321   */
1322   irg_walk_graph(irg, loop_reset_node, NULL, NULL);
1323   set_irg_loop(irg, NULL);
1324   set_irg_loopinfo_state(current_ir_graph, loopinfo_none);
1325   /* We cannot free the loop nodes, they are on the obstack. */
1326 }
1327
1328
1329 void free_all_loop_information (void) {
1330   int i;
1331 #ifdef INTERPROCEDURAL_VIEW
1332   int rem = get_interprocedural_view();
1333   set_interprocedural_view(1);  /* To visit all filter nodes */
1334 #endif
1335   for (i = 0; i < get_irp_n_irgs(); i++) {
1336     free_loop_information(get_irp_irg(i));
1337   }
1338 #ifdef INTERPROCEDURAL_VIEW
1339   set_interprocedural_view(rem);
1340 #endif
1341 }
1342
1343
1344
1345
1346
1347 /* Debug stuff *************************************************/
1348
1349 static int test_loop_node(ir_loop *l) {
1350   int i, has_node = 0, found_problem = 0;
1351   loop_element le;
1352
1353   assert(l && l->kind == k_ir_loop);
1354
1355   if (get_loop_n_elements(l) == 0) {
1356     found_problem = 1;
1357     dump_loop(l, "-ha");
1358   }
1359
1360   le = get_loop_element(l, 0);
1361   if (*(le.kind) != k_ir_node) {
1362     assert(le.kind && *(le.kind) == k_ir_loop);
1363
1364     found_problem = 1;
1365     dump_loop(l, "-ha");
1366   }
1367
1368   if ((*(le.kind) == k_ir_node) && !is_possible_loop_head(le.node)) {
1369     found_problem = 1;
1370     dump_loop(l, "-ha");
1371   }
1372
1373   if ((get_loop_depth(l) != 0) &&
1374       (*(le.kind) == k_ir_node) && !has_backedges(le.node)) {
1375     found_problem = 1;
1376     dump_loop(l, "-ha");
1377   }
1378
1379   /* Recur */
1380   has_node = 0;
1381   for (i = 0; i < get_loop_n_elements(l); ++i) {
1382     le = get_loop_element(l, i);
1383     if (*(le.kind) == k_ir_node)
1384       has_node++;
1385     else
1386       if (test_loop_node(le.son)) found_problem = 1;
1387   }
1388
1389   if (has_node == 0) {
1390     found_problem = 1;
1391     dump_loop(l, "-ha");
1392   }
1393
1394   return found_problem;
1395 }
1396
1397 /** Prints all loop nodes that
1398  *  - do not have any firm nodes, only loop sons
1399  *  - the header is not a Phi, Block or Filter.
1400  */
1401 void find_strange_loop_nodes(ir_loop *l) {
1402   int found_problem = 0;
1403   found_problem = test_loop_node(l);
1404   printf("Finished Test\n\n");
1405   if (found_problem) exit(0);
1406
1407 }
1408
1409 /* ------------------------------------------------------------------- */
1410 /* Simple analyses based on the loop information                       */
1411 /* ------------------------------------------------------------------- */
1412
1413 int is_loop_variant(ir_loop *l, ir_loop *b) {
1414   int i, n_elems;
1415
1416   if (l == b) return 1;
1417
1418   n_elems = get_loop_n_elements(l);
1419   for (i = 0; i < n_elems; ++i) {
1420     loop_element e = get_loop_element(l, i);
1421     if (is_ir_loop(e.kind))
1422       if (is_loop_variant(e.son, b))
1423         return 1;
1424   }
1425
1426   return 0;
1427 }
1428
1429 /* Test whether a value is loop invariant.
1430  *
1431  * @param n      The node to be tested.
1432  * @param block  A block node.  We pass the block, not the loop as we must
1433  *               start off with a block loop to find all proper uses.
1434  *
1435  * Returns non-zero, if the node n is not changed in the loop block
1436  * belongs to or in inner loops of this blocks loop. */
1437 int is_loop_invariant(ir_node *n, ir_node *block) {
1438   ir_loop *l = get_irn_loop(block);
1439   ir_node *b = (is_Block(n)) ? n : get_nodes_block(n);
1440   return !is_loop_variant(l, get_irn_loop(b));
1441 }