nir: Properly preserve metadata in more cases
[mesa.git] / src / compiler / nir / nir_metadata.c
index 9e1cff5a67fcb214fb65614d5e4fecb8548e598d..6122394d8b59c552affcb0642d44c94ccecdecdc 100644 (file)
@@ -31,7 +31,7 @@
  */
 
 void
-nir_metadata_require(nir_function_impl *impl, nir_metadata required)
+nir_metadata_require(nir_function_impl *impl, nir_metadata required, ...)
 {
 #define NEEDS_UPDATE(X) ((required & ~impl->valid_metadata) & (X))
 
@@ -41,6 +41,12 @@ nir_metadata_require(nir_function_impl *impl, nir_metadata required)
       nir_calc_dominance_impl(impl);
    if (NEEDS_UPDATE(nir_metadata_live_ssa_defs))
       nir_live_ssa_defs_impl(impl);
+   if (NEEDS_UPDATE(nir_metadata_loop_analysis)) {
+      va_list ap;
+      va_start(ap, required);
+      nir_loop_analyze_impl(impl, va_arg(ap, nir_variable_mode));
+      va_end(ap);
+   }
 
 #undef NEEDS_UPDATE
 
@@ -53,7 +59,16 @@ nir_metadata_preserve(nir_function_impl *impl, nir_metadata preserved)
    impl->valid_metadata &= preserved;
 }
 
-#ifdef DEBUG
+void
+nir_shader_preserve_all_metadata(nir_shader *shader)
+{
+   nir_foreach_function(function, shader) {
+      if (function->impl)
+         nir_metadata_preserve(function->impl, nir_metadata_all);
+   }
+}
+
+#ifndef NDEBUG
 /**
  * Make sure passes properly invalidate metadata (part 1).
  *