diff options
| author | Yong He <yonghe@outlook.com> | 2022-09-13 13:11:48 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-13 13:11:48 -0700 |
| commit | f216b77752b9e4aea52882b2110ceb1cc64a2171 (patch) | |
| tree | fbb33485b7260bc0f89b406e1be6fb8196f94196 /source/slang/slang-ast-val.cpp | |
| parent | 9f3e83cf0d664c87a618edf08d834829178030e6 (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.cpp | 15 |
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; } |
