Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Zwinkau
libfirm
Commits
a1d82053
Commit
a1d82053
authored
Aug 21, 2007
by
Michael Beck
Browse files
irg_block_edges_walk() implemented
[r15576]
parent
374fbaf0
Changes
2
Hide whitespace changes
Inline
Side-by-side
include/libfirm/iredges.h
View file @
a1d82053
...
...
@@ -155,9 +155,7 @@ extern void edges_reroute_kind(ir_node *old, ir_node *nw, ir_edge_kind_t kind, i
int
edges_verify
(
ir_graph
*
irg
);
/**
* Set edge verification flag.
*/
void
edges_init_dbg
(
int
do_dbg
);
...
...
@@ -187,15 +185,15 @@ const ir_edge_t *get_irn_edge(ir_graph *irg, const ir_node *src, int pos);
#endif
/**
* Activate all the edges for an irg.
* @param irg The graph to activate the edges for.
*/
* Activate all the edges for an irg.
* @param irg The graph to activate the edges for.
*/
extern
void
edges_activate
(
ir_graph
*
irg
);
/**
* Deactivate all the edges for an irg.
* @param irg The graph.
*/
* Deactivate all the edges for an irg.
* @param irg The graph.
*/
extern
void
edges_deactivate
(
ir_graph
*
irg
);
extern
int
edges_assure
(
ir_graph
*
irg
);
...
...
@@ -203,10 +201,21 @@ extern int edges_assure(ir_graph *irg);
extern
void
edges_node_deleted
(
ir_node
*
irn
,
ir_graph
*
irg
);
/**
* Notify normal and block edges.
*/
* Notify normal and block edges.
*/
extern
void
edges_notify_edge
(
ir_node
*
src
,
int
pos
,
ir_node
*
tgt
,
ir_node
*
old_tgt
,
ir_graph
*
irg
);
/**
* Walks only over Block nodes in the graph. Has it's own visited
* flag, so that it can be interleaved with the other walker.
*
* @param block the start block
* @param pre the pre visit function
* @param post the post visit function
* @param env the environment for the walker
*/
void
irg_block_edges_walk
(
ir_node
*
block
,
irg_walk_func
*
pre
,
irg_walk_func
*
post
,
void
*
env
);
void
edges_reset_private_data
(
ir_graph
*
irg
,
int
offset
,
size_t
size
);
/************************************************************************/
...
...
ir/ir/iredges.c
View file @
a1d82053
...
...
@@ -838,3 +838,38 @@ void dump_all_out_edges(ir_node *irn)
}
}
}
static
void
irg_block_edges_walk2
(
ir_node
*
bl
,
irg_walk_func
*
pre
,
irg_walk_func
*
post
,
void
*
env
)
{
const
ir_edge_t
*
edge
,
*
next
;
if
(
Block_not_block_visited
(
bl
))
{
mark_Block_block_visited
(
bl
);
if
(
pre
)
pre
(
bl
,
env
);
foreach_out_edge_kind_safe
(
bl
,
edge
,
next
,
EDGE_KIND_BLOCK
)
{
/* find the corresponding successor block. */
ir_node
*
pred
=
get_edge_src_irn
(
edge
);
irg_block_edges_walk2
(
pred
,
pre
,
post
,
env
);
}
if
(
post
)
post
(
bl
,
env
);
}
}
/* Walks only over Block nodes in the graph. Has it's own visited
flag, so that it can be interleaved with the other walker. */
void
irg_block_edges_walk
(
ir_node
*
node
,
irg_walk_func
*
pre
,
irg_walk_func
*
post
,
void
*
env
)
{
assert
(
edges_activated
(
current_ir_graph
));
assert
(
is_Block
(
node
));
inc_irg_block_visited
(
current_ir_graph
);
irg_block_edges_walk2
(
node
,
pre
,
post
,
env
);
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment