From 203c1287816f2a73475a48dd72a9a2ed03a42ac1 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Sun, 8 Jan 2017 23:03:25 -0800 Subject: [PATCH] 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" Signed-off-by: Kenneth Graunke Reviewed-by: Jason Ekstrand --- 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)); } -- 2.7.4