skip_Tuple() now skips chains of tuple, which can arise
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Thu, 11 Aug 2005 12:47:24 +0000 (12:47 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Thu, 11 Aug 2005 12:47:24 +0000 (12:47 +0000)
after inlining small functions

[r6393]

ir/ir/irnode.c

index 99287dd..bb4ac80 100644 (file)
@@ -2055,6 +2055,7 @@ skip_Tuple (ir_node *node) {
 
   if (!get_opt_normalize()) return node;
 
+restart:
   node = skip_Id(node);
   if (get_irn_op(node) == op_Proj) {
     pred = skip_Id(get_Proj_pred(node));
@@ -2062,17 +2063,21 @@ skip_Tuple (ir_node *node) {
 
     /*
      * Looks strange but calls get_irn_op() only once
-     * most often cases.
+     * in most often cases.
      */
     if (op == op_Proj) { /* nested Tuple ? */
       pred = skip_Id(skip_Tuple(pred));
       op   = get_irn_op(pred);
 
-      if (op == op_Tuple)
-        return get_Tuple_pred(pred, get_Proj_proj(node));
+      if (op == op_Tuple) {
+        node = get_Tuple_pred(pred, get_Proj_proj(node));
+        goto restart;
+      }
+    }
+    else if (op == op_Tuple) {
+      node = get_Tuple_pred(pred, get_Proj_proj(node));
+      goto restart;
     }
-    else if (op == op_Tuple)
-      return get_Tuple_pred(pred, get_Proj_proj(node));
   }
   return node;
 }