@@ -2868,12 +2868,12 @@ func.func @flat_transpose_index(%arg0: vector<16xindex>) -> vector<16xindex> {
2868
2868
2869
2869
// -----
2870
2870
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 > {
2872
2872
%0 = vector.load %memref [%i , %j ] : memref <200 x100 xf32 >, vector <8 xf32 >
2873
2873
return %0 : vector <8 xf32 >
2874
2874
}
2875
2875
2876
- // CHECK-LABEL: func @vector_load_op
2876
+ // CHECK-LABEL: func @vector_load
2877
2877
// CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
2878
2878
// CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
2879
2879
// CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
@@ -2882,12 +2882,26 @@ func.func @vector_load_op(%memref : memref<200x100xf32>, %i : index, %j : index)
2882
2882
2883
2883
// -----
2884
2884
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 > {
2886
2900
%0 = vector.load %memref [%i , %j ] {nontemporal = true } : memref <200 x100 xf32 >, vector <8 xf32 >
2887
2901
return %0 : vector <8 xf32 >
2888
2902
}
2889
2903
2890
- // CHECK-LABEL: func @vector_load_op_nontemporal
2904
+ // CHECK-LABEL: func @vector_load_nontemporal
2891
2905
// CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
2892
2906
// CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
2893
2907
// CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
@@ -2896,24 +2910,65 @@ func.func @vector_load_op_nontemporal(%memref : memref<200x100xf32>, %i : index,
2896
2910
2897
2911
// -----
2898
2912
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 > {
2900
2928
%0 = vector.load %memref [%i , %j ] : memref <200 x100 xindex >, vector <8 xindex >
2901
2929
return %0 : vector <8 xindex >
2902
2930
}
2903
- // CHECK-LABEL: func @vector_load_op_index
2931
+ // CHECK-LABEL: func @vector_load_index
2904
2932
// CHECK: %[[T0:.*]] = llvm.load %{{.*}} {alignment = 8 : i64} : !llvm.ptr -> vector<8xi64>
2905
2933
// CHECK: %[[T1:.*]] = builtin.unrealized_conversion_cast %[[T0]] : vector<8xi64> to vector<8xindex>
2906
2934
// CHECK: return %[[T1]] : vector<8xindex>
2907
2935
2908
2936
// -----
2909
2937
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 ) {
2911
2966
%val = arith.constant dense <11.0 > : vector <4 xf32 >
2912
2967
vector.store %val , %memref [%i , %j ] : memref <200 x100 xf32 >, vector <4 xf32 >
2913
2968
return
2914
2969
}
2915
2970
2916
- // CHECK-LABEL: func @vector_store_op
2971
+ // CHECK-LABEL: func @vector_store
2917
2972
// CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
2918
2973
// CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
2919
2974
// CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
@@ -2922,13 +2977,28 @@ func.func @vector_store_op(%memref : memref<200x100xf32>, %i : index, %j : index
2922
2977
2923
2978
// -----
2924
2979
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 ) {
2926
2996
%val = arith.constant dense <11.0 > : vector <4 xf32 >
2927
2997
vector.store %val , %memref [%i , %j ] {nontemporal = true } : memref <200 x100 xf32 >, vector <4 xf32 >
2928
2998
return
2929
2999
}
2930
3000
2931
- // CHECK-LABEL: func @vector_store_op_nontemporal
3001
+ // CHECK-LABEL: func @vector_store_nontemporal
2932
3002
// CHECK: %[[c100:.*]] = llvm.mlir.constant(100 : index) : i64
2933
3003
// CHECK: %[[mul:.*]] = llvm.mul %{{.*}}, %[[c100]] : i64
2934
3004
// CHECK: %[[add:.*]] = llvm.add %[[mul]], %{{.*}} : i64
@@ -2937,28 +3007,38 @@ func.func @vector_store_op_nontemporal(%memref : memref<200x100xf32>, %i : index
2937
3007
2938
3008
// -----
2939
3009
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 ) {
2941
3026
%val = arith.constant dense <11 > : vector <4 xindex >
2942
3027
vector.store %val , %memref [%i , %j ] : memref <200 x100 xindex >, vector <4 xindex >
2943
3028
return
2944
3029
}
2945
- // CHECK-LABEL: func @vector_store_op_index
3030
+ // CHECK-LABEL: func @vector_store_index
2946
3031
// CHECK: llvm.store %{{.*}}, %{{.*}} {alignment = 8 : i64} : vector<4xi64>, !llvm.ptr
2947
3032
2948
3033
// -----
2949
3034
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
2953
3039
}
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
2962
3042
2963
3043
// -----
2964
3044
0 commit comments