[Mesa-dev] [PATCH 05/20] i965/cfg: Add a foreach_inst_in_block_safe macro.
Pohjolainen, Topi
topi.pohjolainen at intel.com
Wed Aug 6 05:22:52 PDT 2014
On Tue, Aug 05, 2014 at 09:14:55PM +0300, Pohjolainen, Topi wrote:
> On Thu, Jul 24, 2014 at 07:54:12PM -0700, Matt Turner wrote:
> > ---
> > src/mesa/drivers/dri/i965/brw_cfg.h | 8 ++++++++
> > 1 file changed, 8 insertions(+)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_cfg.h b/src/mesa/drivers/dri/i965/brw_cfg.h
> > index a5d2df5..913a1ed 100644
> > --- a/src/mesa/drivers/dri/i965/brw_cfg.h
> > +++ b/src/mesa/drivers/dri/i965/brw_cfg.h
> > @@ -120,6 +120,14 @@ struct cfg_t {
> > __inst != __block->end->next; \
> > __inst = (__type *)__inst->next)
> >
> > +#define foreach_inst_in_block_safe(__type, __inst, __block) \
> > + for (__type *__inst = (__type *)__block->start, \
> > + *__next = (__type *)__inst->next, \
> > + *__end = (__type *)__block->end->next->next; \
>
> Patches 4 and 7 make sense but the double ->next->next here is not obvious
> to me.
I tried handwriting instructions into blocks (this is purely arbitrary):
ip opcode
------------------
0 : BRW_OPCODE_?
..
k : BRW_OPCODE_IF
k+1: BRW_OPCODE_?
..
n : BRW_OPCODE_ELSE
n+1: BRW_OPCODE_?
..
m : BRW_OPCODE_ENDIF
m+1: BRW_OPCODE_?
..
t : BRW_OPCODE_?
Following the logic in the constructor of cfg_t, I would deduce this:
block 0:
start_ip = 0
num = 0
start = inst_0
end = inst_k (if)
block 1:
start_ip = k+1
num = 1
start = inst_k+1
end = inst_n (else)
block 2:
start_ip = n+1
num = 2
start = inst_n+1
end = inst_m-1
block 3:
start_ip = m
num = 3
start = inst_m (endif)
end = inst_t
And as instructions are inherited from exec_node, for block 3 end->next
should be NULL, right?
>
> > + __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; \
> > --
> > 1.8.5.5
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> _______________________________________________
> 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