radv: UseEnumerateInstanceVersion for the default version.
[mesa.git] / src / compiler / nir / nir_opt_intrinsics.c
index 4f36166510b85f48ab57a7e375d8a646eef7358b..37f08c77ef11b17d713a4ec1560f774baf631883 100644 (file)
@@ -46,53 +46,15 @@ opt_intrinsics_impl(nir_function_impl *impl)
 
          switch (intrin->intrinsic) {
          case nir_intrinsic_vote_any:
-         case nir_intrinsic_vote_all: {
-            nir_const_value *val = nir_src_as_const_value(intrin->src[0]);
-            if (!val && !b.shader->options->lower_vote_trivial)
-               continue;
-
-            replacement = nir_ssa_for_src(&b, intrin->src[0], 1);
-            break;
-         }
-         case nir_intrinsic_vote_eq: {
-            nir_const_value *val = nir_src_as_const_value(intrin->src[0]);
-            if (!val && !b.shader->options->lower_vote_trivial)
-               continue;
-
-            replacement = nir_imm_int(&b, NIR_TRUE);
+         case nir_intrinsic_vote_all:
+            if (nir_src_as_const_value(intrin->src[0]))
+               replacement = nir_ssa_for_src(&b, intrin->src[0], 1);
             break;
-         }
-         case nir_intrinsic_load_subgroup_eq_mask:
-         case nir_intrinsic_load_subgroup_ge_mask:
-         case nir_intrinsic_load_subgroup_gt_mask:
-         case nir_intrinsic_load_subgroup_le_mask:
-         case nir_intrinsic_load_subgroup_lt_mask: {
-            if (!b.shader->options->lower_subgroup_masks)
-               break;
-
-            nir_ssa_def *count = nir_load_subgroup_invocation(&b);
-
-            switch (intrin->intrinsic) {
-            case nir_intrinsic_load_subgroup_eq_mask:
-               replacement = nir_ishl(&b, nir_imm_int64(&b, 1ull), count);
-               break;
-            case nir_intrinsic_load_subgroup_ge_mask:
-               replacement = nir_ishl(&b, nir_imm_int64(&b, ~0ull), count);
-               break;
-            case nir_intrinsic_load_subgroup_gt_mask:
-               replacement = nir_ishl(&b, nir_imm_int64(&b, ~1ull), count);
-               break;
-            case nir_intrinsic_load_subgroup_le_mask:
-               replacement = nir_inot(&b, nir_ishl(&b, nir_imm_int64(&b, ~1ull), count));
-               break;
-            case nir_intrinsic_load_subgroup_lt_mask:
-               replacement = nir_inot(&b, nir_ishl(&b, nir_imm_int64(&b, ~0ull), count));
-               break;
-            default:
-               unreachable("you seriously can't tell this is unreachable?");
-            }
+         case nir_intrinsic_vote_feq:
+         case nir_intrinsic_vote_ieq:
+            if (nir_src_as_const_value(intrin->src[0]))
+               replacement = nir_imm_int(&b, NIR_TRUE);
             break;
-         }
          default:
             break;
          }
@@ -103,8 +65,6 @@ opt_intrinsics_impl(nir_function_impl *impl)
          nir_ssa_def_rewrite_uses(&intrin->dest.ssa,
                                   nir_src_for_ssa(replacement));
          nir_instr_remove(instr);
-         nir_metadata_preserve(impl, nir_metadata_block_index |
-                                     nir_metadata_dominance);
          progress = true;
       }
    }
@@ -118,9 +78,15 @@ nir_opt_intrinsics(nir_shader *shader)
    bool progress = false;
 
    nir_foreach_function(function, shader) {
-      if (function->impl)
-         progress |= opt_intrinsics_impl(function->impl);
+      if (!function->impl)
+         continue;
+
+      if (opt_intrinsics_impl(function->impl)) {
+         progress = true;
+         nir_metadata_preserve(function->impl, nir_metadata_block_index |
+                                               nir_metadata_dominance);
+      }
    }
 
-   return false;
+   return progress;
 }