summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-uniformity.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir-uniformity.cpp')
-rw-r--r--source/slang/slang-ir-uniformity.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/source/slang/slang-ir-uniformity.cpp b/source/slang/slang-ir-uniformity.cpp
index 9c463f530..d29c0735a 100644
--- a/source/slang/slang-ir-uniformity.cpp
+++ b/source/slang/slang-ir-uniformity.cpp
@@ -310,6 +310,9 @@ namespace Slang
auto ifElse = as<IRIfElse>(user);
visitControlDependentBlock(ifElse->getTrueBlock());
visitControlDependentBlock(ifElse->getFalseBlock());
+ // Mark phi nodes as non-uniform if any of its incoming values are non-uniform.
+ for (auto param : ifElse->getAfterBlock()->getParams())
+ addToWorkList(param);
break;
}
case kIROp_Switch:
@@ -318,6 +321,9 @@ namespace Slang
for (UInt c = 0; c < switchInst->getCaseCount(); c++)
visitControlDependentBlock(switchInst->getCaseLabel(c));
visitControlDependentBlock(switchInst->getDefaultLabel());
+ // Mark phi nodes as non-uniform if any of its incoming values are non-uniform.
+ for (auto param : switchInst->getBreakLabel()->getParams())
+ addToWorkList(param);
break;
}
case kIROp_Call: