[Mlir-commits] [mlir] [mlir][VectorToXeGPU] Fix crash on memref with non-scalar element type (PR #183905)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Sun Mar 1 12:20:11 PST 2026


================
@@ -556,7 +565,8 @@ struct TransferReadLowering : public OpRewritePattern<vector::TransferReadOp> {
       return lowerToScatteredLoadOp(readOp, rewriter);
 
     // Perform common data transfer checks.
-    if (failed(storeLoadPreconditions(rewriter, readOp, vecTy)))
+    auto readMemTy = cast<MemRefType>(readOp.getShapedType());
+    if (failed(storeLoadPreconditions(rewriter, readOp, vecTy, readMemTy)))
----------------
sweiglbosker wrote:

```
[greedy-rewriter:1] Processing operation : 'vector.transfer_read'(0x559b04c472e0) {
[greedy-rewriter:1]   %1 = "vector.transfer_read"(%arg0, %arg1, %0) <{in_bounds = [], operandSegmentSizes = array<i32: 1, 1, 1, 0>, permutation_map = affine_map<(d0) -> ()>}> : (memref<?xvector<4xf32>>, index, vector<4xf32>) -> vector<4xf32>
[greedy-rewriter:1]
[greedy-rewriter:1]
[greedy-rewriter:1]   * Pattern (anonymous namespace)::TransferReadLowering : 'vector.transfer_read -> ()' {
[pattern-application PatternApplicator.cpp:209 1] Trying to match "(anonymous namespace)::TransferReadLowering"
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | memref.extract_strided_metadata
[greedy-rewriter:1]     ** Insert  : 'memref.extract_strided_metadata'(0x559b04c68660)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | vector.step
[greedy-rewriter:1]     ** Insert  : 'vector.step'(0x559b04c59170)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | vector.broadcast
[greedy-rewriter:1]     ** Insert  : 'vector.broadcast'(0x559b04c69060)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | arith.muli
[greedy-rewriter:1]     ** Insert  : 'arith.muli'(0x559b04c699d0)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | vector.shape_cast
[greedy-rewriter:1]     ** Insert  : 'vector.shape_cast'(0x559b04c69ab0)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | vector.broadcast
[greedy-rewriter:1]     ** Insert  : 'vector.broadcast'(0x559b04c69b40)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | arith.muli
[greedy-rewriter:1]     ** Insert  : 'arith.muli'(0x559b04c69bd0)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | arith.addi
[greedy-rewriter:1]     ** Insert  : 'arith.addi'(0x559b04c69c80)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | vector.broadcast
[greedy-rewriter:1]     ** Insert  : 'vector.broadcast'(0x559b04c69d30)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | arith.addi
[greedy-rewriter:1]     ** Insert  : 'arith.addi'(0x559b04c69dc0)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | memref.extract_aligned_pointer_as_index
[greedy-rewriter:1]     ** Insert  : 'memref.extract_aligned_pointer_as_index'(0x559b04c69e70)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | arith.index_cast
[greedy-rewriter:1]     ** Insert  : 'arith.index_cast'(0x559b04c69f00)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | vector.constant_mask
[greedy-rewriter:1]     ** Insert  : 'vector.constant_mask'(0x559b04c532c0)
[pattern-logging-listener PatternLoggingListener.cpp:10 1] (anonymous namespace)::TransferReadLowering | notifyOperationInserted | xegpu.load
[greedy-rewriter:1]     ** Insert  : 'xegpu.load'(0x559b04c37fd0)
[pattern-logging-listener PatternLoggingListener.cpp:31 1] (anonymous namespace)::TransferReadLowering | notifyOperationReplaced (with values) | vector.transfer_read
[greedy-rewriter:1]     ** Replace : 'vector.transfer_read'(0x559b04c472e0)
[pattern-logging-listener PatternLoggingListener.cpp:17 1] (anonymous namespace)::TransferReadLowering | notifyOperationModified | func.return
[greedy-rewriter:1]     ** Modified: 'func.return'(0x559b04c52760)
[pattern-logging-listener PatternLoggingListener.cpp:38 1] (anonymous namespace)::TransferReadLowering | notifyOperationErased | vector.transfer_read
[greedy-rewriter:1]     ** Erase   : 'vector.transfer_read'(0x559b04c472e0)
[pattern-application PatternApplicator.cpp:224 1]  -> matchAndRewrite successful
[greedy-rewriter:1]   } -> success : pattern applied successfully
[pattern-application PatternApplicator.cpp:54 2] // *** IR Dump After Pattern Application ***
[pattern-application PatternApplicator.cpp:54 2] func.func @transfer_read_non_scalar_memref(%arg0: memref<?xvector<4xf32>>, %arg1: index) -> vector<4xf32> {
[pattern-application PatternApplicator.cpp:54 2]   %cst = arith.constant dense<0.000000e+00> : vector<4xf32>
[pattern-application PatternApplicator.cpp:54 2]   %base_buffer, %offset, %sizes, %strides = memref.extract_strided_metadata %arg0 : memref<?xvector<4xf32>> -> memref<vector<4xf32>>, index, index, index
[pattern-application PatternApplicator.cpp:54 2]   %0 = vector.step : vector<4xindex>
[pattern-application PatternApplicator.cpp:54 2]   %1 = vector.broadcast %strides : index to vector<4xindex>
[pattern-application PatternApplicator.cpp:54 2]   %2 = arith.muli %0, %1 : vector<4xindex>
[pattern-application PatternApplicator.cpp:54 2]   %3 = vector.shape_cast %2 : vector<4xindex> to vector<4xindex>
[pattern-application PatternApplicator.cpp:54 2]   %4 = vector.broadcast %3 : vector<4xindex> to vector<4xindex>
[pattern-application PatternApplicator.cpp:54 2]   %5 = arith.muli %arg1, %strides : index
[pattern-application PatternApplicator.cpp:54 2]   %6 = arith.addi %offset, %5 : index
[pattern-application PatternApplicator.cpp:54 2]   %7 = vector.broadcast %6 : index to vector<4xindex>
[pattern-application PatternApplicator.cpp:54 2]   %8 = arith.addi %7, %4 : vector<4xindex>
[pattern-application PatternApplicator.cpp:54 2]   %intptr = memref.extract_aligned_pointer_as_index %arg0 : memref<?xvector<4xf32>> -> index
[pattern-application PatternApplicator.cpp:54 2]   %9 = arith.index_cast %intptr : index to i64
[pattern-application PatternApplicator.cpp:54 2]   %10 = vector.constant_mask [4] : vector<4xi1>
[pattern-application PatternApplicator.cpp:54 2]   %11 = xegpu.load %9[%8], %10  : i64, vector<4xindex>, vector<4xi1> -> vector<4xf32>
[pattern-application PatternApplicator.cpp:54 2]   return %11 : vector<4xf32>
[pattern-application PatternApplicator.cpp:54 2] }
```

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


More information about the Mlir-commits mailing list