+/**
+ * specialized version of irg_walk_2, called if only pre callback exists
+ *
+ * @return number of visited nodes
+ */
+static unsigned
+irg_walk_2_pre(ir_node *node, irg_walk_func *pre, void * env) {
+ int i;
+ unsigned cnt = 1;
+ ir_graph *irg = current_ir_graph;
+
+ set_irn_visited(node, irg->visited);
+
+ pre(node, env);
+
+ if (node->op != op_Block) {
+ ir_node *pred = get_irn_n(node, -1);
+ if (pred->visited < irg->visited)
+ cnt += irg_walk_2_pre(pred, pre, env);
+ }
+ for (i = get_irn_arity(node) - 1; i >= 0; --i) {
+ ir_node *pred = get_irn_n(node, i);
+ if (pred->visited < irg->visited)
+ cnt += irg_walk_2_pre(pred, pre, env);
+ }
+ return cnt;
+}
+
+/**
+ * specialized version of irg_walk_2, called if only post callback exists
+ *
+ * @return number of visited nodes
+ */
+static unsigned
+irg_walk_2_post(ir_node *node, irg_walk_func *post, void * env) {
+ int i;
+ unsigned cnt = 1;
+ ir_graph *irg = current_ir_graph;
+
+ set_irn_visited(node, irg->visited);
+
+ if (node->op != op_Block) {
+ ir_node *pred = get_irn_n(node, -1);
+ if (pred->visited < irg->visited)
+ cnt += irg_walk_2_post(pred, post, env);
+ }
+ for (i = get_irn_arity(node) - 1; i >= 0; --i) {
+ ir_node *pred = get_irn_n(node, i);
+ if (pred->visited < irg->visited)
+ cnt += irg_walk_2_post(pred, post, env);
+ }
+
+ post(node, env);
+
+ return cnt;
+}
+
+/**
+ * specialized version of irg_walk_2, called if pre and post callbacks exist
+ *
+ * @return number of visited nodes
+ */
+static unsigned
+irg_walk_2_both(ir_node *node, irg_walk_func *pre, irg_walk_func *post, void * env) {
+ int i;
+ unsigned cnt = 1;
+ ir_graph *irg = current_ir_graph;
+
+ set_irn_visited(node, irg->visited);
+
+ pre(node, env);
+
+ if (node->op != op_Block) {
+ ir_node *pred = get_irn_n(node, -1);
+ if (pred->visited < irg->visited)
+ cnt += irg_walk_2_both(pred, pre, post, env);
+ }
+ for (i = get_irn_arity(node) - 1; i >= 0; --i) {
+ ir_node *pred = get_irn_n(node, i);
+ if (pred->visited < irg->visited)
+ cnt += irg_walk_2_both(pred, pre, post, env);
+ }
+
+ post(node, env);
+
+ return cnt;
+}
+
+/**
+ * Intraprozedural graph walker.
+ *
+ * @return number of visited nodes
+ */
+static unsigned