diff options
| author | Yong He <yonghe@outlook.com> | 2024-04-01 18:44:44 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-01 18:44:44 -0700 |
| commit | abb7f1a7790544010d6eaac0f137e6b39349cf76 (patch) | |
| tree | 922ca0d837d426f42a09ebec0a9a8492964c4781 /source/slang/slang-ir.cpp | |
| parent | 2c4f9810327d58023e9ec44f579cd78adf56317b (diff) | |
Support `[RequirePrelude]` attribute on types. (#3867)
Diffstat (limited to 'source/slang/slang-ir.cpp')
| -rw-r--r-- | source/slang/slang-ir.cpp | 11 |
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)) |
