From 24249599b144364d2787a6866509ef7e07a2cffd Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 24 Nov 2014 22:42:16 -0800 Subject: nir/copy_propagate: Don't cause size mismatches on phi node sources Reviewed-by: Connor Abbott --- src/glsl/nir/nir_opt_copy_propagate.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/glsl/nir/nir_opt_copy_propagate.c b/src/glsl/nir/nir_opt_copy_propagate.c index a2be047a658..2feebe42c00 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 -- cgit v1.2.3