summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>2023-11-06 17:44:08 -0400
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>2023-11-17 09:36:08 -0400
commit0f0f6c622713dd9b93a055530b320db13239ad87 (patch)
tree9c104deb73f799da65faa5dbb7b1a84911e9d954
parent88d0fd03d67e34feecbbe114af1c8d264a535da8 (diff)
nir/validate: Specialize if source validation
Yet another bit of branchiness we should tame. 99% of the time, sources are not for if's, so we shouldn't need to do the extra checking to handle that 1%. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26084>
-rw-r--r--src/compiler/nir/nir_validate.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c
index 31379e36f2d..8021fd3abbb 100644
--- a/src/compiler/nir/nir_validate.c
+++ b/src/compiler/nir/nir_validate.c
@@ -172,15 +172,22 @@ validate_src_tag(nir_src *src, validate_state *state)
}
static void
+validate_if_src(nir_src *src, validate_state *state)
+{
+ validate_src_tag(src, state);
+ validate_assert(state, nir_src_parent_if(src) == state->if_stmt);
+ validate_assert(state, src->ssa != NULL);
+ validate_assert(state, src->ssa->num_components == 1);
+}
+
+static void
validate_src(nir_src *src, validate_state *state)
{
/* Validate the tag first, so that nir_src_parent_instr is valid */
validate_src_tag(src, state);
- if (state->instr)
- validate_assert(state, nir_src_parent_instr(src) == state->instr);
- else
- validate_assert(state, nir_src_parent_if(src) == state->if_stmt);
+ /* Source assumed to be instruction, use validate_if_src for if */
+ validate_assert(state, nir_src_parent_instr(src) == state->instr);
validate_assert(state, src->ssa != NULL);
}
@@ -1290,7 +1297,7 @@ validate_if(nir_if *if_stmt, validate_state *state)
validate_assert(state, next_node->type == nir_cf_node_block);
validate_assert(state, nir_src_is_if(&if_stmt->condition));
- validate_sized_src(&if_stmt->condition, state, 0, 1);
+ validate_if_src(&if_stmt->condition, state);
validate_assert(state, !exec_list_is_empty(&if_stmt->then_list));
validate_assert(state, !exec_list_is_empty(&if_stmt->else_list));