nir/lower_goto_if: Rework some set union logic
I find the ternary a bit hard to read. The optimization is fairly
obvious but the way it's coded makes things more dense than they
probably need to be.
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/2401>
diff --git a/src/compiler/nir/nir_lower_goto_ifs.c b/src/compiler/nir/nir_lower_goto_ifs.c
index b944b4c..ac20295 100644
--- a/src/compiler/nir/nir_lower_goto_ifs.c
+++ b/src/compiler/nir/nir_lower_goto_ifs.c
@@ -612,9 +612,16 @@
} else {
set_foreach(curr_level->blocks, blocks_entry) {
nir_block *level_block = (nir_block *) blocks_entry->key;
- if (!prev_frontier) {
- prev_frontier = curr_level->blocks->entries == 1 ?
- level_block->dom_frontier :
+ if (curr_level->blocks->entries == 1) {
+ /* If we only have one block, there's no union operation and we
+ * can just use the one from the one block.
+ */
+ prev_frontier = level_block->dom_frontier;
+ break;
+ }
+
+ if (prev_frontier == NULL) {
+ prev_frontier =
_mesa_set_clone(level_block->dom_frontier, prev_level);
} else {
set_foreach(level_block->dom_frontier, entry)