Reviewed-by: Connor Abbott <[email protected]>
On Mon, Feb 9, 2015 at 11:24 PM, Jason Ekstrand <[email protected]> wrote: > --- > This replaces the original patch 10 even though they are very different. > > src/glsl/nir/nir.h | 6 ++++-- > src/glsl/nir/nir_opt_dce.c | 14 +++++++++----- > 2 files changed, 13 insertions(+), 7 deletions(-) > > diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h > index f4056f4..6ac1bfd 100644 > --- a/src/glsl/nir/nir.h > +++ b/src/glsl/nir/nir.h > @@ -411,8 +411,10 @@ typedef struct { > nir_instr_type type; > struct nir_block *block; > > - /* flag for dead code elimination (see nir_opt_dce.c) */ > - bool live; > + /* A temporary for optimization and analysis passes to use for storing > + * flags. For instance, DCE uses this to store the "dead/live" info. > + */ > + uint8_t pass_flags; > } nir_instr; > > static inline nir_instr * > diff --git a/src/glsl/nir/nir_opt_dce.c b/src/glsl/nir/nir_opt_dce.c > index 3f7d94d..e0ebdc6 100644 > --- a/src/glsl/nir/nir_opt_dce.c > +++ b/src/glsl/nir/nir_opt_dce.c > @@ -39,7 +39,7 @@ worklist_push(struct exec_list *worklist, nir_instr *instr) > { > worklist_elem *elem = ralloc(worklist, worklist_elem); > elem->instr = instr; > - instr->live = true; > + instr->pass_flags = 1; > exec_list_push_tail(worklist, &elem->node); > } > > @@ -56,7 +56,7 @@ mark_live_cb(nir_src *src, void *_state) > { > struct exec_list *worklist = (struct exec_list *) _state; > > - if (src->is_ssa && !src->ssa->parent_instr->live) { > + if (src->is_ssa && !src->ssa->parent_instr->pass_flags) { > worklist_push(worklist, src->ssa->parent_instr); > } > > @@ -70,7 +70,11 @@ init_instr(nir_instr *instr, struct exec_list *worklist) > nir_intrinsic_instr *intrin_instr; > nir_tex_instr *tex_instr; > > - instr->live = false; > + /* We use the pass_flags to store the live/dead information. In DCE, we > + * just treat it as a zero/non-zerl boolean for whether or not the > + * instruction is live. > + */ > + instr->pass_flags = 0; > > switch (instr->type) { > case nir_instr_type_call: > @@ -119,7 +123,7 @@ init_block_cb(nir_block *block, void *_state) > nir_if *following_if = nir_block_get_following_if(block); > if (following_if) { > if (following_if->condition.is_ssa && > - !following_if->condition.ssa->parent_instr->live) > + !following_if->condition.ssa->parent_instr->pass_flags) > worklist_push(worklist, following_if->condition.ssa->parent_instr); > } > > @@ -132,7 +136,7 @@ delete_block_cb(nir_block *block, void *_state) > bool *progress = (bool *) _state; > > nir_foreach_instr_safe(block, instr) { > - if (!instr->live) { > + if (!instr->pass_flags) { > nir_instr_remove(instr); > *progress = true; > } > -- > 2.2.2 > > _______________________________________________ > mesa-dev mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
