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
f1b19d7d
Commit
f1b19d7d
authored
Aug 22, 2006
by
Matthias Braun
Browse files
- More verification checks before code emit
- Respect vrfy option
parent
48071aea
Changes
4
Hide whitespace changes
Inline
Side-by-side
ir/be/belive.c
View file @
f1b19d7d
...
...
@@ -12,6 +12,7 @@
#include
"irgwalk.h"
#include
"irprintf_t.h"
#include
"irbitset.h"
#include
"irdump_t.h"
#include
"beutil.h"
#include
"belive_t.h"
...
...
@@ -637,6 +638,8 @@ void be_liveness_dumpto(const be_lv_t *lv, const char *cls_name)
*/
static
void
dom_check
(
ir_node
*
irn
,
void
*
data
)
{
int
*
problem_found
=
data
;
if
(
!
is_Block
(
irn
)
&&
irn
!=
get_irg_end
(
get_irn_irg
(
irn
)))
{
int
i
,
n
;
ir_node
*
bl
=
get_nodes_block
(
irn
);
...
...
@@ -649,18 +652,24 @@ static void dom_check(ir_node *irn, void *data)
if
(
is_Phi
(
irn
))
use_bl
=
get_Block_cfgpred_block
(
bl
,
i
);
if
(
!
block_dominates
(
def_bl
,
use_bl
))
{
ir_fprintf
(
stderr
,
"%+F in %+F must dominate %+F for user %+F
\n
"
,
op
,
def_bl
,
use_bl
,
irn
);
assert
(
0
);
if
(
get_irn_opcode
(
use_bl
)
!=
iro_Bad
&&
get_irn_opcode
(
def_bl
)
!=
iro_Bad
&&
!
block_dominates
(
def_bl
,
use_bl
))
{
ir_fprintf
(
stderr
,
"Verify warning: %+F in %+F must dominate %+F for user %+F (%s)
\n
"
,
op
,
def_bl
,
use_bl
,
irn
,
get_irg_dump_name
(
get_irn_irg
(
op
)));
*
problem_found
=
1
;
}
}
}
}
/* Check, if the SSA dominance property is fulfilled. */
void
be_check_dominance
(
ir_graph
*
irg
)
int
be_check_dominance
(
ir_graph
*
irg
)
{
irg_walk_graph
(
irg
,
dom_check
,
NULL
,
NULL
);
int
problem_found
=
0
;
irg_walk_graph
(
irg
,
dom_check
,
NULL
,
&
problem_found
);
return
!
problem_found
;
}
pset
*
be_liveness_transfer
(
const
arch_env_t
*
arch_env
,
const
arch_register_class_t
*
cls
,
ir_node
*
irn
,
pset
*
live
)
...
...
ir/be/belive.h
View file @
f1b19d7d
...
...
@@ -116,8 +116,9 @@ int (be_is_live_end)(const be_lv_t *lv, const ir_node *block, const ir_node *irn
/**
* Check, if the SSA dominance property is fulfilled.
* @param irg The graph.
* @return 1 if dominance property is fulfilled, 0 otherwise
*/
void
be_check_dominance
(
ir_graph
*
irg
);
int
be_check_dominance
(
ir_graph
*
irg
);
/**
* The liveness transfer function.
...
...
ir/be/bemain.c
View file @
f1b19d7d
...
...
@@ -28,6 +28,7 @@
#include
"iredges_t.h"
#include
"irloop_t.h"
#include
"irtools.h"
#include
"irvrfy.h"
#include
"return.h"
#include
"firmstat.h"
...
...
@@ -560,8 +561,19 @@ static void be_main_loop(FILE *file_handle)
/* check schedule and register allocation */
BE_TIMER_PUSH
(
t_verify
);
be_sched_vrfy
(
birg
.
irg
,
vrfy_option
);
be_verify_register_allocation
(
env
.
arch_env
,
birg
.
irg
);
if
(
vrfy_option
==
BE_VRFY_WARN
)
{
//irg_verify(birg.irg, VRFY_ENFORCE_SSA);
be_check_dominance
(
birg
.
irg
);
be_verify_schedule
(
birg
.
irg
);
be_verify_register_allocation
(
env
.
arch_env
,
birg
.
irg
);
}
else
if
(
vrfy_option
==
BE_VRFY_ASSERT
)
{
//assert(irg_verify(birg.irg, VRFY_ENFORCE_SSA) && "irg verification failed");
assert
(
be_check_dominance
(
birg
.
irg
)
&&
"Dominance verification failed"
);
assert
(
be_verify_schedule
(
birg
.
irg
)
&&
"Schedule verification failed"
);
assert
(
be_verify_register_allocation
(
env
.
arch_env
,
birg
.
irg
)
&&
"register allocation verification failed"
);
}
BE_TIMER_POP
(
t_verify
);
/* emit assembler code */
...
...
ir/be/test/makereport.sh
View file @
f1b19d7d
EDG_BIN
=
"edg
cpfe
"
EDG_CFLAGS
=
"--c --gnu=30305 -I/usr/lib/gcc-lib/i
5
86-
suse
-linux
/3.3.5
/include"
EDG_BIN
=
"edg"
EDG_CFLAGS
=
"--c --gnu=30305 -I/usr/lib/gcc-lib/i
6
86-
pc
-linux
-gnu/4.1.1
/include"
GCC_CFLAGS
=
"-O3 -g -fomit-frame-pointer"
LINKFLAGS
=
"-lm"
TIMEOUT_COMPILE
=
300
...
...
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