From 499b0253c224e68ceed6e5b6b1ee9cd7d65aad0f Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 30 Jan 2023 19:24:09 -0800 Subject: Make ArrayExpressionType a DeclRefType and define its autodiff extension in stdlib. (#2615) * Allow array parameters in forward diff. * Use type canonicalization instead of coersion. * Reimplement array type. * Fix. * Update test case. --------- Co-authored-by: Yong He --- source/slang/slang-ast-val.cpp | 42 +++--------------------------------------- 1 file changed, 3 insertions(+), 39 deletions(-) (limited to 'source/slang/slang-ast-val.cpp') diff --git a/source/slang/slang-ast-val.cpp b/source/slang/slang-ast-val.cpp index e60c963a8..fde31c730 100644 --- a/source/slang/slang-ast-val.cpp +++ b/source/slang/slang-ast-val.cpp @@ -544,7 +544,6 @@ Val* ExtractExistentialSubtypeWitness::_substituteImplOverride(ASTBuilder* astBu return substValue; } - // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TaggedUnionSubtypeWitness !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! bool TaggedUnionSubtypeWitness::_equalsValOverride(Val* val) @@ -618,41 +617,6 @@ Val* TaggedUnionSubtypeWitness::_substituteImplOverride(ASTBuilder* astBuilder, return substWitness; } -bool DifferentialBottomSubtypeWitness::_equalsValOverride(Val* val) -{ - auto otherDiffBottomWitness = as(val); - if (!otherDiffBottomWitness) - return false; - - return otherDiffBottomWitness->sub && otherDiffBottomWitness->sub->equals(sub); -} - -void DifferentialBottomSubtypeWitness::_toTextOverride(StringBuilder& out) -{ - out << "DifferentialBottomSubtypeWitness(" << sub << ")"; -} - -HashCode DifferentialBottomSubtypeWitness::_getHashCodeOverride() -{ - return combineHash(3892, sub->getHashCode()); -} - -Val* DifferentialBottomSubtypeWitness::_substituteImplOverride(ASTBuilder* astBuilder, SubstitutionSet subst, int* ioDiff) -{ - int diff = 0; - - auto substSub = as(sub->substituteImpl(astBuilder, subst, &diff)); - auto substSup = as(sup->substituteImpl(astBuilder, subst, &diff)); - if (!diff) - return this; - - *ioDiff += diff; - - DifferentialBottomSubtypeWitness* substWitness = - astBuilder->create(substSub, substSup); - return substWitness; -} - bool ConjunctionSubtypeWitness::_equalsValOverride(Val* val) { if (auto other = as(val)) @@ -940,7 +904,7 @@ Val* PolynomialIntVal::_substituteImplOverride(ASTBuilder* astBuilder, Substitut *ioDiff += diff; if (evaluatedTerms.getCount() == 0) - return astBuilder->getOrCreate(type, evaluatedConstantTerm); + return astBuilder->getIntVal(type, evaluatedConstantTerm); if (diff != 0) { auto newPolynomial = astBuilder->create(type); @@ -1253,7 +1217,7 @@ IntVal* PolynomialIntVal::canonicalize(ASTBuilder* builder) return terms[0]->paramFactors[0]->param; } if (terms.getCount() == 0) - return builder->getOrCreate(type, constantTerm); + return builder->getIntVal(type, constantTerm); return this; } @@ -1425,7 +1389,7 @@ Val* FuncCallIntVal::tryFoldImpl(ASTBuilder* astBuilder, Type* resultType, DeclR { SLANG_UNREACHABLE("constant folding of FuncCallIntVal"); } - return astBuilder->getOrCreate(resultType, resultValue); + return astBuilder->getIntVal(resultType, resultValue); } return nullptr; } -- cgit v1.2.3