summaryrefslogtreecommitdiff
path: root/source/slang/slang-ast-val.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-ast-val.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-ast-val.cpp')
-rw-r--r--source/slang/slang-ast-val.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/source/slang/slang-ast-val.cpp b/source/slang/slang-ast-val.cpp
index 64d32f4b4..a70a79535 100644
--- a/source/slang/slang-ast-val.cpp
+++ b/source/slang/slang-ast-val.cpp
@@ -137,7 +137,7 @@ Val* GenericParamIntVal::_substituteImplOverride(ASTBuilder* /* astBuilder */, S
{
// We've found it, so return the corresponding specialization argument
(*ioDiff)++;
- return genSubst->args[index];
+ return genSubst->getArgs()[index];
}
else if (auto typeParam = as<GenericTypeParamDecl>(m))
{
@@ -265,8 +265,8 @@ Val* DeclaredSubtypeWitness::_substituteImplOverride(ASTBuilder* astBuilder, Sub
(*ioDiff)++;
auto ordinaryParamCount = genericDecl->getMembersOfType<GenericTypeParamDecl>().getCount() +
genericDecl->getMembersOfType<GenericValueParamDecl>().getCount();
- SLANG_ASSERT(index + ordinaryParamCount < genericSubst->args.getCount());
- return genericSubst->args[index + ordinaryParamCount];
+ SLANG_ASSERT(index + ordinaryParamCount < genericSubst->getArgs().getCount());
+ return genericSubst->getArgs()[index + ordinaryParamCount];
}
}
}
@@ -323,7 +323,8 @@ Val* DeclaredSubtypeWitness::_substituteImplOverride(ASTBuilder* astBuilder, Sub
}
}
- DeclaredSubtypeWitness* rs = astBuilder->create<DeclaredSubtypeWitness>();
+ DeclaredSubtypeWitness* rs = astBuilder->getOrCreate<DeclaredSubtypeWitness>(
+ substSub, substSup, substDeclRef.getDecl(), substDeclRef.substitutions.substitutions);
rs->sub = substSub;
rs->sup = substSup;
rs->declRef = substDeclRef;
@@ -722,7 +723,7 @@ Val* PolynomialIntVal::_substituteImplOverride(ASTBuilder* astBuilder, Substitut
*ioDiff += diff;
if (evaluatedTerms.getCount() == 0)
- return astBuilder->create<ConstantIntVal>(type, evaluatedConstantTerm);
+ return astBuilder->getOrCreate<ConstantIntVal>(type, evaluatedConstantTerm);
if (diff != 0)
{
auto newPolynomial = astBuilder->create<PolynomialIntVal>(type);
@@ -1035,7 +1036,7 @@ IntVal* PolynomialIntVal::canonicalize(ASTBuilder* builder)
return terms[0]->paramFactors[0]->param;
}
if (terms.getCount() == 0)
- return builder->create<ConstantIntVal>(type, constantTerm);
+ return builder->getOrCreate<ConstantIntVal>(type, constantTerm);
return this;
}
@@ -1207,7 +1208,7 @@ Val* FuncCallIntVal::tryFoldImpl(ASTBuilder* astBuilder, Type* resultType, DeclR
{
SLANG_UNREACHABLE("constant folding of FuncCallIntVal");
}
- return astBuilder->create<ConstantIntVal>(resultType, resultValue);
+ return astBuilder->getOrCreate<ConstantIntVal>(resultType, resultValue);
}
return nullptr;
}