** - execute the post function after recursion
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
# include "irnode.h"
# include "irgraph.h" /* visited flag */
int i;
assert(node);
- if(get_irn_visited(node) < get_irg_visited(current_ir_graph)) {
+/* printf(" - "); DDMSG2(node); */
+
+ if (get_irn_visited(node) < get_irg_visited(current_ir_graph)) {
+
+/* printf(" -> "); DDMSG2(node); */
set_irn_visited(node, get_irg_visited(current_ir_graph));
- if(pre) {
+
+ if (pre) {
pre(node, env);
}
- if (is_no_Block(node))
+ if (is_no_Block(node)) {
irg_walk_2(get_nodes_Block(node), pre, post, env);
- for(i = get_irn_arity(node) - 1; i >= 0; --i) {
+ }
+ for (i = get_irn_arity(node) - 1; i >= 0; --i) {
+/* printf(" "); DDMSG2(node); */
+/* printf(" "); DDMSG2(get_irn_n(node, i)); */
+
irg_walk_2(get_irn_n(node, i), pre, post, env);
}
- if(post)
+/* printf(" <- "); DDMSG2(node); */
+ if (post)
post(node, env);
}
return;
void (pre)(ir_node*, void*), void (post)(ir_node*, void*),
void *env)
{
- unsigned long i;
-
assert(node);
- i = get_irg_visited(current_ir_graph);
- ++i;
- set_irg_visited(current_ir_graph, i);
+ inc_irg_visited (current_ir_graph);
irg_walk_2(node, pre, post, env);
return;
}
/***************************************************************************/
-void irg_block_walk_2(ir_node *node,
- void (pre)(ir_node*, void*), void (post)(ir_node*, void*),
- void *env)
+void irg_block_walk_2(ir_node *node, void (pre)(ir_node*, void*),
+ void (post)(ir_node*, void*), void *env)
{
int i;
assert(get_irn_opcode(node) == iro_Block);
-
- if(get_Block_block_visit(node) < get_irg_block_visited(current_ir_graph)) {
- set_Block_block_visit(node, get_irg_block_visited(current_ir_graph));
+ if(get_Block_block_visited(node) < get_irg_block_visited(current_ir_graph)) {
+ set_Block_block_visited(node, get_irg_block_visited(current_ir_graph));
if(pre)
pre(node, env);
void (pre)(ir_node*, void*), void (post)(ir_node*, void*),
void *env)
{
- unsigned long i;
-
assert(node);
- i = get_irg_block_visited(current_ir_graph);
- ++i;
- set_irg_block_visited(current_ir_graph, i);
+ inc_irg_block_visited(current_ir_graph);
if (is_no_Block(node)) node = get_nodes_Block(node);
assert(get_irn_opcode(node) == iro_Block);
irg_block_walk_2(node, pre, post, env);