From 4cb3eeb832b5fb29a61f2934b3daa5e42a3d6cde Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 18 Jul 2023 08:08:11 -0700 Subject: Simplify Lookup and improve compiler performance. (#2996) * Simplify lookup. * Various bug fixes. * Report type dictionary size in perf benchmark. * Remove type duplication. * increase initial dict size. * Bug fix. * Fix bugs. * Fixup. * Revert type legalization looping. * Fix specialization pass. --------- Co-authored-by: Yong He --- source/slang/slang-check-overload.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'source/slang/slang-check-overload.cpp') diff --git a/source/slang/slang-check-overload.cpp b/source/slang/slang-check-overload.cpp index 38856d7bf..1d2f82ac7 100644 --- a/source/slang/slang-check-overload.cpp +++ b/source/slang/slang-check-overload.cpp @@ -215,10 +215,7 @@ namespace Slang // to represent the arguments that have been coerced to // appropriate forms. // - auto genSubst = m_astBuilder->create(); - genSubst->genericDecl = genericDeclRef.getDecl(); - candidate.subst = genSubst; - auto& checkedArgs = (List&)genSubst->getArgs(); + List checkedArgs; // Rather than bail out as soon as we hit a problem, // we are going to process *all* of the parameters of the @@ -348,6 +345,9 @@ namespace Slang } } + auto genSubst = m_astBuilder->getOrCreateGenericSubstitution(nullptr, genericDeclRef.getDecl(), checkedArgs.getArrayView()); + candidate.subst = genSubst; + // Once we are done processing the parameters of the generic, // we will have build up a usable `checkedArgs` array and // can return to the caller a report of whether we @@ -515,8 +515,8 @@ namespace Slang auto subst = as(candidate.subst); SLANG_ASSERT(subst); - subst->genericDecl = genericDeclRef.getDecl(); - subst->outer = genericDeclRef.getSubst(); + subst = getASTBuilder()->getOrCreateGenericSubstitution( + genericDeclRef.getSubst(), genericDeclRef.getDecl(), subst->getArgs()); List newArgs = subst->getArgs(); @@ -544,7 +544,7 @@ namespace Slang } } - candidate.subst = m_astBuilder->getOrCreateGenericSubstitution(genericDeclRef.getDecl(), newArgs, genericDeclRef.getSubst()); + candidate.subst = m_astBuilder->getOrCreateGenericSubstitution(nullptr, genericDeclRef.getDecl(), newArgs); // Done checking all the constraints, hooray. return true; @@ -594,8 +594,7 @@ namespace Slang return CreateErrorExpr(originalExpr); } - subst->genericDecl = baseGenericRef.getDecl(); - subst->outer = baseGenericRef.getSubst(); + subst = m_astBuilder->getOrCreateGenericSubstitution(baseGenericRef.getSubst(), baseGenericRef.getDecl(), subst->getArgs()); DeclRef innerDeclRef = m_astBuilder->getSpecializedDeclRef(getInner(baseGenericRef), subst); -- cgit v1.2.3