From d9686294093f3475369c6f4b21e54b74cc79bca4 Mon Sep 17 00:00:00 2001 From: Jose Maria Casanova Crespo Date: Wed, 15 Apr 2026 01:07:54 +0200 Subject: [PATCH] broadcom/compiler: move nir_lower_undef_to_zero out of optimization loop The combination of nir_opt_if and nir_lower_undef_to_zero running inside the optimization loop could make it to not converge. This was exercised by ollama running gemma3 compute shaders. Removing the pass from the optimization loop results in No changes in shader-db. Assisted-by: Claude Opus 4.6 Fixes: cbe24a0e9c5 ("broadcom/compiler: use nir_lower_undef_to_zero") Reviewed-by: Iago Toral Quiroga (cherry picked from commit 2cd51a6efcdfde07e219869e3fd663c88da92a04) Part-of: --- .pick_status.json | 2 +- src/broadcom/compiler/nir_to_vir.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 09a308eb8c6..3c2b8aad5bd 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2754,7 +2754,7 @@ "description": "broadcom/compiler: move nir_lower_undef_to_zero out of optimization loop", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "cbe24a0e9c57a1e65243a9dce1c122597b08d50f", "notes": null diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index 5db99c2e3f6..9bf4ec8e9b2 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -2243,7 +2243,6 @@ v3d_optimize_nir(struct v3d_compile *c, struct nir_shader *s) } NIR_PASS(progress, s, nir_opt_undef); - NIR_PASS(progress, s, nir_lower_undef_to_zero); if (c && !c->disable_loop_unrolling && s->options->max_unroll_iterations > 0) { @@ -2254,6 +2253,8 @@ v3d_optimize_nir(struct v3d_compile *c, struct nir_shader *s) } } while (progress); + NIR_PASS(progress, s, nir_lower_undef_to_zero); + /* needs to be outside of optimization loop, otherwise it fights with * opt_algebraic optimizing the conversion lowering */