nir: Consider deref instructions in opt_peephole_select
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 27 Mar 2018 16:45:00 +0000 (09:45 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sat, 23 Jun 2018 03:15:56 +0000 (20:15 -0700)
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Acked-by: Rob Clark <robdclark@gmail.com>
Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Acked-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/compiler/nir/nir_opt_peephole_select.c

index 24a232ece89b92735ea8e99cbad3dbc2455f2e21..608701ab55c921fac2e63dbcc0af282e915577d5 100644 (file)
@@ -77,6 +77,17 @@ block_check_for_allowed_instrs(nir_block *block, unsigned *count, bool alu_ok)
             }
             break;
 
+         case nir_intrinsic_load_deref:
+            switch (nir_src_as_deref(intrin->src[0])->mode) {
+            case nir_var_shader_in:
+            case nir_var_uniform:
+               break;
+
+            default:
+               return false;
+            }
+            break;
+
          case nir_intrinsic_load_uniform:
             if (!alu_ok)
                return false;
@@ -255,8 +266,6 @@ nir_opt_peephole_select(nir_shader *shader, unsigned limit)
 {
    bool progress = false;
 
-   nir_assert_lowered_derefs(shader, nir_lower_load_store_derefs);
-
    nir_foreach_function(function, shader) {
       if (function->impl)
          progress |= nir_opt_peephole_select_impl(function->impl, limit);