diff options
| author | Yong He <yonghe@outlook.com> | 2023-02-03 16:44:33 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-03 16:44:33 -0800 |
| commit | 228e71dab7dfa18ece979f4099ec0c7d1e37e5ff (patch) | |
| tree | ff357f4aaed2dab25ae9e3665a97a7f3e6be32ef /source/slang/slang-ir-specialize.cpp | |
| parent | ee49a62083d28353812185fd0f0c04fb50ca6be0 (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.cpp | 7 |
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; |
