[Mlir-commits] [mlir] [mlir][linalg] Use ub.poison in data layout propagation if a packed operand requires padding. (PR #159467)
Han-Chung Wang
llvmlistbot at llvm.org
Fri Sep 19 14:17:52 PDT 2025
================
@@ -5310,6 +5310,35 @@ bool PackOp::requirePaddingValue(ArrayRef<int64_t> inputShape,
return false;
}
+bool PackOp::requirePaddingValueStrict(ArrayRef<int64_t> inputShape,
+ ArrayRef<int64_t> innerDimsPos,
+ ArrayRef<int64_t> outputShape,
+ ArrayRef<int64_t> outerDimsPerm,
+ ArrayRef<OpFoldResult> innerTiles) {
+ SmallVector<int64_t> outputTileSizes(
+ outputShape.take_front(inputShape.size()));
+ if (!outerDimsPerm.empty()) {
+ assert(outerDimsPerm.size() == outputTileSizes.size() &&
+ "expected output and outer_dims_perm to have same size");
+ applyPermutationToVector(outputTileSizes,
+ invertPermutationVector(outerDimsPerm));
+ }
+ for (auto [pos, tileSize] : llvm::zip_equal(innerDimsPos, innerTiles)) {
+ if (ShapedType::isDynamic(inputShape[pos]))
+ return true;
+ std::optional<int64_t> constantTile = getConstantIntValue(tileSize);
+
+ if (!constantTile) {
+ if (ShapedType::isStatic(outputTileSizes[pos]) &&
+ (inputShape[pos] % outputTileSizes[pos] != 0))
+ return true;
+ } else if (inputShape[pos] % (*constantTile) != 0) {
+ return true;
+ }
----------------
hanhanW wrote:
I think we should return true if inner tile size is dynamic -- which is always safe.
https://github.com/llvm/llvm-project/pull/159467
More information about the Mlir-commits
mailing list