[Mesa-dev] [PATCH 17/20] i965: Make instruction lists local to the bblocks.

Pohjolainen, Topi topi.pohjolainen at intel.com
Wed Sep 17 23:45:13 PDT 2014


On Tue, Sep 02, 2014 at 09:34:28PM -0700, Matt Turner wrote:
> ---
>  src/mesa/drivers/dri/i965/brw_cfg.cpp              | 62 ++++++++---------
>  src/mesa/drivers/dri/i965/brw_cfg.h                | 77 +++++++++++++++++-----
>  .../drivers/dri/i965/brw_dead_control_flow.cpp     |  6 +-
>  src/mesa/drivers/dri/i965/brw_fs.cpp               |  6 +-
>  src/mesa/drivers/dri/i965/brw_fs_cse.cpp           |  6 --
>  .../dri/i965/brw_fs_peephole_predicated_break.cpp  |  6 +-
>  src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp  |  4 +-
>  src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp  |  4 +-
>  .../drivers/dri/i965/brw_schedule_instructions.cpp | 10 +--
>  src/mesa/drivers/dri/i965/brw_shader.cpp           | 14 ----
>  src/mesa/drivers/dri/i965/brw_vec4_cse.cpp         |  6 --
>  src/mesa/drivers/dri/i965/intel_asm_annotation.c   |  4 +-
>  12 files changed, 114 insertions(+), 91 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_cfg.cpp b/src/mesa/drivers/dri/i965/brw_cfg.cpp
> index 8714b68..44e7744 100644
> --- a/src/mesa/drivers/dri/i965/brw_cfg.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_cfg.cpp

I really like this.

Indentation in this file looks weird but it is the current code using
tabs and your changes spaces.

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

> @@ -54,9 +54,7 @@ bblock_t::bblock_t(cfg_t *cfg) :
>     cfg(cfg), start_ip(0), end_ip(0), num(0),
>     if_block(NULL), else_block(NULL)
>  {
> -   start = NULL;
> -   end = NULL;
> -
> +   instructions.make_empty();
>     parents.make_empty();
>     children.make_empty();
>  }
> @@ -119,8 +117,8 @@ bblock_t::can_combine_with(const bblock_t *that) const
>     if ((const bblock_t *)this->link.next != that)
>        return false;
>  
> -   if (ends_block(this->end) ||
> -       starts_block(that->start))
> +   if (ends_block(this->end()) ||
> +       starts_block(that->start()))
>        return false;
>  
>     return true;
> @@ -138,8 +136,8 @@ bblock_t::combine_with(bblock_t *that)
>     }
>  
>     this->end_ip = that->end_ip;
> -   this->end = that->end;
>     this->else_block = that->else_block;
> +   this->instructions.append_list(&that->instructions);
>  
>     this->cfg->remove_block(that);
>  }
> @@ -148,9 +146,7 @@ void
>  bblock_t::dump(backend_visitor *v)
>  {
>     int ip = this->start_ip;
> -   for (backend_instruction *inst = (backend_instruction *)this->start;
> -	inst != this->end->next;
> -	inst = (backend_instruction *) inst->next) {
> +   foreach_inst_in_block(backend_instruction, inst, this) {
>        fprintf(stderr, "%5d: ", ip);
>        v->dump_instruction(inst);
>        ip++;
> @@ -178,16 +174,15 @@ cfg_t::cfg_t(exec_list *instructions)
>  
>     set_next_block(&cur, entry, ip);
>  
> -   entry->start = (backend_instruction *) instructions->get_head();
> -
> -   foreach_in_list(backend_instruction, inst, instructions) {
> -      cur->end = inst;
> -
> +   foreach_in_list_safe(backend_instruction, inst, instructions) {
>        /* set_next_block wants the post-incremented ip */
>        ip++;
>  
>        switch (inst->opcode) {
>        case BRW_OPCODE_IF:
> +         inst->remove();
> +         cur->instructions.push_tail(inst);
> +
>  	 /* Push our information onto a stack so we can recover from
>  	  * nested ifs.
>  	  */
> @@ -202,44 +197,46 @@ cfg_t::cfg_t(exec_list *instructions)
>  	  * instructions.
>  	  */
>  	 next = new_block();
> -	 next->start = (backend_instruction *)inst->next;
>  	 cur_if->add_successor(mem_ctx, next);
>  
>  	 set_next_block(&cur, next, ip);
>  	 break;
>  
>        case BRW_OPCODE_ELSE:
> +         inst->remove();
> +         cur->instructions.push_tail(inst);
> +
>           cur_else = cur;
>  
>  	 next = new_block();
> -	 next->start = (backend_instruction *)inst->next;
>  	 cur_if->add_successor(mem_ctx, next);
>  
>  	 set_next_block(&cur, next, ip);
>  	 break;
>  
>        case BRW_OPCODE_ENDIF: {
> -         if (cur->start == inst) {
> +         if (cur->instructions.is_empty()) {
>              /* New block was just created; use it. */
>              cur_endif = cur;
>           } else {
>              cur_endif = new_block();
> -            cur_endif->start = inst;
>  
> -            cur->end = (backend_instruction *)inst->prev;
>              cur->add_successor(mem_ctx, cur_endif);
>  
>              set_next_block(&cur, cur_endif, ip - 1);
>           }
>  
> +         inst->remove();
> +         cur->instructions.push_tail(inst);
> +
>           if (cur_else) {
>              cur_else->add_successor(mem_ctx, cur_endif);
>           } else {
>              cur_if->add_successor(mem_ctx, cur_endif);
>           }
>  
> -         assert(cur_if->end->opcode == BRW_OPCODE_IF);
> -         assert(!cur_else || cur_else->end->opcode == BRW_OPCODE_ELSE);
> +         assert(cur_if->end()->opcode == BRW_OPCODE_IF);
> +         assert(!cur_else || cur_else->end()->opcode == BRW_OPCODE_ELSE);
>  
>           cur_if->if_block = cur_if;
>           cur_if->else_block = cur_else;
> @@ -269,25 +266,28 @@ cfg_t::cfg_t(exec_list *instructions)
>  	  */
>  	 cur_while = new_block();
>  
> -         if (cur->start == inst) {
> +         if (cur->instructions.is_empty()) {
>              /* New block was just created; use it. */
>              cur_do = cur;
>           } else {
>              cur_do = new_block();
> -            cur_do->start = inst;
>  
> -            cur->end = (backend_instruction *)inst->prev;
>              cur->add_successor(mem_ctx, cur_do);
>  
>              set_next_block(&cur, cur_do, ip - 1);
>           }
> +
> +         inst->remove();
> +         cur->instructions.push_tail(inst);
>  	 break;
>  
>        case BRW_OPCODE_CONTINUE:
> +         inst->remove();
> +         cur->instructions.push_tail(inst);
> +
>  	 cur->add_successor(mem_ctx, cur_do);
>  
>  	 next = new_block();
> -	 next->start = (backend_instruction *)inst->next;
>  	 if (inst->predicate)
>  	    cur->add_successor(mem_ctx, next);
>  
> @@ -295,10 +295,12 @@ cfg_t::cfg_t(exec_list *instructions)
>  	 break;
>  
>        case BRW_OPCODE_BREAK:
> +         inst->remove();
> +         cur->instructions.push_tail(inst);
> +
>  	 cur->add_successor(mem_ctx, cur_while);
>  
>  	 next = new_block();
> -	 next->start = (backend_instruction *)inst->next;
>  	 if (inst->predicate)
>  	    cur->add_successor(mem_ctx, next);
>  
> @@ -306,7 +308,8 @@ cfg_t::cfg_t(exec_list *instructions)
>  	 break;
>  
>        case BRW_OPCODE_WHILE:
> -	 cur_while->start = (backend_instruction *)inst->next;
> +         inst->remove();
> +         cur->instructions.push_tail(inst);
>  
>  	 cur->add_successor(mem_ctx, cur_do);
>  	 set_next_block(&cur, cur_while, ip);
> @@ -317,12 +320,12 @@ cfg_t::cfg_t(exec_list *instructions)
>  	 break;
>  
>        default:
> +         inst->remove();
> +         cur->instructions.push_tail(inst);
>  	 break;
>        }
>     }
>  
> -   assert(cur->end);
> -
>     cur->end_ip = ip;
>  
>     make_block_array();
> @@ -397,7 +400,6 @@ void
>  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;
>     }
>  
> diff --git a/src/mesa/drivers/dri/i965/brw_cfg.h b/src/mesa/drivers/dri/i965/brw_cfg.h
> index 94713df..3511914 100644
> --- a/src/mesa/drivers/dri/i965/brw_cfg.h
> +++ b/src/mesa/drivers/dri/i965/brw_cfg.h
> @@ -47,9 +47,7 @@ struct bblock_link {
>     struct bblock_t *block;
>  };
>  
> -#ifndef __cplusplus
>  struct backend_instruction;
> -#endif
>  
>  struct bblock_t {
>  #ifdef __cplusplus
> @@ -63,17 +61,20 @@ struct bblock_t {
>     bool can_combine_with(const bblock_t *that) const;
>     void combine_with(bblock_t *that);
>     void dump(backend_visitor *v);
> +
> +   backend_instruction *start();
> +   const backend_instruction *start() const;
> +   backend_instruction *end();
> +   const backend_instruction *end() const;
>  #endif
>  
>     struct exec_node link;
>     struct cfg_t *cfg;
>  
> -   struct backend_instruction *start;
> -   struct backend_instruction *end;
> -
>     int start_ip;
>     int end_ip;
>  
> +   struct exec_list instructions;
>     struct exec_list parents;
>     struct exec_list children;
>     int num;
> @@ -87,6 +88,56 @@ struct bblock_t {
>     struct bblock_t *else_block;
>  };
>  
> +static inline struct backend_instruction *
> +bblock_start(struct bblock_t *block)
> +{
> +   return (struct backend_instruction *)exec_list_get_head(&block->instructions);
> +}
> +
> +static inline const struct backend_instruction *
> +bblock_start_const(const struct bblock_t *block)
> +{
> +   return (const struct backend_instruction *)exec_list_get_head_const(&block->instructions);
> +}
> +
> +static inline struct backend_instruction *
> +bblock_end(struct bblock_t *block)
> +{
> +   return (struct backend_instruction *)exec_list_get_tail(&block->instructions);
> +}
> +
> +static inline const struct backend_instruction *
> +bblock_end_const(const struct bblock_t *block)
> +{
> +   return (const struct backend_instruction *)exec_list_get_tail_const(&block->instructions);
> +}
> +
> +#ifdef __cplusplus
> +inline backend_instruction *
> +bblock_t::start()
> +{
> +   return bblock_start(this);
> +}
> +
> +inline const backend_instruction *
> +bblock_t::start() const
> +{
> +   return bblock_start_const(this);
> +}
> +
> +inline backend_instruction *
> +bblock_t::end()
> +{
> +   return bblock_end(this);
> +}
> +
> +inline const backend_instruction *
> +bblock_t::end() const
> +{
> +   return bblock_end_const(this);
> +}
> +#endif
> +
>  struct cfg_t {
>  #ifdef __cplusplus
>     DECLARE_RALLOC_CXX_OPERATORS(cfg_t)
> @@ -131,31 +182,27 @@ struct cfg_t {
>     foreach_list_typed_safe (bblock_t, __block, link, &(__cfg)->block_list)
>  
>  #define foreach_inst_in_block(__type, __inst, __block)         \
> -   for (__type *__inst = (__type *)__block->start;             \
> -        __inst != __block->end->next;                          \
> -        __inst = (__type *)__inst->next)
> +   foreach_in_list(__type, __inst, &(__block)->instructions)
>  
>  #define foreach_inst_in_block_safe(__type, __inst, __block)    \
> -   for (__type *__inst = (__type *)__block->start,             \
> +   for (__type *__inst = (__type *)__block->instructions.head, \
>                 *__next = (__type *)__inst->next,               \
> -               *__end = (__type *)__block->end->next->next;    \
> +               *__end = (__type *)__block->instructions.tail;  \
>          __next != __end;                                       \
>          __inst = __next,                                       \
>          __next = (__type *)__next->next)
>  
>  #define foreach_inst_in_block_reverse(__type, __inst, __block) \
> -   for (__type *__inst = (__type *)__block->end;               \
> -        __inst != __block->start->prev;                        \
> -        __inst = (__type *)__inst->prev)
> +   foreach_in_list_reverse(__type, __inst, &(__block)->instructions)
>  
>  #define foreach_inst_in_block_starting_from(__type, __scan_inst, __inst, __block) \
>     for (__type *__scan_inst = (__type *)__inst->next;          \
> -        __scan_inst != __block->end->next;                     \
> +        !__scan_inst->is_tail_sentinel();                      \
>          __scan_inst = (__type *)__scan_inst->next)
>  
>  #define foreach_inst_in_block_reverse_starting_from(__type, __scan_inst, __inst, __block) \
>     for (__type *__scan_inst = (__type *)__inst->prev;          \
> -        __scan_inst != __block->start->prev;                   \
> +        !__scan_inst->is_head_sentinel();                      \
>          __scan_inst = (__type *)__scan_inst->prev)
>  
>  #endif /* BRW_CFG_H */
> diff --git a/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp b/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp
> index fad1d42..557c3ad 100644
> --- a/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp
> @@ -47,19 +47,19 @@ dead_control_flow_eliminate(backend_visitor *v)
>        /* ENDIF instructions, by definition, can only be found at the start of
>         * basic blocks.
>         */
> -      backend_instruction *endif_inst = endif_block->start;
> +      backend_instruction *endif_inst = endif_block->start();
>        if (endif_inst->opcode != BRW_OPCODE_ENDIF)
>           continue;
>  
>        backend_instruction *if_inst = NULL, *else_inst = NULL;
> -      backend_instruction *prev_inst = ((bblock_t *)endif_block->link.prev)->end;
> +      backend_instruction *prev_inst = ((bblock_t *)endif_block->link.prev)->end();
>        if (prev_inst->opcode == BRW_OPCODE_ELSE) {
>           else_inst = prev_inst;
>           else_block = (bblock_t *)endif_block->link.prev;
>           found = true;
>  
>           if (else_block->start_ip == else_block->end_ip)
> -            prev_inst = ((bblock_t *)else_block->link.prev)->end;
> +            prev_inst = ((bblock_t *)else_block->link.prev)->end();
>        }
>  
>        if (prev_inst->opcode == BRW_OPCODE_IF) {
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index 39603cd..8e328ea 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -2230,7 +2230,7 @@ fs_visitor::compute_to_mrf()
>  	  * values that end up in MRFs are shortly before the MRF
>  	  * write anyway.
>  	  */
> -	 if (block->start == scan_inst)
> +	 if (block->start() == scan_inst)
>  	    break;
>  
>  	 /* You can't read from an MRF, so if someone else reads our
> @@ -2529,7 +2529,7 @@ fs_visitor::insert_gen4_pre_send_dependency_workarounds(bblock_t *block,
>        /* If we hit control flow, assume that there *are* outstanding
>         * dependencies, and force their cleanup before our instruction.
>         */
> -      if (block->start == scan_inst) {
> +      if (block->start() == scan_inst) {
>           for (int i = 0; i < write_len; i++) {
>              if (needs_dep[i]) {
>                 inst->insert_before(block, DEP_RESOLVE_MOV(first_write_grf + i));
> @@ -2598,7 +2598,7 @@ fs_visitor::insert_gen4_post_send_dependency_workarounds(bblock_t *block, fs_ins
>      */
>     foreach_inst_in_block_starting_from(fs_inst, scan_inst, inst, block) {
>        /* If we hit control flow, force resolve all remaining dependencies. */
> -      if (block->end == scan_inst) {
> +      if (block->end() == scan_inst) {
>           for (int i = 0; i < write_len; i++) {
>              if (needs_dep[i])
>                 scan_inst->insert_before(block,
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp
> index 5615b13..ea8ecf3 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp
> @@ -254,12 +254,6 @@ fs_visitor::opt_cse_local(bblock_t *block)
>              fs_inst *prev = (fs_inst *)inst->prev;
>  
>              inst->remove(block);
> -
> -            /* Appending an instruction may have changed our bblock end. */
> -            if (inst == block->end) {
> -               block->end = prev;
> -            }
> -
>              inst = prev;
>           }
>        }
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp b/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp
> index 5b4cab5..802b8de 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp
> @@ -52,16 +52,16 @@ fs_visitor::opt_peephole_predicated_break()
>        /* BREAK and CONTINUE instructions, by definition, can only be found at
>         * the ends of basic blocks.
>         */
> -      fs_inst *jump_inst = (fs_inst *)block->end;
> +      fs_inst *jump_inst = (fs_inst *)block->end();
>        if (jump_inst->opcode != BRW_OPCODE_BREAK &&
>            jump_inst->opcode != BRW_OPCODE_CONTINUE)
>           continue;
>  
> -      fs_inst *if_inst = (fs_inst *)((bblock_t *)block->link.prev)->end;
> +      fs_inst *if_inst = (fs_inst *)((bblock_t *)block->link.prev)->end();
>        if (if_inst->opcode != BRW_OPCODE_IF)
>           continue;
>  
> -      fs_inst *endif_inst = (fs_inst *)((bblock_t *)block->link.next)->start;
> +      fs_inst *endif_inst = (fs_inst *)((bblock_t *)block->link.next)->start();
>        if (endif_inst->opcode != BRW_OPCODE_ENDIF)
>           continue;
>  
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp b/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp
> index 7e391ea..80c918c 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp
> @@ -200,9 +200,9 @@ count_to_loop_end(bblock_t *block)
>     for (block = (bblock_t *)block->link.next;
>          depth > 0;
>          block = (bblock_t *)block->link.next) {
> -      if (block->start->opcode == BRW_OPCODE_DO)
> +      if (block->start()->opcode == BRW_OPCODE_DO)
>           depth++;
> -      if (block->end->opcode == BRW_OPCODE_WHILE) {
> +      if (block->end()->opcode == BRW_OPCODE_WHILE) {
>           depth--;
>           if (depth == 0)
>              return block->end_ip;
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
> index 28e4163..2941d65 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
> @@ -128,14 +128,14 @@ fs_visitor::opt_peephole_sel()
>        /* IF instructions, by definition, can only be found at the ends of
>         * basic blocks.
>         */
> -      fs_inst *if_inst = (fs_inst *) block->end;
> +      fs_inst *if_inst = (fs_inst *)block->end();
>        if (if_inst->opcode != BRW_OPCODE_IF)
>           continue;
>  
>        if (!block->else_block)
>           continue;
>  
> -      assert(block->else_block->end->opcode == BRW_OPCODE_ELSE);
> +      assert(block->else_block->end()->opcode == BRW_OPCODE_ELSE);
>  
>        fs_inst *else_mov[MAX_MOVS] = { NULL };
>        fs_inst *then_mov[MAX_MOVS] = { NULL };
> diff --git a/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp b/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp
> index 0f7d894..b963bda 100644
> --- a/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp
> @@ -631,10 +631,10 @@ instruction_scheduler::add_insts_from_block(bblock_t *block)
>     /* Removing the last instruction from a basic block removes the block as
>      * well, so put a NOP at the end to keep it alive.
>      */
> -   if (!block->end->is_control_flow()) {
> +   if (!block->end()->is_control_flow()) {
>        backend_instruction *nop = new(mem_ctx) backend_instruction();
>        nop->opcode = BRW_OPCODE_NOP;
> -      block->end->insert_after(block, nop);
> +      block->end()->insert_after(block, nop);
>     }
>  
>     foreach_inst_in_block_safe(backend_instruction, inst, block) {
> @@ -1370,7 +1370,7 @@ void
>  instruction_scheduler::schedule_instructions(bblock_t *block)
>  {
>     struct brw_context *brw = bv->brw;
> -   backend_instruction *inst = block->end;
> +   backend_instruction *inst = block->end();
>     time = 0;
>  
>     /* Remove non-DAG heads from the list. */
> @@ -1448,8 +1448,8 @@ instruction_scheduler::schedule_instructions(bblock_t *block)
>        }
>     }
>  
> -   if (block->end->opcode == BRW_OPCODE_NOP)
> -      block->end->remove(block);
> +   if (block->end()->opcode == BRW_OPCODE_NOP)
> +      block->end()->remove(block);
>     assert(instructions_to_schedule == 0);
>  }
>  
> diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp
> index cbaa278..0298a34 100644
> --- a/src/mesa/drivers/dri/i965/brw_shader.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
> @@ -766,9 +766,6 @@ backend_instruction::insert_after(bblock_t *block, backend_instruction *inst)
>  
>     adjust_later_block_ips(block, 1);
>  
> -   if (block->end == this)
> -      block->end = inst;
> -
>     exec_node::insert_after(inst);
>  }
>  
> @@ -781,9 +778,6 @@ backend_instruction::insert_before(bblock_t *block, backend_instruction *inst)
>  
>     adjust_later_block_ips(block, 1);
>  
> -   if (block->start == this)
> -      block->start = inst;
> -
>     exec_node::insert_before(inst);
>  }
>  
> @@ -798,9 +792,6 @@ backend_instruction::insert_before(bblock_t *block, exec_list *list)
>  
>     adjust_later_block_ips(block, num_inst);
>  
> -   if (block->start == this)
> -      block->start = (backend_instruction *)list->get_head();
> -
>     exec_node::insert_before(list);
>  }
>  
> @@ -815,11 +806,6 @@ backend_instruction::remove(bblock_t *block)
>        block->cfg->remove_block(block);
>     } else {
>        block->end_ip--;
> -
> -      if (block->start == this)
> -         block->start = (backend_instruction *)this->next;
> -      if (block->end == this)
> -         block->end = (backend_instruction *)this->prev;
>     }
>  
>     exec_node::remove();
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp b/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp
> index e0fb07c..cc0944b 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp
> @@ -184,12 +184,6 @@ vec4_visitor::opt_cse_local(bblock_t *block)
>              vec4_instruction *prev = (vec4_instruction *)inst->prev;
>  
>              inst->remove(block);
> -
> -            /* Appending an instruction may have changed our bblock end. */
> -            if (inst == block->end) {
> -               block->end = prev;
> -            }
> -
>              inst = prev;
>           }
>        }
> diff --git a/src/mesa/drivers/dri/i965/intel_asm_annotation.c b/src/mesa/drivers/dri/i965/intel_asm_annotation.c
> index 953a60a..37ad090 100644
> --- a/src/mesa/drivers/dri/i965/intel_asm_annotation.c
> +++ b/src/mesa/drivers/dri/i965/intel_asm_annotation.c
> @@ -114,7 +114,7 @@ void annotate(struct brw_context *brw,
>        ann->annotation = inst->annotation;
>     }
>  
> -   if (cfg->blocks[annotation->cur_block]->start == inst) {
> +   if (bblock_start(cfg->blocks[annotation->cur_block]) == inst) {
>        ann->block_start = cfg->blocks[annotation->cur_block];
>     }
>  
> @@ -130,7 +130,7 @@ void annotate(struct brw_context *brw,
>        annotation->ann_count--;
>     }
>  
> -   if (cfg->blocks[annotation->cur_block]->end == inst) {
> +   if (bblock_end(cfg->blocks[annotation->cur_block]) == inst) {
>        ann->block_end = cfg->blocks[annotation->cur_block];
>        annotation->cur_block++;
>     }
> -- 
> 1.8.5.5
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list