@@ -2868,12 +2868,12 @@ func.func @flat_transpose_index(%arg0: vector<16xindex>) -> vector<16xindex> {
28682868
28692869// -----
28702870
2871- func.func @vector_load_op (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) -> vector <8 xf32 > {
2871+ func.func @vector_load (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) -> vector <8 xf32 > {
28722872 %0 = vector.load %memref [%i , %j ] : memref <200 x100 xf32 >, vector <8 xf32 >
28732873 return %0 : vector <8 xf32 >
28742874}
28752875
2876- // CHECK-LABEL: func @vector_load_op
2876+ // CHECK-LABEL: func @vector_load
28772877// CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
28782878// CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
28792879// CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
@@ -2882,12 +2882,26 @@ func.func @vector_load_op(%memref : memref<200x100xf32>, %i : index, %j : index)
28822882
28832883// -----
28842884
2885- func.func @vector_load_op_nontemporal (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) -> vector <8 xf32 > {
2885+ func.func @vector_load_scalable (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) -> vector <[8 ]xf32 > {
2886+ %0 = vector.load %memref [%i , %j ] : memref <200 x100 xf32 >, vector <[8 ]xf32 >
2887+ return %0 : vector <[8 ]xf32 >
2888+ }
2889+
2890+ // CHECK-LABEL: func @vector_load_scalable
2891+ // CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
2892+ // CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
2893+ // CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
2894+ // CHECK: %[[gep:.*]] = llvm.getelementptr %{{.*}}[%[[add]]] : (!llvm.ptr, i64) -> !llvm.ptr, f32
2895+ // CHECK: llvm.load %[[gep]] {alignment = 4 : i64} : !llvm.ptr -> vector<[8]xf32>
2896+
2897+ // -----
2898+
2899+ func.func @vector_load_nontemporal (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) -> vector <8 xf32 > {
28862900 %0 = vector.load %memref [%i , %j ] {nontemporal = true } : memref <200 x100 xf32 >, vector <8 xf32 >
28872901 return %0 : vector <8 xf32 >
28882902}
28892903
2890- // CHECK-LABEL: func @vector_load_op_nontemporal
2904+ // CHECK-LABEL: func @vector_load_nontemporal
28912905// CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
28922906// CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
28932907// CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
@@ -2896,24 +2910,65 @@ func.func @vector_load_op_nontemporal(%memref : memref<200x100xf32>, %i : index,
28962910
28972911// -----
28982912
2899- func.func @vector_load_op_index (%memref : memref <200 x100 xindex >, %i : index , %j : index ) -> vector <8 xindex > {
2913+ func.func @vector_load_nontemporal_scalable (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) -> vector <[8 ]xf32 > {
2914+ %0 = vector.load %memref [%i , %j ] {nontemporal = true } : memref <200 x100 xf32 >, vector <[8 ]xf32 >
2915+ return %0 : vector <[8 ]xf32 >
2916+ }
2917+
2918+ // CHECK-LABEL: func @vector_load_nontemporal_scalable
2919+ // CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
2920+ // CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
2921+ // CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
2922+ // CHECK: %[[gep:.*]] = llvm.getelementptr %{{.*}}[%[[add]]] : (!llvm.ptr, i64) -> !llvm.ptr, f32
2923+ // CHECK: llvm.load %[[gep]] {alignment = 4 : i64, nontemporal} : !llvm.ptr -> vector<[8]xf32>
2924+
2925+ // -----
2926+
2927+ func.func @vector_load_index (%memref : memref <200 x100 xindex >, %i : index , %j : index ) -> vector <8 xindex > {
29002928 %0 = vector.load %memref [%i , %j ] : memref <200 x100 xindex >, vector <8 xindex >
29012929 return %0 : vector <8 xindex >
29022930}
2903- // CHECK-LABEL: func @vector_load_op_index
2931+ // CHECK-LABEL: func @vector_load_index
29042932// CHECK: %[[T0:.*]] = llvm.load %{{.*}} {alignment = 8 : i64} : !llvm.ptr -> vector<8xi64>
29052933// CHECK: %[[T1:.*]] = builtin.unrealized_conversion_cast %[[T0]] : vector<8xi64> to vector<8xindex>
29062934// CHECK: return %[[T1]] : vector<8xindex>
29072935
29082936// -----
29092937
2910- func.func @vector_store_op (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) {
2938+ func.func @vector_load_index_scalable (%memref : memref <200 x100 xindex >, %i : index , %j : index ) -> vector <[8 ]xindex > {
2939+ %0 = vector.load %memref [%i , %j ] : memref <200 x100 xindex >, vector <[8 ]xindex >
2940+ return %0 : vector <[8 ]xindex >
2941+ }
2942+ // CHECK-LABEL: func @vector_load_index_scalable
2943+ // CHECK: %[[T0:.*]] = llvm.load %{{.*}} {alignment = 8 : i64} : !llvm.ptr -> vector<[8]xi64>
2944+ // CHECK: %[[T1:.*]] = builtin.unrealized_conversion_cast %[[T0]] : vector<[8]xi64> to vector<[8]xindex>
2945+ // CHECK: return %[[T1]] : vector<[8]xindex>
2946+
2947+ // -----
2948+
2949+ func.func @vector_load_0d (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) -> vector <f32 > {
2950+ %0 = vector.load %memref [%i , %j ] : memref <200 x100 xf32 >, vector <f32 >
2951+ return %0 : vector <f32 >
2952+ }
2953+
2954+ // CHECK-LABEL: func @vector_load_0d
2955+ // CHECK: %[[load:.*]] = memref.load %{{.*}}[%{{.*}}, %{{.*}}]
2956+ // CHECK: %[[vec:.*]] = llvm.mlir.undef : vector<1xf32>
2957+ // CHECK: %[[c0:.*]] = llvm.mlir.constant(0 : i32) : i32
2958+ // CHECK: %[[inserted:.*]] = llvm.insertelement %[[load]], %[[vec]][%[[c0]] : i32] : vector<1xf32>
2959+ // CHECK: %[[cast:.*]] = builtin.unrealized_conversion_cast %[[inserted]] : vector<1xf32> to vector<f32>
2960+ // CHECK: return %[[cast]] : vector<f32>
2961+
2962+ // -----
2963+
2964+
2965+ func.func @vector_store (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) {
29112966 %val = arith.constant dense <11.0 > : vector <4 xf32 >
29122967 vector.store %val , %memref [%i , %j ] : memref <200 x100 xf32 >, vector <4 xf32 >
29132968 return
29142969}
29152970
2916- // CHECK-LABEL: func @vector_store_op
2971+ // CHECK-LABEL: func @vector_store
29172972// CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
29182973// CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
29192974// CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
@@ -2922,13 +2977,28 @@ func.func @vector_store_op(%memref : memref<200x100xf32>, %i : index, %j : index
29222977
29232978// -----
29242979
2925- func.func @vector_store_op_nontemporal (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) {
2980+ func.func @vector_store_scalable (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) {
2981+ %val = arith.constant dense <11.0 > : vector <[4 ]xf32 >
2982+ vector.store %val , %memref [%i , %j ] : memref <200 x100 xf32 >, vector <[4 ]xf32 >
2983+ return
2984+ }
2985+
2986+ // CHECK-LABEL: func @vector_store_scalable
2987+ // CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
2988+ // CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
2989+ // CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
2990+ // CHECK: %[[gep:.*]] = llvm.getelementptr %{{.*}}[%[[add]]] : (!llvm.ptr, i64) -> !llvm.ptr, f32
2991+ // CHECK: llvm.store %{{.*}}, %[[gep]] {alignment = 4 : i64} : vector<[4]xf32>, !llvm.ptr
2992+
2993+ // -----
2994+
2995+ func.func @vector_store_nontemporal (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) {
29262996 %val = arith.constant dense <11.0 > : vector <4 xf32 >
29272997 vector.store %val , %memref [%i , %j ] {nontemporal = true } : memref <200 x100 xf32 >, vector <4 xf32 >
29282998 return
29292999}
29303000
2931- // CHECK-LABEL: func @vector_store_op_nontemporal
3001+ // CHECK-LABEL: func @vector_store_nontemporal
29323002// CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
29333003// CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
29343004// CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
@@ -2937,28 +3007,38 @@ func.func @vector_store_op_nontemporal(%memref : memref<200x100xf32>, %i : index
29373007
29383008// -----
29393009
2940- func.func @vector_store_op_index (%memref : memref <200 x100 xindex >, %i : index , %j : index ) {
3010+ func.func @vector_store_nontemporal_scalable (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) {
3011+ %val = arith.constant dense <11.0 > : vector <[4 ]xf32 >
3012+ vector.store %val , %memref [%i , %j ] {nontemporal = true } : memref <200 x100 xf32 >, vector <[4 ]xf32 >
3013+ return
3014+ }
3015+
3016+ // CHECK-LABEL: func @vector_store_nontemporal_scalable
3017+ // CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
3018+ // CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
3019+ // CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
3020+ // CHECK: %[[gep:.*]] = llvm.getelementptr %{{.*}}[%[[add]]] : (!llvm.ptr, i64) -> !llvm.ptr, f32
3021+ // CHECK: llvm.store %{{.*}}, %[[gep]] {alignment = 4 : i64, nontemporal} : vector<[4]xf32>, !llvm.ptr
3022+
3023+ // -----
3024+
3025+ func.func @vector_store_index (%memref : memref <200 x100 xindex >, %i : index , %j : index ) {
29413026 %val = arith.constant dense <11 > : vector <4 xindex >
29423027 vector.store %val , %memref [%i , %j ] : memref <200 x100 xindex >, vector <4 xindex >
29433028 return
29443029}
2945- // CHECK-LABEL: func @vector_store_op_index
3030+ // CHECK-LABEL: func @vector_store_index
29463031// CHECK: llvm.store %{{.*}}, %{{.*}} {alignment = 8 : i64} : vector<4xi64>, !llvm.ptr
29473032
29483033// -----
29493034
2950- func.func @vector_load_op_0d (%memref : memref <200 x100 xf32 >, %i : index , %j : index ) -> vector <f32 > {
2951- %0 = vector.load %memref [%i , %j ] : memref <200 x100 xf32 >, vector <f32 >
2952- return %0 : vector <f32 >
3035+ func.func @vector_store_index_scalable (%memref : memref <200 x100 xindex >, %i : index , %j : index ) {
3036+ %val = arith.constant dense <11 > : vector <[4 ]xindex >
3037+ vector.store %val , %memref [%i , %j ] : memref <200 x100 xindex >, vector <[4 ]xindex >
3038+ return
29533039}
2954-
2955- // CHECK-LABEL: func @vector_load_op_0d
2956- // CHECK: %[[load:.*]] = memref.load %{{.*}}[%{{.*}}, %{{.*}}]
2957- // CHECK: %[[vec:.*]] = llvm.mlir.undef : vector<1xf32>
2958- // CHECK: %[[c0:.*]] = llvm.mlir.constant(0 : i32) : i32
2959- // CHECK: %[[inserted:.*]] = llvm.insertelement %[[load]], %[[vec]][%[[c0]] : i32] : vector<1xf32>
2960- // CHECK: %[[cast:.*]] = builtin.unrealized_conversion_cast %[[inserted]] : vector<1xf32> to vector<f32>
2961- // CHECK: return %[[cast]] : vector<f32>
3040+ // CHECK-LABEL: func @vector_store_index_scalable
3041+ // CHECK: llvm.store %{{.*}}, %{{.*}} {alignment = 8 : i64} : vector<[4]xi64>, !llvm.ptr
29623042
29633043// -----
29643044
0 commit comments