On Thu, Jul 24, 2014 at 07:54:17PM -0700, Matt Turner wrote: > --- > src/mesa/drivers/dri/i965/brw_cfg.h | 1 + > src/mesa/drivers/dri/i965/brw_shader.cpp | 32 > ++++++++++++++++++++++++++++++++ > src/mesa/drivers/dri/i965/brw_shader.h | 4 ++++ > 3 files changed, 37 insertions(+) > > diff --git a/src/mesa/drivers/dri/i965/brw_cfg.h > b/src/mesa/drivers/dri/i965/brw_cfg.h > index 35ee29a..e1ec43b 100644 > --- a/src/mesa/drivers/dri/i965/brw_cfg.h > +++ b/src/mesa/drivers/dri/i965/brw_cfg.h > @@ -64,6 +64,7 @@ struct bblock_t { > #endif > > struct exec_node link; > + struct cfg_t *cfg;
This is needed already in patch number 9. > > struct backend_instruction *start; > struct backend_instruction *end; > diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp > b/src/mesa/drivers/dri/i965/brw_shader.cpp > index 0deb090..47535a9 100644 > --- a/src/mesa/drivers/dri/i965/brw_shader.cpp > +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp > @@ -740,6 +740,38 @@ backend_instruction::has_side_effects() const > } > > void > +backend_instruction::remove(bblock_t *block) > +{ > + bool found = false; (void) found; > + foreach_inst_in_block (backend_instruction, i, block) { > + if (this == i) { > + found = true; > + } > + } > + assert(found || !"Instruction not in block"); > + > + for (bblock_t *block_iter = (bblock_t *)block->link.next; > + !block_iter->link.is_tail_sentinel(); > + block_iter = (bblock_t *)block_iter->link.next) { > + block_iter->start_ip--; > + block_iter->end_ip--; > + } > + > + if (block->start_ip == block->end_ip) { > + 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; > + } > + > + this->remove(); > +} > + > +void > backend_visitor::dump_instructions() > { > dump_instructions(NULL); > diff --git a/src/mesa/drivers/dri/i965/brw_shader.h > b/src/mesa/drivers/dri/i965/brw_shader.h > index 40689eb..4b80ea9 100644 > --- a/src/mesa/drivers/dri/i965/brw_shader.h > +++ b/src/mesa/drivers/dri/i965/brw_shader.h > @@ -78,6 +78,7 @@ struct backend_reg > }; > > struct cfg_t; > +struct bblock_t; > > #ifdef __cplusplus > struct backend_instruction : public exec_node { > @@ -89,6 +90,9 @@ struct backend_instruction : public exec_node { > bool reads_accumulator_implicitly() const; > bool writes_accumulator_implicitly(struct brw_context *brw) const; > > + using exec_node::remove; > + void remove(bblock_t *block); > + > /** > * True if the instruction has side effects other than writing to > * its destination registers. You are expected not to reorder or > -- > 1.8.5.5 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev