summaryrefslogtreecommitdiff
path: root/src/amd/compiler/aco_dominance.cpp
diff options
context:
space:
mode:
authorDaniel Schürmann <daniel@schuermann.dev>2023-01-19 17:06:01 +0100
committerMarge Bot <emma+marge@anholt.net>2023-03-12 18:07:18 +0000
commit678aef9f06303a22551753c389b1da21ab48c667 (patch)
treeabb263ddc47e58e1c8d15b1585b2e1c32689404d /src/amd/compiler/aco_dominance.cpp
parent87317214893da346a1219f4207772e94aa42edc6 (diff)
downloadmesa-678aef9f06303a22551753c389b1da21ab48c667.tar.gz
aco/dominance: set immediate dominator for any BB without predecessors
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20853>
Diffstat (limited to 'src/amd/compiler/aco_dominance.cpp')
-rw-r--r--src/amd/compiler/aco_dominance.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/amd/compiler/aco_dominance.cpp b/src/amd/compiler/aco_dominance.cpp
index c3dda2be957..1fc8231dc71 100644
--- a/src/amd/compiler/aco_dominance.cpp
+++ b/src/amd/compiler/aco_dominance.cpp
@@ -41,11 +41,16 @@ namespace aco {
void
dominator_tree(Program* program)
{
- program->blocks[0].logical_idom = 0;
- program->blocks[0].linear_idom = 0;
-
- for (unsigned i = 1; i < program->blocks.size(); i++) {
+ for (unsigned i = 0; i < program->blocks.size(); i++) {
Block& block = program->blocks[i];
+
+ /* If this block has no predecessor, it dominates itself by definition */
+ if (block.linear_preds.empty()) {
+ block.linear_idom = block.index;
+ block.logical_idom = block.index;
+ continue;
+ }
+
int new_logical_idom = -1;
int new_linear_idom = -1;
for (unsigned pred_idx : block.logical_preds) {