From ea61540e0887fa6ca55fe5b6a894955e52c3bea0 Mon Sep 17 00:00:00 2001 From: NiccoloN Date: Wed, 13 May 2026 17:46:19 +0200 Subject: [PATCH] fix failing validations after last commit --- .../HostConstantFolding/Patterns/Subview.cpp | 14 +++++++------- src/PIM/Pass/PimCodegen/VerificationPass.cpp | 10 +++++++++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/PIM/Pass/PimCodegen/HostConstantFolding/Patterns/Subview.cpp b/src/PIM/Pass/PimCodegen/HostConstantFolding/Patterns/Subview.cpp index 592d7c5..ac8c5da 100644 --- a/src/PIM/Pass/PimCodegen/HostConstantFolding/Patterns/Subview.cpp +++ b/src/PIM/Pass/PimCodegen/HostConstantFolding/Patterns/Subview.cpp @@ -72,12 +72,7 @@ delinearizeIndexValue(Value linearIndex, ArrayRef shape, ArrayRef 1 && srcOffset == 0 && dstOffset == 0 && sourceType.getRank() == static_cast(copyShape.size()) + if (allowLoopRewrite && numSlices > 1 && srcOffset == 0 && dstOffset == 0 + && sourceType.getRank() == static_cast(copyShape.size()) && dstType.getRank() == static_cast(copyShape.size())) { auto c0 = arith::ConstantIndexOp::create(rewriter, copyOp.getLoc(), 0); auto cUpper = arith::ConstantIndexOp::create(rewriter, copyOp.getLoc(), numSlices); @@ -244,6 +241,7 @@ struct RewriteCoreSubviewCopyPattern final : OpRewritePattern copyOp.getTargetOffset(), copyOp.getSourceOffset(), copyOp.getSize(), + /*allowLoopRewrite=*/true, rewriter, [&]( MemRefType resultType, Value dst, Value src, int64_t dstByteOffset, int64_t srcByteOffset, int64_t sliceBytes) { @@ -276,6 +274,7 @@ struct RewriteHostSubviewLoadPattern final : OpRewritePattern(resolvedAddress->base.getDefiningOp()); } +static bool isCodegenAddressableValue(Value value, const StaticValueKnowledge& knowledge) { + auto resolvedAddress = resolveContiguousAddress(value, knowledge); + if (failed(resolvedAddress)) + return false; + return isa(resolvedAddress->base) + || isa(resolvedAddress->base.getDefiningOp()); +} + static bool isConstantGlobalView(Value value) { while (true) { Operation* defOp = value.getDefiningOp(); @@ -260,7 +268,7 @@ private: } if (isExplicitHostOperand(&op, operandIndex)) { - if (!isCodegenAddressableValue(operand)) { + if (!isCodegenAddressableValue(operand, knowledge)) { op.emitOpError() << "host operand #" << operandIndex << " is not backed by contiguous addressable storage"; hasFailure = true;