nir/lower_shader_calls: Remat derefs before lowering resumes

Closes: #7923
cc: mesa-stable

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20399>
(cherry picked from commit 200e551cbb)
This commit is contained in:
Konstantin Seurer 2022-12-20 18:26:34 +01:00 committed by Dylan Baker
parent fea4ef9c2f
commit 95d24c496c
2 changed files with 8 additions and 1 deletions

View file

@ -4675,7 +4675,7 @@
"description": "nir/lower_shader_calls: Remat derefs before lowering resumes",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null
},

View file

@ -1182,6 +1182,13 @@ lower_resume(nir_shader *shader, int call_idx)
nir_function_impl *impl = nir_shader_get_entrypoint(shader);
nir_instr *resume_instr = find_resume_instr(impl, call_idx);
/* Deref chains contain metadata information that is needed by other passes
* after this one. If we don't rematerialize the derefs in the blocks where
* they're used here, the following lowerings will insert phis which can
* prevent other passes from chasing deref chains.
*/
nir_rematerialize_derefs_in_use_blocks_impl(impl);
if (duplicate_loop_bodies(impl, resume_instr)) {
nir_validate_shader(shader, "after duplicate_loop_bodies in "
"nir_lower_shader_calls");