Mesa (master): spirv: Move cursor before calling vtn_ssa_value() in phi 2nd pass.

Kenneth Graunke kwg at kemper.freedesktop.org
Tue Jan 10 01:00:46 UTC 2017


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

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Sun Jan  8 23:03:25 2017 -0800

spirv: Move cursor before calling vtn_ssa_value() in phi 2nd pass.

vtn_ssa_value() can produce variable loads, and the cursor might
be after a return statement, causing nir_builder assert failures
about not inserting instructions after a jump.

This fixes:
dEQP-VK.spirv_assembly.instruction.graphics.barrier.in_if
dEQP-VK.spirv_assembly.instruction.graphics.barrier.in_switch

Cc: "13.0 12.0" <mesa-stable at lists.freedesktop.org>
Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/compiler/spirv/vtn_cfg.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c
index 62b9056..3a31657 100644
--- a/src/compiler/spirv/vtn_cfg.c
+++ b/src/compiler/spirv/vtn_cfg.c
@@ -527,12 +527,13 @@ vtn_handle_phi_second_pass(struct vtn_builder *b, SpvOp opcode,
    nir_variable *phi_var = phi_entry->data;
 
    for (unsigned i = 3; i < count; i += 2) {
-      struct vtn_ssa_value *src = vtn_ssa_value(b, w[i]);
       struct vtn_block *pred =
          vtn_value(b, w[i + 1], vtn_value_type_block)->block;
 
       b->nb.cursor = nir_after_instr(&pred->end_nop->instr);
 
+      struct vtn_ssa_value *src = vtn_ssa_value(b, w[i]);
+
       vtn_local_store(b, src, nir_deref_var_create(b, phi_var));
    }
 




More information about the mesa-commit mailing list