summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-04-01 18:44:44 -0700
committerGitHub <noreply@github.com>2024-04-01 18:44:44 -0700
commitabb7f1a7790544010d6eaac0f137e6b39349cf76 (patch)
tree922ca0d837d426f42a09ebec0a9a8492964c4781 /source/slang/slang-ir.cpp
parent2c4f9810327d58023e9ec44f579cd78adf56317b (diff)
Support `[RequirePrelude]` attribute on types. (#3867)
Diffstat (limited to 'source/slang/slang-ir.cpp')
-rw-r--r--source/slang/slang-ir.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp
index 68c6a33b3..95f2a7c75 100644
--- a/source/slang/slang-ir.cpp
+++ b/source/slang/slang-ir.cpp
@@ -8174,6 +8174,7 @@ namespace Slang
return inst->findDecoration<IRTargetIntrinsicDecoration>();
}
+ template<typename T>
IRTargetSpecificDecoration* findBestTargetDecoration(
IRInst* inInst,
CapabilitySet const& targetCaps)
@@ -8194,6 +8195,8 @@ namespace Slang
auto decoration = as<IRTargetSpecificDecoration>(dd);
if(!decoration)
continue;
+ if (!T::isaImpl(decoration->getOp()))
+ continue;
auto decorationCaps = decoration->getTargetCaps();
if (decorationCaps.isIncompatibleWith(targetCaps))
@@ -8224,13 +8227,19 @@ namespace Slang
return bestDecoration;
}
+ template<typename T>
IRTargetSpecificDecoration* findBestTargetDecoration(
IRInst* val,
CapabilityName targetCapabilityAtom)
{
- return findBestTargetDecoration(val, CapabilitySet(targetCapabilityAtom));
+ return findBestTargetDecoration<T>(val, CapabilitySet(targetCapabilityAtom));
}
+ template
+ IRTargetSpecificDecoration* findBestTargetDecoration<IRRequirePreludeDecoration>(
+ IRInst* val,
+ CapabilityName targetCapabilityAtom);
+
bool findTargetIntrinsicDefinition(IRInst* callee, CapabilitySet const& targetCaps, UnownedStringSlice& outDefinition)
{
if (auto decor = findBestTargetIntrinsicDecoration(callee, targetCaps))