nir: Validate that the sources of a phi have the same size as the destination
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 25 Nov 2014 05:26:41 +0000 (21:26 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 15 Jan 2015 15:19:02 +0000 (07:19 -0800)
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/glsl/nir/nir_validate.c

index f6a55ccabd5204a1b6bc4d5b8a1b4180a262d8f2..0a015e43bba7270df73831f352f9c3ae66a544df 100644 (file)
@@ -460,9 +460,22 @@ validate_phi_src(nir_phi_instr *instr, nir_block *pred, validate_state *state)
 {
    state->instr = &instr->instr;
 
+   assert(instr->dest.is_ssa);
+
    exec_list_validate(&instr->srcs);
    foreach_list_typed(nir_phi_src, src, node, &instr->srcs) {
       if (src->pred == pred) {
+         unsigned num_components;
+         if (src->src.is_ssa)
+            num_components = src->src.ssa->num_components;
+         else {
+            if (src->src.reg.reg->is_packed)
+               num_components = 4; /* can't check anything */
+            else
+               num_components = src->src.reg.reg->num_components;
+         }
+         assert(num_components == instr->dest.ssa.num_components);
+
          validate_src(&src->src, state);
          return;
       }