[Mesa-dev] [PATCH 2/5] nir/from_ssa: Don't rewrite derefs destinations to registers
Jason Ekstrand
jason at jlekstrand.net
Sat Sep 22 21:39:19 UTC 2018
We already call nir_rematerialize_derefs_in_use_blocks_impl prior to
calling nir_lower_ssa_defs_to_regs_block so the assertion that all deref
uses in the block should hold. This fixes validation errors in some
Vulkan CTS tests with SPIR-V optimizations enabled.
Fixes: 606eb56ab9449b "intel/nir: Only lower load/store derefs"
---
src/compiler/nir/nir_from_ssa.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/compiler/nir/nir_from_ssa.c b/src/compiler/nir/nir_from_ssa.c
index 19d4bc33820..08d480f119c 100644
--- a/src/compiler/nir/nir_from_ssa.c
+++ b/src/compiler/nir/nir_from_ssa.c
@@ -976,6 +976,12 @@ nir_lower_ssa_defs_to_regs_block(nir_block *block)
mov->dest.dest = nir_dest_for_reg(reg);
mov->dest.write_mask = (1 << reg->num_components) - 1;
nir_instr_insert(nir_after_instr(&load->instr), &mov->instr);
+ } else if (instr->type == nir_instr_type_deref) {
+ /* Derefs should always be SSA values, don't rewrite them. */
+ nir_deref_instr *deref = nir_instr_as_deref(instr);
+ nir_foreach_use_safe(use, &deref->dest.ssa)
+ assert(use->parent_instr->block == block);
+ assert(list_empty(&deref->dest.ssa.if_uses));
} else {
nir_foreach_dest(instr, dest_replace_ssa_with_reg, &state);
}
--
2.17.1
More information about the mesa-dev
mailing list