From 1996785e1c5d76254a102c1ec0df5dd7e2e4d68a Mon Sep 17 00:00:00 2001 From: Sai Praveen Bangaru <31557731+saipraveenb25@users.noreply.github.com> Date: Thu, 31 Aug 2023 14:30:35 -0400 Subject: Bottleneck `TypeCastIntVal` creation through ASTBuilder (#3171) * Bottleneck type-cast-int-val creation through ASTBuilder * Update slang-ast-builder.h --- source/slang/slang-ast-builder.h | 9 +++++++++ source/slang/slang-ast-val.cpp | 2 +- source/slang/slang-check-expr.cpp | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) (limited to 'source') diff --git a/source/slang/slang-ast-builder.h b/source/slang/slang-ast-builder.h index 338993552..f75ab960f 100644 --- a/source/slang/slang-ast-builder.h +++ b/source/slang/slang-ast-builder.h @@ -372,6 +372,15 @@ public: return getOrCreate(type, value); } + TypeCastIntVal* getTypeCastIntVal(Type* type, Val* base) + { + // Unwrap any existing type casts. + while (auto baseTypeCast = as(base)) + base = baseTypeCast->getBase(); + + return getOrCreate(type, base); + } + DeclRef getGenericAppDeclRef(DeclRef genericDeclRef, ConstArrayView args, Decl* innerDecl = nullptr) { if (!innerDecl) diff --git a/source/slang/slang-ast-val.cpp b/source/slang/slang-ast-val.cpp index a0ea60625..8afc6e689 100644 --- a/source/slang/slang-ast-val.cpp +++ b/source/slang/slang-ast-val.cpp @@ -1062,7 +1062,7 @@ Val* TypeCastIntVal::_substituteImplOverride(ASTBuilder* astBuilder, Substitutio return newVal; else { - auto result = astBuilder->getOrCreate(substType, substBase); + auto result = astBuilder->getTypeCastIntVal(substType, substBase); return result; } } diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp index e6d1049a0..bf7950310 100644 --- a/source/slang/slang-check-expr.cpp +++ b/source/slang/slang-check-expr.cpp @@ -1368,7 +1368,7 @@ namespace Slang TypeCastIntVal::tryFoldImpl(m_astBuilder, targetBasicType, argVals[0], getSink())); if (foldVal) return foldVal; - auto result = m_astBuilder->getOrCreate(targetBasicType, argVals[0]); + auto result = m_astBuilder->getTypeCastIntVal(targetBasicType, argVals[0]); return result; } else @@ -1594,7 +1594,7 @@ namespace Slang TypeCastIntVal::tryFoldImpl(m_astBuilder, substType, val, getSink())); if (foldVal) return foldVal; - auto result = m_astBuilder->getOrCreate(substType, val); + auto result = m_astBuilder->getTypeCastIntVal(substType, val); return result; } } -- cgit v1.2.3