From 090d8ad81ef04585d7cf0985f6fa9557f2fc6831 Mon Sep 17 00:00:00 2001 From: CHatingPython Date: Tue, 18 Aug 2026 13:55:39 +0200 Subject: [PATCH] feat(furc/SSA): compute dominance frontiers --- furc/src/middle/ssa.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/furc/src/middle/ssa.cpp b/furc/src/middle/ssa.cpp index 497aac9..96dc994 100644 --- a/furc/src/middle/ssa.cpp +++ b/furc/src/middle/ssa.cpp @@ -26,6 +26,9 @@ struct block_info { std::unordered_set preds; std::unordered_set sucs; std::size_t idom = 0; + + // Dominance Frontiers + std::unordered_set df; }; void rpo_dfs(std::unordered_set& 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