Mesa (master): nir/constant_folding: Use a switch in try_fold_intrinsic

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Nov 3 23:31:09 UTC 2020


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

Author: Jason Ekstrand <jason at jlekstrand.net>
Date:   Thu Oct 29 09:58:57 2020 -0500

nir/constant_folding: Use a switch in try_fold_intrinsic

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira at intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7366>

---

 src/compiler/nir/nir_opt_constant_folding.c | 71 ++++++++++++++++-------------
 1 file changed, 39 insertions(+), 32 deletions(-)

diff --git a/src/compiler/nir/nir_opt_constant_folding.c b/src/compiler/nir/nir_opt_constant_folding.c
index 7adf0ee6289..c9f7d078481 100644
--- a/src/compiler/nir/nir_opt_constant_folding.c
+++ b/src/compiler/nir/nir_opt_constant_folding.c
@@ -183,35 +183,37 @@ static bool
 try_fold_intrinsic(nir_builder *b, nir_intrinsic_instr *instr,
                    struct constant_fold_state *state)
 {
-   bool progress = false;
-
-   if ((instr->intrinsic == nir_intrinsic_demote_if ||
-        instr->intrinsic == nir_intrinsic_discard_if ||
-        instr->intrinsic == nir_intrinsic_terminate_if) &&
-       nir_src_is_const(instr->src[0])) {
-      if (nir_src_as_bool(instr->src[0])) {
-         b->cursor = nir_before_instr(&instr->instr);
-         nir_intrinsic_op op;
-         switch (instr->intrinsic) {
-         case nir_intrinsic_discard_if:
-            op = nir_intrinsic_discard;
-            break;
-         case nir_intrinsic_demote_if:
-            op = nir_intrinsic_demote;
-            break;
-         case nir_intrinsic_terminate_if:
-            op = nir_intrinsic_terminate;
-            break;
-         default:
-            unreachable("invalid intrinsic");
+   switch (instr->intrinsic) {
+   case nir_intrinsic_demote_if:
+   case nir_intrinsic_discard_if:
+   case nir_intrinsic_terminate_if:
+      if (nir_src_is_const(instr->src[0])) {
+         if (nir_src_as_bool(instr->src[0])) {
+            b->cursor = nir_before_instr(&instr->instr);
+            nir_intrinsic_op op;
+            switch (instr->intrinsic) {
+            case nir_intrinsic_discard_if:
+               op = nir_intrinsic_discard;
+               break;
+            case nir_intrinsic_demote_if:
+               op = nir_intrinsic_demote;
+               break;
+            case nir_intrinsic_terminate_if:
+               op = nir_intrinsic_terminate;
+               break;
+            default:
+               unreachable("invalid intrinsic");
+            }
+            nir_intrinsic_instr *new_instr =
+               nir_intrinsic_instr_create(b->shader, op);
+            nir_builder_instr_insert(b, &new_instr->instr);
          }
-         nir_intrinsic_instr *new_instr =
-            nir_intrinsic_instr_create(b->shader, op);
-         nir_builder_instr_insert(b, &new_instr->instr);
+         nir_instr_remove(&instr->instr);
+         return true;
       }
-      nir_instr_remove(&instr->instr);
-      progress = true;
-   } else if (instr->intrinsic == nir_intrinsic_load_deref) {
+      return false;
+
+   case nir_intrinsic_load_deref: {
       nir_deref_instr *deref = nir_src_as_deref(instr->src[0]);
       nir_const_value *v = const_value_for_deref(deref);
       if (v) {
@@ -220,14 +222,17 @@ try_fold_intrinsic(nir_builder *b, nir_intrinsic_instr *instr,
                                              instr->dest.ssa.bit_size, v);
          nir_ssa_def_rewrite_uses(&instr->dest.ssa, nir_src_for_ssa(val));
          nir_instr_remove(&instr->instr);
-         progress = true;
+         return true;
       }
-   } else if (instr->intrinsic == nir_intrinsic_load_constant) {
+      return false;
+   }
+
+   case nir_intrinsic_load_constant: {
       state->has_load_constant = true;
 
       if (!nir_src_is_const(instr->src[0])) {
          state->has_indirect_load_const = true;
-         return progress;
+         return false;
       }
 
       unsigned offset = nir_src_as_uint(instr->src[0]);
@@ -256,10 +261,12 @@ try_fold_intrinsic(nir_builder *b, nir_intrinsic_instr *instr,
       }
       nir_ssa_def_rewrite_uses(&instr->dest.ssa, nir_src_for_ssa(val));
       nir_instr_remove(&instr->instr);
-      progress = true;
+      return true;
    }
 
-   return progress;
+   default:
+      return false;
+   }
 }
 
 static bool



More information about the mesa-commit mailing list