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));
/*
* 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;
}