summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-type.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-09-13 13:11:48 -0700
committerGitHub <noreply@github.com>2022-09-13 13:11:48 -0700
commitf216b77752b9e4aea52882b2110ceb1cc64a2171 (patch)
treefbb33485b7260bc0f89b406e1be6fb8196f94196 /source/slang/slang-check-type.cpp
parent9f3e83cf0d664c87a618edf08d834829178030e6 (diff)
Deduplicate AST type nodes and cache lookup operations. (#2397)
* wip: dedup AST type nodes and cache lookup. * Fix. * Remove profiling. * Fixes. Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-check-type.cpp')
-rw-r--r--source/slang/slang-check-type.cpp22
1 files changed, 6 insertions, 16 deletions
diff --git a/source/slang/slang-check-type.cpp b/source/slang/slang-check-type.cpp
index c59e1b308..d402dde03 100644
--- a/source/slang/slang-check-type.cpp
+++ b/source/slang/slang-check-type.cpp
@@ -171,15 +171,16 @@ namespace Slang
DeclRef<GenericDecl> genericDeclRef,
List<Expr*> const& args)
{
- GenericSubstitution* subst = m_astBuilder->create<GenericSubstitution>();
- subst->genericDecl = genericDeclRef.getDecl();
- subst->outer = genericDeclRef.substitutions.substitutions;
+ List<Val*> evaledArgs;
for (auto argExpr : args)
{
- subst->args.add(ExtractGenericArgVal(argExpr));
+ evaledArgs.add(ExtractGenericArgVal(argExpr));
}
+ GenericSubstitution* subst = m_astBuilder->getOrCreateGenericSubstitution(
+ genericDeclRef.getDecl(), evaledArgs, genericDeclRef.substitutions.substitutions);
+
DeclRef<Decl> innerDeclRef;
innerDeclRef.decl = getInner(genericDeclRef);
innerDeclRef.substitutions = SubstitutionSet(subst);
@@ -403,18 +404,7 @@ namespace Slang
Type* elementType,
IntVal* elementCount)
{
- auto vectorGenericDecl = as<GenericDecl>(m_astBuilder->getSharedASTBuilder()->findMagicDecl("Vector"));
-
- auto vectorTypeDecl = vectorGenericDecl->inner;
-
- auto substitutions = m_astBuilder->create<GenericSubstitution>();
- substitutions->genericDecl = vectorGenericDecl;
- substitutions->args.add(elementType);
- substitutions->args.add(elementCount);
-
- auto declRef = DeclRef<Decl>(vectorTypeDecl, substitutions);
-
- return as<VectorExpressionType>(DeclRefType::create(m_astBuilder, declRef));
+ return m_astBuilder->getVectorType(elementType, elementCount);
}
Expr* SemanticsExprVisitor::visitSharedTypeExpr(SharedTypeExpr* expr)