Mesa (master): nir/spirv: skip unreachable blocks in Phi second pass

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jan 8 10:52:43 UTC 2020


Module: Mesa
Branch: master
Commit: ad4fb7ea04158c68415f26f8cc573bfac16826a3
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ad4fb7ea04158c68415f26f8cc573bfac16826a3

Author: Juan A. Suarez Romero <jasuarez at igalia.com>
Date:   Thu Nov  7 08:33:09 2019 +0000

nir/spirv: skip unreachable blocks in Phi second pass

Only the blocks that are reachable are inserted with an end_nop
instruction at the end.

When handling the Phi second pass, if the Phi has a parent block that
does not have an end_nop then it means this block is unreachable, and
thus we can ignore it, as the Phi will never come through it.

Fixes dEQP-VK.graphicsfuzz.uninit-element-cast-in-loop.

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira at intel.com>

---

 src/compiler/spirv/vtn_cfg.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c
index 67c3245126d..25e2f285e79 100644
--- a/src/compiler/spirv/vtn_cfg.c
+++ b/src/compiler/spirv/vtn_cfg.c
@@ -811,6 +811,11 @@ vtn_handle_phi_second_pass(struct vtn_builder *b, SpvOp opcode,
       struct vtn_block *pred =
          vtn_value(b, w[i + 1], vtn_value_type_block)->block;
 
+      /* If block does not have end_nop, that is because it is an unreacheable
+       * block, and hence it is not worth to handle it */
+      if (!pred->end_nop)
+         continue;
+
       b->nb.cursor = nir_after_instr(&pred->end_nop->instr);
 
       struct vtn_ssa_value *src = vtn_ssa_value(b, w[i]);




More information about the mesa-commit mailing list