mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 04:00:10 +01:00
i965/cfg: Embed exec_node in bblock_link.
In order to remove bblock_link's inheritance of exec_node. Also makes linked list walk code much nicer. Acked-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
a77023c992
commit
58bcf5996d
5 changed files with 25 additions and 23 deletions
|
|
@ -38,11 +38,18 @@ pop_stack(exec_list *list)
|
|||
{
|
||||
bblock_link *link = (bblock_link *)list->get_tail();
|
||||
bblock_t *block = link->block;
|
||||
link->remove();
|
||||
link->link.remove();
|
||||
|
||||
return block;
|
||||
}
|
||||
|
||||
static exec_node *
|
||||
link(void *mem_ctx, bblock_t *block)
|
||||
{
|
||||
bblock_link *l = new(mem_ctx) bblock_link(block);
|
||||
return &l->link;
|
||||
}
|
||||
|
||||
bblock_t::bblock_t() :
|
||||
start_ip(0), end_ip(0), block_num(0)
|
||||
{
|
||||
|
|
@ -60,8 +67,8 @@ bblock_t::bblock_t() :
|
|||
void
|
||||
bblock_t::add_successor(void *mem_ctx, bblock_t *successor)
|
||||
{
|
||||
successor->parents.push_tail(new(mem_ctx) bblock_link(this));
|
||||
children.push_tail(new(mem_ctx) bblock_link(successor));
|
||||
successor->parents.push_tail(link(mem_ctx, this));
|
||||
children.push_tail(link(mem_ctx, successor));
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -113,8 +120,8 @@ cfg_t::cfg_t(exec_list *instructions)
|
|||
/* Push our information onto a stack so we can recover from
|
||||
* nested ifs.
|
||||
*/
|
||||
if_stack.push_tail(new(mem_ctx) bblock_link(cur_if));
|
||||
else_stack.push_tail(new(mem_ctx) bblock_link(cur_else));
|
||||
if_stack.push_tail(link(mem_ctx, cur_if));
|
||||
else_stack.push_tail(link(mem_ctx, cur_else));
|
||||
|
||||
cur_if = cur;
|
||||
cur_else = NULL;
|
||||
|
|
@ -190,8 +197,8 @@ cfg_t::cfg_t(exec_list *instructions)
|
|||
/* Push our information onto a stack so we can recover from
|
||||
* nested loops.
|
||||
*/
|
||||
do_stack.push_tail(new(mem_ctx) bblock_link(cur_do));
|
||||
while_stack.push_tail(new(mem_ctx) bblock_link(cur_while));
|
||||
do_stack.push_tail(link(mem_ctx, cur_do));
|
||||
while_stack.push_tail(link(mem_ctx, cur_while));
|
||||
|
||||
/* Set up the block just after the while. Don't know when exactly
|
||||
* it will start, yet.
|
||||
|
|
@ -275,7 +282,7 @@ cfg_t::set_next_block(bblock_t **cur, bblock_t *block, int ip)
|
|||
|
||||
block->start_ip = ip;
|
||||
block->block_num = num_blocks++;
|
||||
block_list.push_tail(new(mem_ctx) bblock_link(block));
|
||||
block_list.push_tail(link(mem_ctx, block));
|
||||
*cur = block;
|
||||
}
|
||||
|
||||
|
|
@ -285,8 +292,7 @@ cfg_t::make_block_array()
|
|||
blocks = ralloc_array(mem_ctx, bblock_t *, num_blocks);
|
||||
|
||||
int i = 0;
|
||||
foreach_list(block_node, &block_list) {
|
||||
bblock_link *link = (bblock_link *)block_node;
|
||||
foreach_list_typed(bblock_link, link, link, &block_list) {
|
||||
blocks[i++] = link->block;
|
||||
}
|
||||
assert(i == num_blocks);
|
||||
|
|
@ -298,16 +304,14 @@ cfg_t::dump(backend_visitor *v)
|
|||
for (int b = 0; b < this->num_blocks; b++) {
|
||||
bblock_t *block = this->blocks[b];
|
||||
fprintf(stderr, "START B%d", b);
|
||||
foreach_list(node, &block->parents) {
|
||||
bblock_link *link = (bblock_link *)node;
|
||||
foreach_list_typed(bblock_link, link, link, &block->parents) {
|
||||
fprintf(stderr, " <-B%d",
|
||||
link->block->block_num);
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
block->dump(v);
|
||||
fprintf(stderr, "END B%d", b);
|
||||
foreach_list(node, &block->children) {
|
||||
bblock_link *link = (bblock_link *)node;
|
||||
foreach_list_typed(bblock_link, link, link, &block->children) {
|
||||
fprintf(stderr, " ->B%d",
|
||||
link->block->block_num);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
struct bblock_t;
|
||||
|
||||
struct bblock_link : public exec_node {
|
||||
struct bblock_link {
|
||||
#ifdef __cplusplus
|
||||
DECLARE_RALLOC_CXX_OPERATORS(bblock_link)
|
||||
|
||||
|
|
@ -43,6 +43,7 @@ struct bblock_link : public exec_node {
|
|||
}
|
||||
#endif
|
||||
|
||||
struct exec_node link;
|
||||
struct bblock_t *block;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -232,8 +232,7 @@ fs_copy_prop_dataflow::run()
|
|||
const BITSET_WORD old_livein = bd[b].livein[i];
|
||||
|
||||
bd[b].livein[i] = ~0u;
|
||||
foreach_list(block_node, &cfg->blocks[b]->parents) {
|
||||
bblock_link *link = (bblock_link *)block_node;
|
||||
foreach_list_typed(bblock_link, link, link, &cfg->blocks[b]->parents) {
|
||||
bblock_t *block = link->block;
|
||||
bd[b].livein[i] &= bd[block->block_num].liveout[i];
|
||||
}
|
||||
|
|
@ -252,8 +251,8 @@ fs_copy_prop_dataflow::dump_block_data() const
|
|||
bblock_t *block = cfg->blocks[b];
|
||||
fprintf(stderr, "Block %d [%d, %d] (parents ", block->block_num,
|
||||
block->start_ip, block->end_ip);
|
||||
foreach_list(block_node, &block->parents) {
|
||||
bblock_t *parent = ((bblock_link *) block_node)->block;
|
||||
foreach_list_typed(bblock_link, link, link, &block->parents) {
|
||||
bblock_t *parent = link->block;
|
||||
fprintf(stderr, "%d ", parent->block_num);
|
||||
}
|
||||
fprintf(stderr, "):\n");
|
||||
|
|
|
|||
|
|
@ -201,8 +201,7 @@ fs_live_variables::compute_live_variables()
|
|||
}
|
||||
|
||||
/* Update liveout */
|
||||
foreach_list(block_node, &cfg->blocks[b]->children) {
|
||||
bblock_link *link = (bblock_link *)block_node;
|
||||
foreach_list_typed(bblock_link, link, link, &cfg->blocks[b]->children) {
|
||||
bblock_t *block = link->block;
|
||||
|
||||
for (int i = 0; i < bitset_words; i++) {
|
||||
|
|
|
|||
|
|
@ -136,8 +136,7 @@ vec4_live_variables::compute_live_variables()
|
|||
}
|
||||
|
||||
/* Update liveout */
|
||||
foreach_list(block_node, &cfg->blocks[b]->children) {
|
||||
bblock_link *link = (bblock_link *)block_node;
|
||||
foreach_list_typed(bblock_link, link, link, &cfg->blocks[b]->children) {
|
||||
bblock_t *block = link->block;
|
||||
|
||||
for (int i = 0; i < bitset_words; i++) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue