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-check-shader.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-check-shader.cpp')
| -rw-r--r-- | source/slang/slang-check-shader.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/source/slang/slang-check-shader.cpp b/source/slang/slang-check-shader.cpp index 2e577b6d5..d7200d47c 100644 --- a/source/slang/slang-check-shader.cpp +++ b/source/slang/slang-check-shader.cpp @@ -1120,7 +1120,7 @@ namespace Slang if(!intVal) { sink->diagnose(param.loc, Diagnostics::expectedValueOfTypeForSpecializationArg, paramDecl->getType(), paramDecl); - intVal = getLinkage()->getASTBuilder()->create<ConstantIntVal>(m_astBuilder->getIntType(), 0); + intVal = getLinkage()->getASTBuilder()->getOrCreate<ConstantIntVal>(m_astBuilder->getIntType(), 0); } ModuleSpecializationInfo::GenericArgInfo expandedArg; @@ -1192,15 +1192,18 @@ namespace Slang auto genericDeclRef = m_funcDeclRef.getParent().as<GenericDecl>(); SLANG_ASSERT(genericDeclRef); // otherwise we wouldn't have generic parameters - GenericSubstitution* genericSubst = getLinkage()->getASTBuilder()->create<GenericSubstitution>(); - genericSubst->outer = genericDeclRef.substitutions.substitutions; - genericSubst->genericDecl = genericDeclRef.getDecl(); + List<Val*> genericArgs; for(Index ii = 0; ii < genericSpecializationParamCount; ++ii) { auto specializationArg = args[ii]; - genericSubst->args.add(specializationArg.val); + genericArgs.add(specializationArg.val); } + GenericSubstitution* genericSubst = + getLinkage()->getASTBuilder()->getOrCreateGenericSubstitution( + genericDeclRef.getDecl(), + genericArgs, + genericDeclRef.substitutions.substitutions); for( auto constraintDecl : genericDeclRef.getDecl()->getMembersOfType<GenericTypeConstraintDecl>() ) { @@ -1218,7 +1221,7 @@ namespace Slang auto subTypeWitness = visitor.tryGetSubtypeWitness(sub, sup); if(subTypeWitness) { - genericSubst->args.add(subTypeWitness); + genericArgs.add(subTypeWitness); } else { @@ -1228,6 +1231,11 @@ namespace Slang } } + genericSubst = + getLinkage()->getASTBuilder()->getOrCreateGenericSubstitution( + genericDeclRef.getDecl(), + genericArgs, + genericDeclRef.substitutions.substitutions); specializedFuncDeclRef.substitutions.substitutions = genericSubst; } |
