Lines Matching defs:instr
63 visit_alu(nir_alu_instr *instr)
65 if (instr->dest.dest.ssa.divergent)
68 unsigned num_src = nir_op_infos[instr->op].num_inputs;
71 if (instr->src[i].src.ssa->divergent) {
72 instr->dest.dest.ssa.divergent = true;
81 visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr)
83 if (!nir_intrinsic_infos[instr->intrinsic].has_dest)
86 if (instr->dest.ssa.divergent)
92 switch (instr->intrinsic) {
192 is_divergent = instr->src[0].ssa->divergent;
201 is_divergent = instr->src[0].ssa->divergent ||
202 instr->src[1].ssa->divergent;
211 is_divergent = instr->src[1].ssa->divergent;
216 is_divergent = instr->src[0].ssa->divergent;
234 is_divergent = instr->src[0].ssa->divergent ||
235 instr->src[1].ssa->divergent ||
241 is_divergent = instr->src[0].ssa->divergent ||
242 instr->src[1].ssa->divergent;
258 is_divergent = instr->src[0].ssa->divergent;
302 if (nir_intrinsic_cluster_size(instr) == 0)
306 nir_op op = nir_intrinsic_reduction_op(instr);
307 is_divergent = instr->src[0].ssa->divergent;
317 is_divergent = (instr->src[0].ssa->divergent && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM)) ||
318 instr->src[1].ssa->divergent;
323 is_divergent = instr->src[0].ssa->divergent && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM);
332 is_divergent = (instr->src[0].ssa->divergent && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM)) ||
333 instr->src[1].ssa->divergent || instr->src[2].ssa->divergent || instr->src[3].ssa->divergent;
385 unsigned num_srcs = nir_intrinsic_infos[instr->intrinsic].num_srcs;
387 if (instr->src[i].ssa->divergent) {
396 is_divergent = instr->src[0].ssa->divergent &&
397 instr->src[1].ssa->divergent;
628 nir_print_instr(&instr->instr, stderr);
633 instr->dest.ssa.divergent = is_divergent;
638 visit_tex(nir_tex_instr *instr)
640 if (instr->dest.ssa.divergent)
645 for (unsigned i = 0; i < instr->num_srcs; i++) {
646 switch (instr->src[i].src_type) {
650 is_divergent |= instr->src[i].src.ssa->divergent &&
651 instr->sampler_non_uniform;
656 is_divergent |= instr->src[i].src.ssa->divergent &&
657 instr->texture_non_uniform;
660 is_divergent |= instr->src[i].src.ssa->divergent;
665 instr->dest.ssa.divergent = is_divergent;
670 visit_load_const(nir_load_const_instr *instr)
676 visit_ssa_undef(nir_ssa_undef_instr *instr)
792 update_instr_divergence(nir_shader *shader, nir_instr *instr)
794 switch (instr->type) {
796 return visit_alu(nir_instr_as_alu(instr));
798 return visit_intrinsic(shader, nir_instr_as_intrinsic(instr));
800 return visit_tex(nir_instr_as_tex(instr));
802 return visit_load_const(nir_instr_as_load_const(instr));
804 return visit_ssa_undef(nir_instr_as_ssa_undef(instr));
806 return visit_deref(shader, nir_instr_as_deref(instr));
821 nir_foreach_instr(instr, block) {
823 if (instr->type == nir_instr_type_phi)
827 nir_foreach_ssa_def(instr, set_ssa_def_not_divergent, NULL);
829 if (instr->type == nir_instr_type_jump)
830 has_changed |= visit_jump(nir_instr_as_jump(instr), state);
832 has_changed |= update_instr_divergence(state->shader, instr);
953 nir_foreach_instr(instr, nir_cf_node_cf_tree_next(&if_stmt->cf_node)) {
954 if (instr->type != nir_instr_type_phi)
958 nir_instr_as_phi(instr)->dest.ssa.divergent = false;
959 progress |= visit_if_merge_phi(nir_instr_as_phi(instr),
986 nir_foreach_instr(instr, loop_header) {
987 if (instr->type != nir_instr_type_phi)
990 nir_phi_instr *phi = nir_instr_as_phi(instr);
1016 nir_foreach_instr(instr, loop_header) {
1017 if (instr->type != nir_instr_type_phi)
1020 repeat |= visit_loop_header_phi(nir_instr_as_phi(instr),
1030 nir_foreach_instr(instr, nir_cf_node_cf_tree_next(&loop->cf_node)) {
1031 if (instr->type != nir_instr_type_phi)
1035 nir_instr_as_phi(instr)->dest.ssa.divergent = false;
1036 progress |= visit_loop_exit_phi(nir_instr_as_phi(instr),
1086 bool nir_update_instr_divergence(nir_shader *shader, nir_instr *instr)
1088 nir_foreach_ssa_def(instr, set_ssa_def_not_divergent, NULL);
1090 if (instr->type == nir_instr_type_phi) {
1091 nir_cf_node *prev = nir_cf_node_prev(&instr->block->cf_node);
1098 visit_if_merge_phi(nir_instr_as_phi(instr), nir_src_is_divergent(nif->condition));
1102 update_instr_divergence(shader, instr);