summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mesa/drivers/dri/i965/brw_cfg.cpp33
-rw-r--r--src/mesa/drivers/dri/i965/brw_cfg.h10
2 files changed, 17 insertions, 26 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_cfg.cpp b/src/mesa/drivers/dri/i965/brw_cfg.cpp
index e2817a0..3213e03 100644
--- a/src/mesa/drivers/dri/i965/brw_cfg.cpp
+++ b/src/mesa/drivers/dri/i965/brw_cfg.cpp
@@ -83,8 +83,9 @@ cfg_t::cfg_t(exec_list *instructions)
block_list.make_empty();
blocks = NULL;
num_blocks = 0;
- ip = 0;
- cur = NULL;
+
+ bblock_t *cur = NULL;
+ int ip = 0;
bblock_t *entry = new_block();
bblock_t *cur_if = NULL, *cur_else = NULL, *cur_endif = NULL;
@@ -92,7 +93,7 @@ cfg_t::cfg_t(exec_list *instructions)
exec_list if_stack, else_stack, do_stack, while_stack;
bblock_t *next;
- set_next_block(entry);
+ set_next_block(&cur, entry, ip);
entry->start = (backend_instruction *) instructions->get_head();
@@ -123,7 +124,7 @@ cfg_t::cfg_t(exec_list *instructions)
next->start = (backend_instruction *)inst->next;
cur_if->add_successor(mem_ctx, next);
- set_next_block(next);
+ set_next_block(&cur, next, ip);
break;
case BRW_OPCODE_ELSE:
@@ -133,7 +134,7 @@ cfg_t::cfg_t(exec_list *instructions)
next->start = (backend_instruction *)inst->next;
cur_if->add_successor(mem_ctx, next);
- set_next_block(next);
+ set_next_block(&cur, next, ip);
break;
case BRW_OPCODE_ENDIF: {
@@ -147,9 +148,7 @@ cfg_t::cfg_t(exec_list *instructions)
cur->end = (backend_instruction *)inst->prev;
cur->add_successor(mem_ctx, cur_endif);
- ip--;
- set_next_block(cur_endif);
- ip++;
+ set_next_block(&cur, cur_endif, ip - 1);
}
backend_instruction *else_inst = NULL;
@@ -204,7 +203,7 @@ cfg_t::cfg_t(exec_list *instructions)
cur->add_successor(mem_ctx, next);
cur_do = next;
- set_next_block(next);
+ set_next_block(&cur, next, ip);
break;
case BRW_OPCODE_CONTINUE:
@@ -215,7 +214,7 @@ cfg_t::cfg_t(exec_list *instructions)
if (inst->predicate)
cur->add_successor(mem_ctx, next);
- set_next_block(next);
+ set_next_block(&cur, next, ip);
break;
case BRW_OPCODE_BREAK:
@@ -226,14 +225,14 @@ cfg_t::cfg_t(exec_list *instructions)
if (inst->predicate)
cur->add_successor(mem_ctx, next);
- set_next_block(next);
+ set_next_block(&cur, next, ip);
break;
case BRW_OPCODE_WHILE:
cur_while->start = (backend_instruction *)inst->next;
cur->add_successor(mem_ctx, cur_do);
- set_next_block(cur_while);
+ set_next_block(&cur, cur_while, ip);
/* Pop the stack so we're in the previous loop */
cur_do = pop_stack(&do_stack);
@@ -264,17 +263,17 @@ cfg_t::new_block()
}
void
-cfg_t::set_next_block(bblock_t *block)
+cfg_t::set_next_block(bblock_t **cur, bblock_t *block, int ip)
{
- if (cur) {
- assert(cur->end->next == block->start);
- cur->end_ip = ip - 1;
+ if (*cur) {
+ assert((*cur)->end->next == block->start);
+ (*cur)->end_ip = ip - 1;
}
block->start_ip = ip;
block->block_num = num_blocks++;
block_list.push_tail(new(mem_ctx) bblock_link(block));
- cur = block;
+ *cur = block;
}
void
diff --git a/src/mesa/drivers/dri/i965/brw_cfg.h b/src/mesa/drivers/dri/i965/brw_cfg.h
index d0f091f..7bd3e24 100644
--- a/src/mesa/drivers/dri/i965/brw_cfg.h
+++ b/src/mesa/drivers/dri/i965/brw_cfg.h
@@ -77,19 +77,11 @@ public:
~cfg_t();
bblock_t *new_block();
- void set_next_block(bblock_t *block);
+ void set_next_block(bblock_t **cur, bblock_t *block, int ip);
void make_block_array();
void dump(backend_visitor *v);
- /** @{
- *
- * Used while generating the block list.
- */
- bblock_t *cur;
- int ip;
- /** @} */
-
void *mem_ctx;
/** Ordered list (by ip) of basic blocks */