summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-specialize.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-02-03 16:44:33 -0800
committerGitHub <noreply@github.com>2023-02-03 16:44:33 -0800
commit228e71dab7dfa18ece979f4099ec0c7d1e37e5ff (patch)
treeff357f4aaed2dab25ae9e3665a97a7f3e6be32ef /source/slang/slang-ir-specialize.cpp
parentee49a62083d28353812185fd0f0c04fb50ca6be0 (diff)
Overhaul `transposeParameterBlock` to support `inout` params. (#2621)
* Overhaul `transposeParameterBlock` to support `inout` params. * Small bug fixes. * Bug fix on differentiable intrinsic specialization. * Fixes. * Run autodiff tests on CPU. * Clean up. * More bug fixes., * Add test coverage on inout param. * Fix language server hinting for transcribed mutable params. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-ir-specialize.cpp')
-rw-r--r--source/slang/slang-ir-specialize.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/source/slang/slang-ir-specialize.cpp b/source/slang/slang-ir-specialize.cpp
index 747d0ccdd..cf7acd46c 100644
--- a/source/slang/slang-ir-specialize.cpp
+++ b/source/slang/slang-ir-specialize.cpp
@@ -392,13 +392,14 @@ struct SpecializationContext
{
for (auto decor : genericReturnVal->getDecorations())
{
+ bool specialized = false;
if (decor->getOp() == kIROp_ForwardDerivativeDecoration ||
decor->getOp() == kIROp_UserDefinedBackwardDerivativeDecoration)
{
// If we already have a diff func on this specialize, skip.
if (auto specDiffRef = specInst->findDecorationImpl(decor->getOp()))
{
- return false;
+ continue;
}
auto specDiffFunc = as<IRSpecialize>(decor->getOperand(0));
@@ -443,8 +444,10 @@ struct SpecializationContext
builder.addDecoration(specInst, decor->getOp(), newDiffFunc);
- return true;
+ specialized = true;
}
+ if (specialized)
+ return true;
}
}
return false;