@@ -828,3 +828,39 @@ func @transfer_read_1d(%A : memref<?xf32>, %base: index) -> vector<17xf32> {
828
828
// CHECK: llvm.intr.masked.store %[[loaded]], %[[vecPtr_b]], %[[mask_b]]
829
829
// CHECK-SAME: {alignment = 1 : i32} :
830
830
// CHECK-SAME: !llvm<"<17 x float>">, !llvm<"<17 x i1>"> into !llvm<"<17 x float>*">
831
+
832
+ func @transfer_read_2d_to_1d (%A : memref <?x?xf32 >, %base0: index , %base1: index ) -> vector <17 xf32 > {
833
+ %f7 = constant 7.0 : f32
834
+ %f = vector.transfer_read %A [%base0 , %base1 ], %f7
835
+ {permutation_map = affine_map <(d0 , d1 ) -> (d1 )>} :
836
+ memref <?x?xf32 >, vector <17 xf32 >
837
+ return %f: vector <17 xf32 >
838
+ }
839
+ // CHECK-LABEL: func @transfer_read_2d_to_1d
840
+ // CHECK-SAME: %[[BASE_0:[a-zA-Z0-9]*]]: !llvm.i64, %[[BASE_1:[a-zA-Z0-9]*]]: !llvm.i64) -> !llvm<"<17 x float>">
841
+ //
842
+ // Create offsetVector = [ offset + 0 .. offset + vector_length - 1 ].
843
+ // CHECK: %[[offsetVec:.*]] = llvm.mlir.undef : !llvm<"<17 x i64>">
844
+ // CHECK: %[[c0:.*]] = llvm.mlir.constant(0 : i32) : !llvm.i32
845
+ // Here we check we properly use %BASE_1
846
+ // CHECK: %[[offsetVec2:.*]] = llvm.insertelement %[[BASE_1]], %[[offsetVec]][%[[c0]] :
847
+ // CHECK-SAME: !llvm.i32] : !llvm<"<17 x i64>">
848
+ // CHECK: %[[offsetVec3:.*]] = llvm.shufflevector %[[offsetVec2]], %{{.*}} [
849
+ // CHECK-SAME: 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32,
850
+ // CHECK-SAME: 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32,
851
+ // CHECK-SAME: 0 : i32, 0 : i32, 0 : i32] :
852
+ //
853
+ // Let dim the memref dimension, compute the vector comparison mask:
854
+ // [ offset + 0 .. offset + vector_length - 1 ] < [ dim .. dim ]
855
+ // Here we check we properly use %DIM[1]
856
+ // CHECK: %[[DIM:.*]] = llvm.extractvalue %{{.*}}[3, 1] :
857
+ // CHECK-SAME: !llvm<"{ float*, float*, i64, [2 x i64], [2 x i64] }">
858
+ // CHECK: %[[dimVec:.*]] = llvm.mlir.undef : !llvm<"<17 x i64>">
859
+ // CHECK: %[[c01:.*]] = llvm.mlir.constant(0 : i32) : !llvm.i32
860
+ // CHECK: %[[dimVec2:.*]] = llvm.insertelement %[[DIM]], %[[dimVec]][%[[c01]] :
861
+ // CHECK-SAME: !llvm.i32] : !llvm<"<17 x i64>">
862
+ // CHECK: %[[dimVec3:.*]] = llvm.shufflevector %[[dimVec2]], %{{.*}} [
863
+ // CHECK-SAME: 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32,
864
+ // CHECK-SAME: 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32, 0 : i32,
865
+ // CHECK-SAME: 0 : i32, 0 : i32, 0 : i32] :
866
+ // CHECK-SAME: !llvm<"<17 x i64>">, !llvm<"<17 x i64>">
0 commit comments