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.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/source/slang/slang-ir-specialize-target-switch.cpp b/source/slang/slang-ir-specialize-target-switch.cpp
index 46ea51192..e3ef06e18 100644
--- a/source/slang/slang-ir-specialize-target-switch.cpp
+++ b/source/slang/slang-ir-specialize-target-switch.cpp
@@ -9,6 +9,16 @@ namespace Slang
{
void specializeTargetSwitch(TargetRequest* target, IRGlobalValueWithCode* code, DiagnosticSink* sink)
{
+ if (auto gen = as<IRGeneric>(code))
+ {
+ auto retVal = findGenericReturnVal(gen);
+ if (auto innerCode = as<IRGlobalValueWithCode>(retVal))
+ {
+ specializeTargetSwitch(target, innerCode, sink);
+ return;
+ }
+ }
+
bool changed = false;
for (auto block : code->getBlocks())
{
@@ -76,14 +86,6 @@ namespace Slang
if (auto code = as<IRGlobalValueWithCode>(globalInst))
{
specializeTargetSwitch(target, code, sink);
- if (auto gen = as<IRGeneric>(code))
- {
- auto retVal = findGenericReturnVal(gen);
- if (auto innerCode = as<IRGlobalValueWithCode>(retVal))
- {
- specializeTargetSwitch(target, innerCode, sink);
- }
- }
}
}
}