On May 26, 2016 9:32 PM, "Connor Abbott" <[email protected]> wrote: > > On Wed, May 25, 2016 at 1:53 PM, Jason Ekstrand <[email protected]> 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 > > [email protected] > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
