nir: fix memleak in error path
[mesa.git] / src / compiler / nir / nir_lower_load_const_to_scalar.c
index e494facfd213b8c33d0a60017a75f28e6b8d7982..a65dcb06d0cad68dc18b390ed2d8a8650e616391 100644 (file)
@@ -46,15 +46,11 @@ lower_load_const_instr_scalar(nir_load_const_instr *lower)
    b.cursor = nir_before_instr(&lower->instr);
 
    /* Emit the individual loads. */
-   nir_ssa_def *loads[4];
+   nir_ssa_def *loads[NIR_MAX_VEC_COMPONENTS];
    for (unsigned i = 0; i < lower->def.num_components; i++) {
       nir_load_const_instr *load_comp =
          nir_load_const_instr_create(b.shader, 1, lower->def.bit_size);
-      if (lower->def.bit_size == 64)
-         load_comp->value.f64[0] = lower->value.f64[i];
-      else
-         load_comp->value.u32[0] = lower->value.u32[i];
-      assert(lower->def.bit_size == 64 || lower->def.bit_size == 32);
+      load_comp->value[0] = lower->value[i];
       nir_builder_instr_insert(&b, &load_comp->instr);
       loads[i] = &load_comp->def;
    }
@@ -81,9 +77,14 @@ nir_lower_load_const_to_scalar_impl(nir_function_impl *impl)
       }
    }
 
-   if (progress)
+   if (progress) {
       nir_metadata_preserve(impl, nir_metadata_block_index |
                                   nir_metadata_dominance);
+   } else {
+#ifndef NDEBUG
+      impl->valid_metadata &= ~nir_metadata_not_properly_reset;
+#endif
+   }
 
    return progress;
 }