-
- /*
- * Now it is left to check, if the sequence from the last use of 'b'
- * (or the end of the block b2, if b is live out)
- * to the def of 'b' contains a use and NOT the def of 'a'. Then they
- * also interfere
- */
- {
- const ir_node *irn;
-
- /* Initialize the liveness. */
- int a_live = lo_a;
- int b_live = lo_b;
-
- /* Go from the end of block b2 and try to detect the liveness. */
- sched_foreach_reverse(b2, irn) {
- int i, n;
-
- /*
- * If the definition of 'a' was found 'a' and 'b' interfere, if
- * 'b' is live here.
- */
- if(irn == a)
- return b_live;
-
- /* Same goes for 'b'. */
- if(irn == b)
- return a_live;
-
- /* If 'a' is not yet live, search for a use. */
- if(!a_live) {
- for(i = 0, n = get_irn_arity(irn); i < n; ++i)
- if(get_irn_n(irn, i) == a) {
- a_live = 1;
- break;
- }
- }
-
- /* Same for 'b' */
- if(!b_live) {
- for(i = 0, n = get_irn_arity(irn); i < n; ++i)
- if(get_irn_n(irn, i) == b) {
- b_live = 1;
- break;
- }
- }
-
- }
- }
-
- assert(0 && "You may never reach this place");
-
- /* This is never reached */
- return 0;