aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2018-09-11 13:06:01 -0500
committerJason Ekstrand <[email protected]>2018-09-19 02:00:49 -0500
commit976046a8d8f9bed8f805d09ac5aebe63b81a71d9 (patch)
tree4812fa365c551028db289300ee0b0780d4291449
parent864c780566b8782c4fc69b4337db768223717bd8 (diff)
nir: Add some asserts that we don't put derefs in phis
The lcssa and phis_to_regs passes are used by various NIR optimizations that modify the CFG. Putting a couple of asserts will help ensure that we don't accidentally put derefs in phis as part of an optimization pass. Reviewed-by: Iago Toral Quiroga <[email protected]>
-rw-r--r--src/compiler/nir/nir_from_ssa.c2
-rw-r--r--src/compiler/nir/nir_to_lcssa.c3
-rw-r--r--src/compiler/nir/nir_validate.c1
3 files changed, 6 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_from_ssa.c b/src/compiler/nir/nir_from_ssa.c
index 1aa35509b11..19d4bc33820 100644
--- a/src/compiler/nir/nir_from_ssa.c
+++ b/src/compiler/nir/nir_from_ssa.c
@@ -901,6 +901,8 @@ nir_lower_phis_to_regs_block(nir_block *block)
nir_foreach_phi_src(src, phi) {
assert(src->src.is_ssa);
+ /* We don't want derefs ending up in phi sources */
+ assert(!nir_src_as_deref(src->src));
place_phi_read(shader, reg, src->src.ssa, src->pred);
}
diff --git a/src/compiler/nir/nir_to_lcssa.c b/src/compiler/nir/nir_to_lcssa.c
index 9b3539193ea..0f62fc39400 100644
--- a/src/compiler/nir/nir_to_lcssa.c
+++ b/src/compiler/nir/nir_to_lcssa.c
@@ -111,6 +111,9 @@ convert_loop_exit_for_ssa(nir_ssa_def *def, void *void_state)
if (all_uses_inside_loop)
return true;
+ /* We don't want derefs ending up in phi sources */
+ assert(def->parent_instr->type != nir_instr_type_deref);
+
/* Initialize a phi-instruction */
nir_phi_instr *phi = nir_phi_instr_create(state->shader);
nir_ssa_dest_init(&phi->instr, &phi->dest,
diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c
index 8e6f5bfb686..1852224b520 100644
--- a/src/compiler/nir/nir_validate.c
+++ b/src/compiler/nir/nir_validate.c
@@ -669,6 +669,7 @@ validate_phi_src(nir_phi_instr *instr, nir_block *pred, validate_state *state)
nir_foreach_phi_src(src, instr) {
if (src->pred == pred) {
validate_assert(state, src->src.is_ssa);
+ validate_assert(state, src->src.ssa->parent_instr->type != nir_instr_type_deref);
validate_src(&src->src, state, instr->dest.ssa.bit_size,
instr->dest.ssa.num_components);
state->instr = NULL;