From 768e62f6c7541439e2edc18dad5fb3846d2e05f9 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 10 Oct 2022 15:59:45 -0700 Subject: Support multi-level break + single-return conversion + general inline. (#2436) * Support multi-level break. * Single return. * Add test for inlining `void` return-type functions. Co-authored-by: Yong He --- source/slang/slang-ir-dominators.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'source/slang/slang-ir-dominators.cpp') diff --git a/source/slang/slang-ir-dominators.cpp b/source/slang/slang-ir-dominators.cpp index bae9f772f..72b156228 100644 --- a/source/slang/slang-ir-dominators.cpp +++ b/source/slang/slang-ir-dominators.cpp @@ -305,6 +305,18 @@ void computePostorder(IRGlobalValueWithCode* code, List& outOrder) PostorderComputationContext context; context.order = &outOrder; context.walk(code); + + // Append unvisited blocks (unreachable blocks) to the begining of postOrder. + List prefix; + for (auto block : code->getBlocks()) + { + if (!context.visited.Contains(block)) + { + prefix.add(block); + } + } + prefix.addRange(outOrder); + outOrder = _Move(prefix); } // -- cgit v1.2.3