diff options
Diffstat (limited to 'source/slang/slang-ir-specialize-target-switch.cpp')
| -rw-r--r-- | source/slang/slang-ir-specialize-target-switch.cpp | 6 |
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 |
