[Mlir-commits] [mlir] [mlir][Vector] add vector.insert canonicalization pattern for vectors created from ub.poison (PR #142944)
Yang Bai
llvmlistbot at llvm.org
Thu Jun 26 02:05:19 PDT 2025
================
@@ -3149,6 +3149,42 @@ LogicalResult InsertOp::verify() {
return success();
}
+// Calculate the linearized position for inserting elements and extract values
+// from the source attribute. Returns the starting position in the destination
+// vector where elements should be inserted.
+static int64_t calculateInsertPositionAndExtractValues(
+ VectorType destTy, ArrayRef<int64_t> positions, Attribute srcAttr,
+ SmallVectorImpl<Attribute> &valueToInsert) {
+ llvm::SmallVector<int64_t> completePositions(destTy.getRank(), 0);
+ copy(positions, completePositions.begin());
+ int64_t insertBeginPosition =
+ linearize(completePositions, computeStrides(destTy.getShape()));
+
+ Type destEltType = destTy.getElementType();
+
+ /// Converts the expected type to an IntegerAttr if there's
+ /// a mismatch.
+ auto convertIntegerAttr = [](Attribute attr, Type expectedType) -> Attribute {
+ if (auto intAttr = mlir::dyn_cast<IntegerAttr>(attr)) {
+ if (intAttr.getType() != expectedType)
+ return IntegerAttr::get(expectedType, intAttr.getInt());
+ }
+ return attr;
+ };
----------------
yangtetris wrote:
Actually, this code originates from [#88314](https://github.com/llvm/llvm-project/pull/88314) which addressed issues related to mismatches between index types and i64. I think this background is enough to reassures us about the safety. But, it also reminded me that we might need a similar attribute conversion in the [from_elements to constant PR](https://github.com/llvm/llvm-project/pull/145849). I'll verify later whether that pattern encounters similar issues.
https://github.com/llvm/llvm-project/pull/142944
More information about the Mlir-commits
mailing list