diff options
| author | Yong He <yonghe@outlook.com> | 2023-02-20 14:42:50 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-20 14:42:50 -0800 |
| commit | 47715e625337d489f3c0131bbc2b849378b48a5a (patch) | |
| tree | bc737c8f03ef537b2ac39860bbb922c7600edc43 /source/slang/slang-check-expr.cpp | |
| parent | 8b05df4187117d61491f2fdbeb7d744146ad73f7 (diff) | |
Miscellaneous backward autodiff fixes. (#2665)
* Fix differentiable type registration
* Fix use of non-differentiable return value in a differentiable func.
* Fix use of primal inst that does not dominate the diff block.
* Fix primal inst hoisting, and add missing type legalization logic.
* Make `detach` defined on all differentiable T.
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-check-expr.cpp')
| -rw-r--r-- | source/slang/slang-check-expr.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp index 75a3c2ff1..3567e2593 100644 --- a/source/slang/slang-check-expr.cpp +++ b/source/slang/slang-check-expr.cpp @@ -1024,6 +1024,23 @@ namespace Slang }); } } + for (auto subst = declRefType->declRef.substitutions.substitutions; subst; subst = subst->outer) + { + if (auto genSubst = as<GenericSubstitution>(subst)) + { + for (auto arg : genSubst->getArgs()) + { + if (auto typeArg = as<Type>(arg)) + { + maybeRegisterDifferentiableTypeRecursive(m_astBuilder, typeArg, workingSet); + } + } + } + else if (auto thisSubst = as<ThisTypeSubstitution>(subst)) + { + maybeRegisterDifferentiableTypeRecursive(m_astBuilder, thisSubst->witness->sub, workingSet); + } + } return; } } |
