From 228e71dab7dfa18ece979f4099ec0c7d1e37e5ff Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 3 Feb 2023 16:44:33 -0800 Subject: 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 --- source/slang/slang-ir-specialize.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'source/slang/slang-ir-specialize.cpp') 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(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; -- cgit v1.2.3