Lines Matching refs:instr
54 is_memory_load(nir_instr *instr)
57 if (instr->type == nir_instr_type_tex)
60 if (instr->type == nir_instr_type_intrinsic) {
61 nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
99 is_grouped_load(nir_instr *instr)
102 if (instr->type == nir_instr_type_tex)
105 if (instr->type == nir_instr_type_intrinsic)
106 return get_intrinsic_resource(nir_instr_as_intrinsic(instr)) != NULL;
112 can_move(nir_instr *instr, uint8_t current_indirection_level)
117 if (is_grouped_load(instr) && instr->pass_flags == current_indirection_level)
120 if (instr->type == nir_instr_type_alu ||
121 instr->type == nir_instr_type_deref ||
122 instr->type == nir_instr_type_tex ||
123 instr->type == nir_instr_type_load_const ||
124 instr->type == nir_instr_type_ssa_undef)
127 if (instr->type == nir_instr_type_intrinsic &&
128 nir_intrinsic_can_reorder(nir_instr_as_intrinsic(instr)))
135 get_uniform_inst_resource(nir_instr *instr)
137 if (instr->type == nir_instr_type_tex) {
138 nir_tex_instr *tex = nir_instr_as_tex(instr);
155 if (instr->type == nir_instr_type_intrinsic)
156 return get_intrinsic_resource(nir_instr_as_intrinsic(instr));
183 for (nir_instr *instr = exec_node_data_backward(nir_instr,
185 instr != first;
186 instr = exec_node_data_backward(nir_instr, instr->node.prev, node)) {
188 if (!can_move(instr, first->pass_flags))
191 nir_ssa_def *def = nir_instr_ssa_def(instr);
196 if (use->parent_instr->block == instr->block &&
204 nir_instr *move_instr = instr;
206 instr = exec_node_data_forward(nir_instr, instr->node.next, node);
224 for (nir_instr *instr = exec_node_data_forward(nir_instr,
226 instr != last;
227 instr = exec_node_data_forward(nir_instr, instr->node.next, node)) {
229 if (!can_move(instr, first->pass_flags))
232 if (nir_foreach_src(instr, has_only_sources_less_than, &state)) {
233 nir_instr *move_instr = instr;
235 instr = exec_node_data_backward(nir_instr, instr->node.prev, node);
247 is_pseudo_inst(nir_instr *instr)
250 return instr->type != nir_instr_type_alu &&
251 instr->type != nir_instr_type_call &&
252 instr->type != nir_instr_type_tex &&
253 instr->type != nir_instr_type_intrinsic;
265 nir_foreach_instr(instr, block) {
269 if (last && is_pseudo_inst(last) && is_grouped_load(instr))
273 instr->index = counter;
276 if (!is_pseudo_inst(instr))
279 last = instr;
298 is_barrier(nir_instr *instr)
300 if (instr->type == nir_instr_type_intrinsic) {
301 nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
324 get_num_indirections(nir_instr *instr);
330 nir_instr *instr = src->ssa->parent_instr;
333 if (instr->block == state->block) {
336 if (instr->type == nir_instr_type_tex || is_memory_load(instr))
347 get_num_indirections(nir_instr *instr)
352 if (instr->type == nir_instr_type_phi)
355 if (instr->index != UINT32_MAX)
356 return instr->index; /* we've visited this instruction before */
359 state.block = instr->block;
362 nir_foreach_src(instr, gather_indirections, &state);
364 instr->index = state.indirections;
382 nir_foreach_instr(instr, block) {
383 instr->index = UINT32_MAX; /* unknown */
389 nir_foreach_instr(instr, block) {
390 if (is_grouped_load(instr)) {
391 unsigned indirections = get_num_indirections(instr);
396 instr->pass_flags = indirections;