summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLionel Landwerlin <[email protected]>2018-08-23 14:34:19 +0100
committerLionel Landwerlin <[email protected]>2018-09-03 17:24:19 +0100
commit07a2098a708a2bdba1697cbfeb435533b828d5c4 (patch)
treec6aff19ca55f960afc49e063e711cd536a6cac65
parent095600dad6ee2c93b92026ba9c78ad829a79fcd0 (diff)
intel: compiler: remove dead local variables at optimization pass
We're hitting an assert in gfxbench because one of the local variable is a sampler (according to Jason this isn't valid) : testfw_app: ../src/compiler/nir_types.cpp:551: void glsl_get_natural_size_align_bytes(const glsl_type*, unsigned int*, unsigned int*): Assertion `!"type does not have a natural size"' failed. Since this particular variable isn't used, it can be eliminated by removing unused local variables at the end of the optimization loop. This makes sense also for valid local variables. v2: Move additional local variable removal out of optimization loop, but before large constant removal (Jason/Lionel) v3: Move the removal at the end of brw_nir_optimize() Signed-off-by: Lionel Landwerlin <[email protected]> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107806 Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r--src/intel/compiler/brw_nir.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c
index ef5034d1e1e..a906a026042 100644
--- a/src/intel/compiler/brw_nir.c
+++ b/src/intel/compiler/brw_nir.c
@@ -597,6 +597,11 @@ brw_nir_optimize(nir_shader *nir, const struct brw_compiler *compiler,
OPT(nir_lower_pack);
} while (progress);
+ /* Workaround Gfxbench unused local sampler variable which will trigger an
+ * assert in the opt_large_constants pass.
+ */
+ OPT(nir_remove_dead_variables, nir_var_local);
+
return nir;
}