mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 04:58:05 +02:00
nir: Do not consider phis with incompatible dests equal
CSE tries to collapse equal instructions, and collapsing two phis with incompatible dests is illegal. Reviewed-by: Konstantin Seurer <konstantin.seurer@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Reviewed-by: Jason Ekstrand <jason.ekstrand@collabora.com> Fixes:6bdce55c("nir: Add a basic CSE pass") Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19960> (cherry picked from commita54c2c8289)
This commit is contained in:
parent
68fece9af5
commit
57827e6903
2 changed files with 9 additions and 1 deletions
|
|
@ -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"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue