[Mesa-dev] [PATCH 084/133] nir/copy_propagate: Don't cause size mismatches on phi node sources

Jason Ekstrand jason at jlekstrand.net
Mon Dec 15 22:11:29 PST 2014


---
 src/glsl/nir/nir_opt_copy_propagate.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/glsl/nir/nir_opt_copy_propagate.c b/src/glsl/nir/nir_opt_copy_propagate.c
index b710181..1f81b17 100644
--- a/src/glsl/nir/nir_opt_copy_propagate.c
+++ b/src/glsl/nir/nir_opt_copy_propagate.c
@@ -157,6 +157,18 @@ copy_prop_src(nir_src *src, nir_instr *parent_instr, nir_if *parent_if)
    if (!is_swizzleless_move(alu_instr))
       return false;
 
+   /* Don't let copy propagation land us with a phi that has more
+    * components in its source than it has in its destination.  That badly
+    * messes up out-of-ssa.
+    */
+   if (parent_instr && parent_instr->type == nir_instr_type_phi) {
+      nir_phi_instr *phi = nir_instr_as_phi(parent_instr);
+      assert(phi->dest.is_ssa);
+      if (phi->dest.ssa.num_components !=
+          alu_instr->src[0].src.ssa->num_components)
+         return false;
+   }
+
    if (parent_instr)
       rewrite_src_instr(src, alu_instr->src[0].src.ssa, parent_instr);
    else
-- 
2.2.0



More information about the mesa-dev mailing list