• Home
  • History
  • Annotate
  • Raw
  • Download

Lines Matching refs:instr

66    nir_instr *instr;  member
188 nir_foreach_instr_safe(instr, block) { in gcm_pin_instructions()
190 instr->index = state->num_instrs++; in gcm_pin_instructions()
192 switch (instr->type) { in gcm_pin_instructions()
194 switch (nir_instr_as_alu(instr)->op) { in gcm_pin_instructions()
202 instr->pass_flags = GCM_INSTR_SCHEDULE_EARLIER_ONLY; in gcm_pin_instructions()
206 if (!is_src_scalarizable(&(nir_instr_as_alu(instr)->src[0].src))) { in gcm_pin_instructions()
207 instr->pass_flags = GCM_INSTR_PINNED; in gcm_pin_instructions()
213 instr->pass_flags = 0; in gcm_pin_instructions()
219 if (nir_tex_instr_has_implicit_derivative(nir_instr_as_tex(instr))) in gcm_pin_instructions()
220 instr->pass_flags = GCM_INSTR_SCHEDULE_EARLIER_ONLY; in gcm_pin_instructions()
225 instr->pass_flags = 0; in gcm_pin_instructions()
229 if (nir_intrinsic_can_reorder(nir_instr_as_intrinsic(instr))) { in gcm_pin_instructions()
230 instr->pass_flags = 0; in gcm_pin_instructions()
232 instr->pass_flags = GCM_INSTR_PINNED; in gcm_pin_instructions()
240 instr->pass_flags = GCM_INSTR_PINNED; in gcm_pin_instructions()
247 if (!(instr->pass_flags & GCM_INSTR_PINNED)) { in gcm_pin_instructions()
259 exec_node_remove(&instr->node); in gcm_pin_instructions()
260 exec_list_push_tail(&state->instrs, &instr->node); in gcm_pin_instructions()
267 gcm_schedule_early_instr(nir_instr *instr, struct gcm_state *state);
280 nir_instr *instr = state->instr; in gcm_schedule_early_src() local
295 struct gcm_instr_info *info = &state->instr_infos[instr->index]; in gcm_schedule_early_src()
304 state->instr = instr; in gcm_schedule_early_src()
318 gcm_schedule_early_instr(nir_instr *instr, struct gcm_state *state) in gcm_schedule_early_instr() argument
320 if (instr->pass_flags & GCM_INSTR_SCHEDULED_EARLY) in gcm_schedule_early_instr()
323 instr->pass_flags |= GCM_INSTR_SCHEDULED_EARLY; in gcm_schedule_early_instr()
329 if (instr->pass_flags & GCM_INSTR_PINNED) { in gcm_schedule_early_instr()
330 state->instr_infos[instr->index].early_block = instr->block; in gcm_schedule_early_instr()
337 state->instr_infos[instr->index].early_block = nir_start_block(state->impl); in gcm_schedule_early_instr()
338 state->instr = instr; in gcm_schedule_early_instr()
340 nir_foreach_src(instr, gcm_schedule_early_src, state); in gcm_schedule_early_instr()
344 gcm_choose_block_for_instr(nir_instr *instr, nir_block *early_block, in gcm_choose_block_for_instr() argument
364 (nir_block_dominates(instr->block, block) || in gcm_choose_block_for_instr()
365 instr->type == nir_instr_type_load_const || in gcm_choose_block_for_instr()
366 instr->type == nir_instr_type_tex)) in gcm_choose_block_for_instr()
368 else if (block == instr->block) in gcm_choose_block_for_instr()
379 gcm_schedule_late_instr(nir_instr *instr, struct gcm_state *state);
478 gcm_schedule_late_instr(nir_instr *instr, struct gcm_state *state) in gcm_schedule_late_instr() argument
480 if (instr->pass_flags & GCM_INSTR_SCHEDULED_LATE) in gcm_schedule_late_instr()
483 instr->pass_flags |= GCM_INSTR_SCHEDULED_LATE; in gcm_schedule_late_instr()
489 if (instr->pass_flags & GCM_INSTR_PINNED) in gcm_schedule_late_instr()
492 nir_foreach_ssa_def(instr, gcm_schedule_late_def, state); in gcm_schedule_late_instr()
496 gcm_place_instr(nir_instr *instr, struct gcm_state *state);
518 nir_instr_insert(nir_before_cf_list(&state->impl->body), &undef->instr); in gcm_replace_def_with_undef()
540 gcm_place_instr(nir_instr *instr, struct gcm_state *state) in gcm_place_instr() argument
542 if (instr->pass_flags & GCM_INSTR_PLACED) in gcm_place_instr()
545 instr->pass_flags |= GCM_INSTR_PLACED; in gcm_place_instr()
547 if (instr->block == NULL) { in gcm_place_instr()
548 nir_foreach_ssa_def(instr, gcm_replace_def_with_undef, state); in gcm_place_instr()
549 nir_instr_remove(instr); in gcm_place_instr()
557 if (instr->type == nir_instr_type_phi) { in gcm_place_instr()
558 assert(instr->pass_flags & GCM_INSTR_PINNED); in gcm_place_instr()
562 nir_foreach_ssa_def(instr, gcm_place_instr_def, state); in gcm_place_instr()
564 if (instr->pass_flags & GCM_INSTR_PINNED) { in gcm_place_instr()
570 for (nir_instr *after = nir_instr_next(instr); in gcm_place_instr()
580 struct gcm_block_info *block_info = &state->blocks[instr->block->index]; in gcm_place_instr()
581 if (!(instr->pass_flags & GCM_INSTR_PINNED)) { in gcm_place_instr()
582 exec_node_remove(&instr->node); in gcm_place_instr()
586 &instr->node); in gcm_place_instr()
589 nir_instr *jump_instr = nir_block_last_instr(instr->block); in gcm_place_instr()
591 exec_node_insert_node_before(&jump_instr->node, &instr->node); in gcm_place_instr()
593 exec_list_push_tail(&instr->block->instr_list, &instr->node); in gcm_place_instr()
598 block_info->last_instr = instr; in gcm_place_instr()
610 state.instr = NULL; in opt_gcm_impl()
624 foreach_list_typed_safe(nir_instr, instr, node, &state.instrs) { in opt_gcm_impl()
625 if (nir_instr_set_add_or_rewrite(gvn_set, instr)) { in opt_gcm_impl()
626 nir_instr_remove(instr); in opt_gcm_impl()
633 foreach_list_typed(nir_instr, instr, node, &state.instrs) in opt_gcm_impl()
634 gcm_schedule_early_instr(instr, &state); in opt_gcm_impl()
636 foreach_list_typed(nir_instr, instr, node, &state.instrs) in opt_gcm_impl()
637 gcm_schedule_late_instr(instr, &state); in opt_gcm_impl()
640 nir_instr *instr = exec_node_data(nir_instr, in opt_gcm_impl() local
642 gcm_place_instr(instr, &state); in opt_gcm_impl()