[Mlir-commits] [mlir] [MLIR][XeGPU][VectorToXeGPU] Lower vector.load/store/transfer_read/transfer_write to new offsets syntax (PR #162095)

Jianhui Li llvmlistbot at llvm.org
Mon Oct 20 23:28:59 PDT 2025


================
@@ -97,57 +97,49 @@ static LogicalResult transferPreconditions(PatternRewriter &rewriter,
   return success();
 }
 
-static xegpu::CreateNdDescOp
-createNdDescriptor(PatternRewriter &rewriter, Location loc,
-                   xegpu::TensorDescType descType, TypedValue<MemRefType> src,
-                   Operation::operand_range offsets) {
+static xegpu::CreateNdDescOp createNdDescriptor(PatternRewriter &rewriter,
+                                                Location loc,
+                                                xegpu::TensorDescType descType,
+                                                TypedValue<MemRefType> src) {
   MemRefType srcTy = src.getType();
   auto [strides, offset] = srcTy.getStridesAndOffset();
 
   xegpu::CreateNdDescOp ndDesc;
-  if (srcTy.hasStaticShape()) {
-    ndDesc = xegpu::CreateNdDescOp::create(rewriter, loc, descType, src,
-                                           getAsOpFoldResult(offsets));
-  } else {
+  if (srcTy.hasStaticShape())
+    ndDesc = xegpu::CreateNdDescOp::create(rewriter, loc, descType, src);
+  else {
     // In case of any dynamic shapes, source's shape and strides have to be
     // explicitly provided.
     SmallVector<Value> sourceDims;
     unsigned srcRank = srcTy.getRank();
     for (unsigned i = 0; i < srcRank; ++i)
       sourceDims.push_back(memref::DimOp::create(rewriter, loc, src, i));
 
-    SmallVector<int64_t> constOffsets;
-    SmallVector<Value> dynOffsets;
-    for (Value offset : offsets) {
-      std::optional<int64_t> staticVal = getConstantIntValue(offset);
-      if (!staticVal)
-        dynOffsets.push_back(offset);
-      constOffsets.push_back(staticVal.value_or(ShapedType::kDynamic));
-    }
-
-    SmallVector<Value> dynShapes;
+    SmallVector<OpFoldResult> mixedShapes;
     for (auto [idx, shape] : llvm::enumerate(srcTy.getShape())) {
       if (shape == ShapedType::kDynamic)
-        dynShapes.push_back(sourceDims[idx]);
+        mixedShapes.push_back(sourceDims[idx]);
+      else
+        mixedShapes.push_back(rewriter.getI64IntegerAttr(shape));
     }
 
     // Compute strides in reverse order.
-    SmallVector<Value> dynStrides;
+    SmallVector<OpFoldResult> mixedStrides;
     Value accStride = arith::ConstantIndexOp::create(rewriter, loc, 1);
----------------
Jianhui-Li wrote:

Not directly related to this PR. But I am not sure this code is correct since the dynamic shape tensor can be in col major. Can we just use memref.extract_strided_metadata to get the strides? 

https://github.com/llvm/llvm-project/pull/162095


More information about the Mlir-commits mailing list