Mesa (master): nir: refactor nir_can_move_instr

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jul 7 18:12:33 UTC 2020


Module: Mesa
Branch: master
Commit: 9300a14ffbac490906f62a638f9d8d6546298bfc
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9300a14ffbac490906f62a638f9d8d6546298bfc

Author: Daniel Schürmann <daniel at schuermann.dev>
Date:   Wed Jun 24 11:23:05 2020 +0100

nir: refactor nir_can_move_instr

Reviewed-by: Rhys Perry <pendingchaos02 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5622>

---

 src/compiler/nir/nir_opt_sink.c | 51 +++++++++++++++++++----------------------
 1 file changed, 24 insertions(+), 27 deletions(-)

diff --git a/src/compiler/nir/nir_opt_sink.c b/src/compiler/nir/nir_opt_sink.c
index 5595cfd61d9..1d551fe9f8b 100644
--- a/src/compiler/nir/nir_opt_sink.c
+++ b/src/compiler/nir/nir_opt_sink.c
@@ -39,37 +39,34 @@
 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 ||
-           intrin->intrinsic == nir_intrinsic_load_per_vertex_input))
-         return true;
-   }
-
-   if ((options & nir_move_const_undef) && instr->type == nir_instr_type_ssa_undef) {
-      return true;
+   case nir_instr_type_alu: {
+      if (nir_op_is_vec(nir_instr_as_alu(instr)->op))
+         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_copies) && instr->type == nir_instr_type_alu &&
-       nir_op_is_vec(nir_instr_as_alu(instr)->op)) {
-      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 *



More information about the mesa-commit mailing list