X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fnir%2Fnir_opt_sink.c;h=03feacfedec6acd6f7a089c69ab0ac1bd2a73375;hb=27e6117ee9f77ef40721f7757e181ddf93fc60dd;hp=0095a333a2966bd02a837cfda0a99a6e96bace8c;hpb=5ac32b2954ad78ecfb8ee8d90e13a3d3928f5396;p=mesa.git diff --git a/src/compiler/nir/nir_opt_sink.c b/src/compiler/nir/nir_opt_sink.c index 0095a333a29..03feacfedec 100644 --- a/src/compiler/nir/nir_opt_sink.c +++ b/src/compiler/nir/nir_opt_sink.c @@ -39,31 +39,35 @@ bool nir_can_move_instr(nir_instr *instr, nir_move_options options) { - if ((options & nir_move_const_undef) && instr->type == nir_instr_type_load_const) { - return true; + switch (instr->type) { + case nir_instr_type_load_const: + case nir_instr_type_ssa_undef: { + return options & nir_move_const_undef; } - - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if ((options & nir_move_load_ubo) && intrin->intrinsic == nir_intrinsic_load_ubo) - return true; - - if ((options & nir_move_load_input) && - (intrin->intrinsic == nir_intrinsic_load_interpolated_input || - intrin->intrinsic == nir_intrinsic_load_input)) - return true; + case nir_instr_type_alu: { + if (nir_op_is_vec(nir_instr_as_alu(instr)->op) || + nir_instr_as_alu(instr)->op == nir_op_b2i32) + return options & nir_move_copies; + if (nir_alu_instr_is_comparison(nir_instr_as_alu(instr))) + return options & nir_move_comparisons; + return false; } - - if ((options & nir_move_const_undef) && instr->type == nir_instr_type_ssa_undef) { - return true; + case nir_instr_type_intrinsic: { + nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); + switch (intrin->intrinsic) { + case nir_intrinsic_load_ubo: + return options & nir_move_load_ubo; + case nir_intrinsic_load_input: + case nir_intrinsic_load_interpolated_input: + case nir_intrinsic_load_per_vertex_input: + return options & nir_move_load_input; + default: + return false; + } } - - if ((options & nir_move_comparisons) && instr->type == nir_instr_type_alu && - nir_alu_instr_is_comparison(nir_instr_as_alu(instr))) { - return true; + default: + return false; } - - return false; } static nir_loop *