From 46a4d98baa1d43b33717b4377aefeeaf46b9c2ff Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 23 Jan 2023 06:59:25 -0800 Subject: Full address insts elimination for backward autodiff. (#2604) Co-authored-by: Yong He --- source/slang/slang-ir-dominators.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 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 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(dominator); + if (!dominatorBlock) + dominatorBlock = as(dominator->getParent()); + + auto dominatedBlock = as(dominated); + if (!dominatedBlock) + dominatedBlock = as(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. -- cgit v1.2.3