diff options
Diffstat (limited to 'source/slang/slang-ir-dominators.cpp')
| -rw-r--r-- | source/slang/slang-ir-dominators.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
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<IRBlock*>& outOrder) PostorderComputationContext context; context.order = &outOrder; context.walk(code); + + // Append unvisited blocks (unreachable blocks) to the begining of postOrder. + List<IRBlock*> prefix; + for (auto block : code->getBlocks()) + { + if (!context.visited.Contains(block)) + { + prefix.add(block); + } + } + prefix.addRange(outOrder); + outOrder = _Move(prefix); } // |
