feat(furc/SSA): compute dominance frontiers

This commit is contained in:
2026-08-18 13:55:39 +02:00
parent 5efcf1b9b0
commit 090d8ad81e
+15
View File
@@ -26,6 +26,9 @@ struct block_info {
std::unordered_set<std::size_t> preds; std::unordered_set<std::size_t> preds;
std::unordered_set<std::size_t> sucs; std::unordered_set<std::size_t> sucs;
std::size_t idom = 0; std::size_t idom = 0;
// Dominance Frontiers
std::unordered_set<std::size_t> df;
}; };
void rpo_dfs(std::unordered_set<std::size_t>& visited, void rpo_dfs(std::unordered_set<std::size_t>& visited,
@@ -116,6 +119,18 @@ void process_function(ir_function& func) {
} }
} }
} }
// 3. Computing Dominance Frontiers
for (std::size_t j = 0; j < blocks.size(); ++j) {
const auto& join = blocks[j];
if (join.preds.size() < 2) continue;
for (std::size_t runner : join.preds) {
while (runner != join.idom) {
blocks[runner].df.insert(j);
runner = blocks[runner].idom;
}
}
}
} }
} // namespace } // namespace