summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-specialize-target-switch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir-specialize-target-switch.cpp')
-rw-r--r--source/slang/slang-ir-specialize-target-switch.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/source/slang/slang-ir-specialize-target-switch.cpp b/source/slang/slang-ir-specialize-target-switch.cpp
index e3ef06e18..c501cdab5 100644
--- a/source/slang/slang-ir-specialize-target-switch.cpp
+++ b/source/slang/slang-ir-specialize-target-switch.cpp
@@ -28,6 +28,7 @@ namespace Slang
bool isEqual;
CapabilitySet bestCapSet = CapabilitySet::makeInvalid();
IRBlock* targetBlock = nullptr;
+ CapabilitySet::ImpliesReturnFlags impliesReturnType = CapabilitySet::ImpliesReturnFlags::NotImplied;
for (UInt i = 0; i < targetSwitch->getCaseCount(); i++)
{
auto cap = (CapabilityName)getIntVal(targetSwitch->getCaseValue(i));
@@ -41,9 +42,8 @@ namespace Slang
bool isBetterForTarget = capSet.isBetterForTarget(bestCapSet, target->getTargetCaps(), isEqual);
if (isBetterForTarget)
{
- CapabilitySet joinedCapSet = capSet;
- joinedCapSet.join(target->getTargetCaps());
- bool targetImpliesCapSet = target->getTargetCaps().implies(joinedCapSet, true);
+ impliesReturnType = target->getTargetCaps().atLeastOneSetImpliedInOther(capSet);
+ bool targetImpliesCapSet = ((int)impliesReturnType & (int)CapabilitySet::ImpliesReturnFlags::Implied || capSet.isEmpty());
if (targetImpliesCapSet)
{
// Now check if bestCapSet contains targetCaps. If it does not then this is an invalid target