[Mesa-dev] [PATCH 1/3] nir/inline: Make the rewrite_param_derefs helper work on instructions
Jason Ekstrand
jason at jlekstrand.net
Fri May 27 04:39:43 UTC 2016
On May 26, 2016 9:32 PM, "Connor Abbott" <cwabbott0 at gmail.com> wrote:
>
> On Wed, May 25, 2016 at 1:53 PM, Jason Ekstrand <jason at jlekstrand.net>
wrote:
> > Now that we have the better nir_foreach_block macro, there's no reason
to
> > use the archaic block version for everything.
> > ---
> > src/compiler/nir/nir_inline_functions.c | 53
++++++++++++++++-----------------
> > 1 file changed, 25 insertions(+), 28 deletions(-)
> >
> > diff --git a/src/compiler/nir/nir_inline_functions.c
b/src/compiler/nir/nir_inline_functions.c
> > index 4641e8c..e124a77 100644
> > --- a/src/compiler/nir/nir_inline_functions.c
> > +++ b/src/compiler/nir/nir_inline_functions.c
> > @@ -27,40 +27,36 @@
> >
> > static bool inline_function_impl(nir_function_impl *impl, struct set
*inlined);
> >
> > -static bool
> > -rewrite_param_derefs_block(nir_block *block, nir_call_instr *call)
> > +static void
> > +rewrite_param_derefs(nir_instr *instr, nir_call_instr *call)
> > {
> > - nir_foreach_instr_safe(instr, block) {
> > - if (instr->type != nir_instr_type_intrinsic)
> > - continue;
> > -
> > - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
> > + if (instr->type != nir_instr_type_intrinsic)
> > + return;
> >
> > - for (unsigned i = 0;
> > - i < nir_intrinsic_infos[intrin->intrinsic].num_variables;
i++) {
> > - if (intrin->variables[i]->var->data.mode != nir_var_param)
> > - continue;
> > + nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
> >
> > - int param_idx = intrin->variables[i]->var->data.location;
> > + for (unsigned i = 0;
> > + i < nir_intrinsic_infos[intrin->intrinsic].num_variables; i++)
{
> > + if (intrin->variables[i]->var->data.mode != nir_var_param)
> > + continue;
> >
> > - nir_deref_var *call_deref;
> > - if (param_idx >= 0) {
> > - assert(param_idx < call->callee->num_params);
> > - call_deref = call->params[param_idx];
> > - } else {
> > - call_deref = call->return_deref;
> > - }
> > - assert(call_deref);
> > + int param_idx = intrin->variables[i]->var->data.location;
> >
> > - nir_deref_var *new_deref =
nir_deref_as_var(nir_copy_deref(intrin, &call_deref->deref));
> > - nir_deref *new_tail = nir_deref_tail(&new_deref->deref);
> > - new_tail->child = intrin->variables[i]->deref.child;
> > - ralloc_steal(new_tail, new_tail->child);
> > - intrin->variables[i] = new_deref;
> > + nir_deref_var *call_deref;
> > + if (param_idx >= 0) {
> > + assert(param_idx < call->callee->num_params);
> > + call_deref = call->params[param_idx];
> > + } else {
> > + call_deref = call->return_deref;
> > }
> > - }
> > + assert(call_deref);
> >
> > - return true;
> > + nir_deref_var *new_deref =
nir_deref_as_var(nir_copy_deref(intrin, &call_deref->deref));
> > + nir_deref *new_tail = nir_deref_tail(&new_deref->deref);
> > + new_tail->child = intrin->variables[i]->deref.child;
> > + ralloc_steal(new_tail, new_tail->child);
> > + intrin->variables[i] = new_deref;
> > + }
> > }
> >
> > static void
> > @@ -184,7 +180,8 @@ inline_functions_block(nir_block *block,
nir_builder *b,
> > }
> >
> > nir_foreach_block(block, callee_copy) {
> > - rewrite_param_derefs_block(block, call);
> > + nir_foreach_instr_safe(instr, block)
> > + rewrite_param_derefs(instr, call);
>
> I realize this was in the original, but I don't think we need the
> _safe variant here, since we don't remove/add instructions.
Yeah, I can get rid of it.
> > }
> >
> > /* Pluck the body out of the function and place it here */
> > --
> > 2.5.0.400.gff86faf
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160526/99b89448/attachment.html>
More information about the mesa-dev
mailing list