diff options
author | Daniel Schürmann <daniel@schuermann.dev> | 2023-01-19 17:06:01 +0100 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2023-03-12 18:07:18 +0000 |
commit | 678aef9f06303a22551753c389b1da21ab48c667 (patch) | |
tree | abb263ddc47e58e1c8d15b1585b2e1c32689404d /src/amd/compiler/aco_dominance.cpp | |
parent | 87317214893da346a1219f4207772e94aa42edc6 (diff) | |
download | mesa-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.cpp | 13 |
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) { |