diff options
| author | Yong He <yonghe@outlook.com> | 2023-01-23 06:59:25 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-23 06:59:25 -0800 |
| commit | 46a4d98baa1d43b33717b4377aefeeaf46b9c2ff (patch) | |
| tree | c89f3a1c416330f859887d00f896b18bcc7488a5 /source/slang/slang-ir-dominators.cpp | |
| parent | 263ca18ea516cfce43fda703c0a411aaf1938e42 (diff) | |
Full address insts elimination for backward autodiff. (#2604)
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-ir-dominators.cpp')
| -rw-r--r-- | source/slang/slang-ir-dominators.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/source/slang/slang-ir-dominators.cpp b/source/slang/slang-ir-dominators.cpp index 72b156228..1ffa7ba5d 100644 --- a/source/slang/slang-ir-dominators.cpp +++ b/source/slang/slang-ir-dominators.cpp @@ -86,6 +86,31 @@ bool IRDominatorTree::dominates(IRBlock* dominator, IRBlock* dominated) return properlyDominates(dominator, dominated); } +bool IRDominatorTree::dominates(IRInst* dominator, IRInst* dominated) +{ + auto dominatorBlock = as<IRBlock>(dominator); + if (!dominatorBlock) + dominatorBlock = as<IRBlock>(dominator->getParent()); + + auto dominatedBlock = as<IRBlock>(dominated); + if (!dominatedBlock) + dominatedBlock = as<IRBlock>(dominated->getParent()); + + if (dominatorBlock == dominatedBlock) + { + for (auto inst = dominator; inst; inst = inst->getNextInst()) + { + if (inst == dominated) + return true; + } + return false; + } + else + { + return dominates(dominatorBlock, dominatedBlock); + } +} + IRBlock* IRDominatorTree::getImmediateDominator(IRBlock* block) { // An unreachable block has no immediate dominator. |
