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
ee815f83
Commit
ee815f83
authored
Dec 03, 2012
by
Christoph Mallon
Browse files
belive: Remove the visited bitset for liveness calculation.
Simply check, whether any liveness bits were set before.
parent
29e8f322
Changes
2
Hide whitespace changes
Inline
Side-by-side
ir/be/belive.c
View file @
ee815f83
...
...
@@ -208,7 +208,6 @@ static struct {
be_lv_t
*
lv
;
/**< The liveness object. */
ir_node
*
def
;
/**< The node (value). */
ir_node
*
def_block
;
/**< The block of def. */
bitset_t
*
visited
;
/**< A set were all visited blocks are recorded. */
}
re
;
/**
...
...
@@ -220,29 +219,28 @@ static struct {
*/
static
void
live_end_at_block
(
ir_node
*
const
block
,
be_lv_state_t
const
state
)
{
be_lv_info_node_t
*
const
n
=
be_lv_get_or_set
(
re
.
lv
,
block
,
re
.
def
);
be_lv_info_node_t
*
const
n
=
be_lv_get_or_set
(
re
.
lv
,
block
,
re
.
def
);
be_lv_state_t
const
before
=
n
->
flags
;
assert
(
state
==
be_lv_state_end
||
state
==
(
be_lv_state_end
|
be_lv_state_out
));
DBG
((
dbg
,
LEVEL_2
,
"marking %+F live %s at %+F
\n
"
,
re
.
def
,
state
&
be_lv_state_out
?
"end+out"
:
"end"
,
block
));
n
->
flags
|=
state
;
bitset_t
*
const
visited
=
re
.
visited
;
if
(
!
bitset_is_set
(
visited
,
get_irn_idx
(
block
)))
{
bitset_set
(
visited
,
get_irn_idx
(
block
));
/* There is no need to recurse further, if we where here before (i.e., any
* live state bits were set before). */
if
(
before
!=
be_lv_state_none
)
return
;
/*
* If this block is not the definition block, we have to go up
* further.
*/
if
(
re
.
def_block
!=
block
)
{
int
i
;
/* Stop going up further, if this is the block of the definition. */
if
(
re
.
def_block
==
block
)
return
;
DBG
((
dbg
,
LEVEL_2
,
"marking %+F live in at %+F
\n
"
,
re
.
def
,
block
));
n
->
flags
|=
be_lv_state_in
;
DBG
((
dbg
,
LEVEL_2
,
"marking %+F live in at %+F
\n
"
,
re
.
def
,
block
));
n
->
flags
|=
be_lv_state_in
;
for
(
i
=
get_Block_n_cfgpreds
(
block
)
-
1
;
i
>=
0
;
--
i
)
live_end_at
_block
(
get_Block_cfgpred_block
(
block
,
i
)
,
be_lv_state_end
|
be_lv_state_out
)
;
}
for
(
int
i
=
get_Block_n_cfgpreds
(
block
)
;
i
--
!=
0
;)
{
ir_node
*
const
pred
_block
=
get_Block_cfgpred_block
(
block
,
i
);
live_end_at_block
(
pred_block
,
be_lv_state_end
|
be_lv_state_out
);
}
}
...
...
@@ -259,10 +257,7 @@ typedef struct lv_remove_walker_t {
*/
static
void
liveness_for_node
(
ir_node
*
irn
)
{
ir_node
*
def_block
;
bitset_clear_all
(
re
.
visited
);
def_block
=
get_nodes_block
(
irn
);
ir_node
*
const
def_block
=
get_nodes_block
(
irn
);
re
.
def
=
irn
;
re
.
def_block
=
def_block
;
...
...
@@ -351,8 +346,7 @@ void be_liveness_compute_sets(be_lv_t *lv)
* will not need to move around the data. */
irg_walk_graph
(
lv
->
irg
,
NULL
,
collect_liveness_nodes
,
nodes
);
re
.
lv
=
lv
;
re
.
visited
=
bitset_malloc
(
n
);
re
.
lv
=
lv
;
for
(
i
=
0
;
i
<
n
;
++
i
)
{
if
(
nodes
[
i
]
!=
NULL
)
...
...
@@ -360,7 +354,6 @@ void be_liveness_compute_sets(be_lv_t *lv)
}
DEL_ARR_F
(
nodes
);
free
(
re
.
visited
);
be_timer_pop
(
T_LIVE
);
...
...
@@ -430,10 +423,8 @@ void be_liveness_introduce(be_lv_t *lv, ir_node *irn)
{
/* Don't compute liveness information for non-data nodes. */
if
(
lv
->
sets_valid
&&
is_liveness_node
(
irn
))
{
re
.
lv
=
lv
;
re
.
visited
=
bitset_malloc
(
get_irg_last_idx
(
lv
->
irg
));
re
.
lv
=
lv
;
liveness_for_node
(
irn
);
bitset_free
(
re
.
visited
);
}
}
...
...
ir/be/belive.h
View file @
ee815f83
...
...
@@ -30,9 +30,10 @@
#include
"irnodeset.h"
typedef
enum
{
be_lv_state_in
=
1
,
be_lv_state_end
=
2
,
be_lv_state_out
=
4
,
be_lv_state_none
=
0
,
be_lv_state_in
=
1
,
be_lv_state_end
=
2
,
be_lv_state_out
=
4
,
}
be_lv_state_t
;
ENUM_BITSET
(
be_lv_state_t
)
...
...
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