nir: Add a nir_foreach_function_temp_variable helper
[mesa.git] / src / compiler / nir / nir_opt_large_constants.c
index 7e293ba2c5e6d4950ec1b863b4fbc37a759e412c..2575407ca0b5b4e3bb72b745a1a1e2f30e364cd2 100644 (file)
@@ -92,9 +92,11 @@ build_constant_load(nir_builder *b, nir_deref_instr *deref,
    if (load->dest.ssa.bit_size < 8) {
       /* Booleans are special-cased to be 32-bit */
       assert(glsl_type_is_boolean(deref->type));
+      assert(deref_size == num_components * 4);
       load->dest.ssa.bit_size = 32;
       return nir_b2b1(b, &load->dest.ssa);
    } else {
+      assert(deref_size == num_components * bit_size / 8);
       return &load->dest.ssa;
    }
 }
@@ -177,11 +179,13 @@ nir_opt_large_constants(nir_shader *shader,
    unsigned num_locals = exec_list_length(&impl->locals);
    nir_index_vars(shader, impl, nir_var_function_temp);
 
-   if (num_locals == 0)
+   if (num_locals == 0) {
+      nir_shader_preserve_all_metadata(shader);
       return false;
+   }
 
    struct var_info *var_infos = ralloc_array(NULL, struct var_info, num_locals);
-   nir_foreach_variable(var, &impl->locals) {
+   nir_foreach_function_temp_variable(var, impl) {
       var_infos[var->index] = (struct var_info) {
          .var = var,
          .is_constant = true,
@@ -300,6 +304,7 @@ nir_opt_large_constants(nir_shader *shader,
    }
 
    if (shader->constant_data_size == 0) {
+      nir_shader_preserve_all_metadata(shader);
       ralloc_free(var_infos);
       return false;
    }