diff --git a/.pick_status.json b/.pick_status.json index 1bc68430bf4..46418079807 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1228,7 +1228,7 @@ "description": "nir: Do not consider phis with incompatible dests equal", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "6bdce55c44a45fc8ec8426996572c18ecf88bd64" }, diff --git a/src/compiler/nir/nir_instr_set.c b/src/compiler/nir/nir_instr_set.c index 032fcbcb918..985db65c0a1 100644 --- a/src/compiler/nir/nir_instr_set.c +++ b/src/compiler/nir/nir_instr_set.c @@ -707,6 +707,14 @@ nir_instrs_equal(const nir_instr *instr1, const nir_instr *instr2) if (phi1->instr.block != phi2->instr.block) return false; + /* In case of phis with no sources, the dest needs to be checked + * to ensure that phis with incompatible dests won't get merged + * during CSE. */ + if (phi1->dest.ssa.num_components != phi2->dest.ssa.num_components) + return false; + if (phi1->dest.ssa.bit_size != phi2->dest.ssa.bit_size) + return false; + nir_foreach_phi_src(src1, phi1) { nir_foreach_phi_src(src2, phi2) { if (src1->pred == src2->pred) {