summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir-util.cpp')
-rw-r--r--source/slang/slang-ir-util.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/source/slang/slang-ir-util.cpp b/source/slang/slang-ir-util.cpp
index d859f86a6..f514fea1d 100644
--- a/source/slang/slang-ir-util.cpp
+++ b/source/slang/slang-ir-util.cpp
@@ -1030,6 +1030,26 @@ IRInst* getInstInBlock(IRInst* inst)
return getInstInBlock(inst->getParent());
}
+ShortList<IRInst*> getPhiArgs(IRInst* phiParam)
+{
+ ShortList<IRInst*> result;
+ auto block = cast<IRBlock>(phiParam->getParent());
+ UInt paramIndex = 0;
+ for (auto p = block->getFirstParam(); p; p = p->getNextParam())
+ {
+ if (p == phiParam)
+ break;
+ paramIndex++;
+ }
+ for (auto predBlock : block->getPredecessors())
+ {
+ auto termInst = as<IRUnconditionalBranch>(predBlock->getTerminator());
+ SLANG_ASSERT(paramIndex < termInst->getArgCount());
+ result.add(termInst->getArg(paramIndex));
+ }
+ return result;
+}
+
void removePhiArgs(IRInst* phiParam)
{
auto block = cast<IRBlock>(phiParam->getParent());