From e31a9671d70c97c89f081d4f30ec0792050fd35c Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 21 Sep 2023 16:02:04 -0700 Subject: Revert inlining change in #3217. (#3229) Co-authored-by: Yong He --- source/slang/slang-ir-inline.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'source/slang/slang-ir-inline.cpp') diff --git a/source/slang/slang-ir-inline.cpp b/source/slang/slang-ir-inline.cpp index 1d308c507..8412a1912 100644 --- a/source/slang/slang-ir-inline.cpp +++ b/source/slang/slang-ir-inline.cpp @@ -839,6 +839,8 @@ struct PreAutoDiffForceInliningPass : InliningPassBase : Super(module) {} + Dictionary m_funcCanInline; + bool shouldInline(CallSiteInfo const& info) { if (info.callee->findDecoration() || @@ -862,7 +864,31 @@ struct PreAutoDiffForceInliningPass : InliningPassBase break; } } - return (hasForceInline && !hasUserDefinedDerivative); + if (!hasForceInline || hasUserDefinedDerivative) + { + return false; + } + if (auto result = m_funcCanInline.tryGetValue(info.callee)) + return *result; + bool canInline = true; + for (auto block : info.callee->getBlocks()) + { + for (auto inst : block->getChildren()) + { + switch (inst->getOp()) + { + case kIROp_ForwardDifferentiate: + case kIROp_BackwardDifferentiate: + case kIROp_BackwardDifferentiatePrimal: + case kIROp_BackwardDifferentiatePropagate: + canInline = false; + goto end; + } + } + } + end:; + m_funcCanInline[info.callee] = canInline; + return canInline; } }; -- cgit v1.2.3