On Tue, Sep 02, 2014 at 09:34:22PM -0700, Matt Turner wrote: > When the instructions aren't in a flat list, this wouldn't have worked. > Also, this should be faster. > --- > src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp | 28 > +++++++++++------------ > 1 file changed, 13 insertions(+), 15 deletions(-) > > 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 88f394d..7e391ea 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp > @@ -190,27 +190,25 @@ brw_fs_alloc_reg_sets(struct intel_screen *screen) > brw_alloc_reg_set(screen, 2); > } > > -int > -count_to_loop_end(fs_inst *do_inst) > +static int > +count_to_loop_end(bblock_t *block)
Could be constant, and naturally below in the loop also. With that: Reviewed-by: Topi Pohjolainen <topi.pohjolai...@intel.com> I would probably change the name also, it isn't really counting the instructions anymore (maybe find_loop_end()). But I leave it to you. > { > int depth = 1; > - int ip = 1; > - for (fs_inst *inst = (fs_inst *)do_inst->next; > + /* Skip the first block, since we don't want to count the do the calling > + * function found. > + */ > + for (block = (bblock_t *)block->link.next; > depth > 0; > - inst = (fs_inst *)inst->next) { > - switch (inst->opcode) { > - case BRW_OPCODE_DO: > + block = (bblock_t *)block->link.next) { > + if (block->start->opcode == BRW_OPCODE_DO) > depth++; > - break; > - case BRW_OPCODE_WHILE: > + if (block->end->opcode == BRW_OPCODE_WHILE) { > depth--; > - break; > - default: > - break; > + if (depth == 0) > + return block->end_ip; > } > - ip++; > } > - return ip; > + unreachable("not reached"); > } > > /** > @@ -253,7 +251,7 @@ fs_visitor::setup_payload_interference(struct ra_graph *g, > * the end now. > */ > if (loop_depth == 1) > - loop_end_ip = ip + count_to_loop_end(inst); > + loop_end_ip = count_to_loop_end(block); > break; > case BRW_OPCODE_WHILE: > loop_depth--; > -- > 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