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
ed19abee
Commit
ed19abee
authored
Sep 13, 2009
by
Michael Beck
Browse files
- add graph pass for edges_verify()
[r26529]
parent
33249fb0
Changes
2
Show whitespace changes
Inline
Side-by-side
include/libfirm/iredges.h
View file @
ed19abee
...
...
@@ -166,6 +166,16 @@ int edges_verify(ir_graph *irg);
*/
void
edges_init_dbg
(
int
do_dbg
);
/**
* Creates an ir_graph pass for edges_verify().
*
* @param name the name of this pass or NULL
* @param assert_on_problem assert if problems were found
*
* @return the newly created ir_graph pass
*/
ir_graph_pass_t
*
irg_verify_edges_pass
(
const
char
*
name
,
unsigned
assert_on_problem
);
/************************************************************************/
/* Begin Old Interface */
/************************************************************************/
...
...
ir/ir/iredges.c
View file @
ed19abee
...
...
@@ -40,6 +40,7 @@
#include
"set.h"
#include
"bitset.h"
#include
"error.h"
#include
"irpass_t.h"
#include
"iredgeset.h"
#include
"hashptr.h"
...
...
@@ -75,8 +76,15 @@
*/
typedef
void
(
set_edge_func_t
)(
ir_node
*
src
,
int
pos
,
ir_node
*
tgt
);
/**
* A function that returns the "arity" of a given edge kind
* for a node.
*/
typedef
int
(
get_edge_src_arity_func_t
)(
const
ir_node
*
src
);
/**
* A function that returns the pos'th edge of a given edge kind for a node.
*/
typedef
ir_node
*
(
get_edge_src_n_func_t
)(
const
ir_node
*
src
,
int
pos
);
/**
...
...
@@ -93,9 +101,9 @@ typedef struct {
/**
* Get the predecessor block.
*/
static
ir_node
*
get_block_n
(
const
ir_node
*
irn
,
int
pos
)
{
if
(
is_Block
(
irn
))
return
get_Block_cfgpred_block
(
irn
,
pos
);
static
ir_node
*
get_block_n
(
const
ir_node
*
block
,
int
pos
)
{
if
(
is_Block
(
block
))
return
get_Block_cfgpred_block
(
block
,
pos
);
/* might be a Bad */
return
NULL
;
}
...
...
@@ -135,6 +143,9 @@ static int edges_dbg = 0;
static
long
last_edge_num
=
-
1
;
#endif
/**
* Returns an ID for the given edge.
*/
static
inline
long
edge_get_id
(
const
ir_edge_t
*
e
)
{
#ifdef DEBUG_libfirm
return
e
->
edge_nr
;
...
...
@@ -871,6 +882,37 @@ int edges_verify(ir_graph *irg) {
return
problem_found
?
1
:
w
.
problem_found
;
}
struct
pass_t
{
ir_graph_pass_t
pass
;
unsigned
assert_on_problem
;
};
/**
* Wrapper to edges_verify to be run as an ir_graph pass.
*/
static
int
edges_verify_wrapper
(
ir_graph
*
irg
,
void
*
context
)
{
struct
pass_t
*
pass
=
context
;
int
problems_found
=
edges_verify
(
irg
);
/* do NOT rerun the pass if verify is ok :-) */
assert
(
problems_found
&&
pass
->
assert_on_problem
);
return
0
;
}
/* Creates an ir_graph pass for edges_verify(). */
ir_graph_pass_t
*
irg_verify_edges_pass
(
const
char
*
name
,
unsigned
assert_on_problem
)
{
struct
pass_t
*
pass
=
XMALLOCZ
(
struct
pass_t
);
def_graph_pass_constructor
(
&
pass
->
pass
,
name
?
name
:
"edges_verify"
,
edges_verify_wrapper
);
/* neither dump nor verify */
pass
->
pass
.
dump_irg
=
(
DUMP_ON_IRG_FUNC
)
ir_prog_no_dump
;
pass
->
pass
.
verify_irg
=
(
RUN_ON_IRG_FUNC
)
ir_prog_no_verify
;
pass
->
assert_on_problem
=
assert_on_problem
;
return
&
pass
->
pass
;
}
void
init_edges
(
void
)
{
FIRM_DBG_REGISTER
(
dbg
,
DBG_EDGES
);
/* firm_dbg_set_mask(dbg, -1); */
...
...
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