@@ -1049,8 +1049,8 @@ func.func @shuffle_2D(%a: vector<1x4xf32>, %b: vector<2x4xf32>) -> vector<3x4xf3
1049
1049
1050
1050
// -----
1051
1051
1052
- // CHECK-LABEL: @extract_element_0d
1053
- func.func @extract_element_0d (%a: vector <f32 >) -> f32 {
1052
+ // CHECK-LABEL: @extractelement_0d
1053
+ func.func @extractelement_0d (%a: vector <f32 >) -> f32 {
1054
1054
// CHECK: %[[C0:.*]] = llvm.mlir.constant(0 : index) : i64
1055
1055
// CHECK: llvm.extractelement %{{.*}}[%[[C0]] : {{.*}}] : vector<1xf32>
1056
1056
%1 = vector.extractelement %a [] : vector <f32 >
@@ -1059,31 +1059,54 @@ func.func @extract_element_0d(%a: vector<f32>) -> f32 {
1059
1059
1060
1060
// -----
1061
1061
1062
- func.func @extract_element (%arg0: vector <16 xf32 >) -> f32 {
1062
+ func.func @extractelement (%arg0: vector <16 xf32 >) -> f32 {
1063
1063
%0 = arith.constant 15 : i32
1064
1064
%1 = vector.extractelement %arg0 [%0 : i32 ]: vector <16 xf32 >
1065
1065
return %1 : f32
1066
1066
}
1067
- // CHECK-LABEL: @extract_element (
1067
+ // CHECK-LABEL: @extractelement (
1068
1068
// CHECK-SAME: %[[A:.*]]: vector<16xf32>)
1069
1069
// CHECK: %[[c:.*]] = arith.constant 15 : i32
1070
1070
// CHECK: %[[x:.*]] = llvm.extractelement %[[A]][%[[c]] : i32] : vector<16xf32>
1071
1071
// CHECK: return %[[x]] : f32
1072
1072
1073
+ func.func @extractelement_scalable (%arg0: vector <[16 ]xf32 >) -> f32 {
1074
+ %0 = arith.constant 15 : i32
1075
+ %1 = vector.extractelement %arg0 [%0 : i32 ]: vector <[16 ]xf32 >
1076
+ return %1 : f32
1077
+ }
1078
+ // CHECK-LABEL: @extractelement_scalable(
1079
+ // CHECK-SAME: %[[A:.*]]: vector<[16]xf32>)
1080
+ // CHECK: %[[c:.*]] = arith.constant 15 : i32
1081
+ // CHECK: %[[x:.*]] = llvm.extractelement %[[A]][%[[c]] : i32] : vector<[16]xf32>
1082
+ // CHECK: return %[[x]] : f32
1083
+
1073
1084
// -----
1074
1085
1075
- func.func @extract_element_index (%arg0: vector <16 xf32 >) -> f32 {
1086
+ func.func @extractelement_index (%arg0: vector <16 xf32 >) -> f32 {
1076
1087
%0 = arith.constant 15 : index
1077
1088
%1 = vector.extractelement %arg0 [%0 : index ]: vector <16 xf32 >
1078
1089
return %1 : f32
1079
1090
}
1080
- // CHECK-LABEL: @extract_element_index (
1091
+ // CHECK-LABEL: @extractelement_index (
1081
1092
// CHECK-SAME: %[[A:.*]]: vector<16xf32>)
1082
1093
// CHECK: %[[c:.*]] = arith.constant 15 : index
1083
1094
// CHECK: %[[i:.*]] = builtin.unrealized_conversion_cast %[[c]] : index to i64
1084
1095
// CHECK: %[[x:.*]] = llvm.extractelement %[[A]][%[[i]] : i64] : vector<16xf32>
1085
1096
// CHECK: return %[[x]] : f32
1086
1097
1098
+ func.func @extractelement_index_scalable (%arg0: vector <[16 ]xf32 >) -> f32 {
1099
+ %0 = arith.constant 15 : index
1100
+ %1 = vector.extractelement %arg0 [%0 : index ]: vector <[16 ]xf32 >
1101
+ return %1 : f32
1102
+ }
1103
+ // CHECK-LABEL: @extractelement_index_scalable(
1104
+ // CHECK-SAME: %[[A:.*]]: vector<[16]xf32>)
1105
+ // CHECK: %[[c:.*]] = arith.constant 15 : index
1106
+ // CHECK: %[[i:.*]] = builtin.unrealized_conversion_cast %[[c]] : index to i64
1107
+ // CHECK: %[[x:.*]] = llvm.extractelement %[[A]][%[[i]] : i64] : vector<[16]xf32>
1108
+ // CHECK: return %[[x]] : f32
1109
+
1087
1110
// -----
1088
1111
1089
1112
func.func @extract_element_from_vec_1d (%arg0: vector <16 xf32 >) -> f32 {
@@ -1095,6 +1118,15 @@ func.func @extract_element_from_vec_1d(%arg0: vector<16xf32>) -> f32 {
1095
1118
// CHECK: llvm.extractelement {{.*}}[{{.*}} : i64] : vector<16xf32>
1096
1119
// CHECK: return {{.*}} : f32
1097
1120
1121
+ func.func @extract_element_from_vec_1d_scalable (%arg0: vector <[16 ]xf32 >) -> f32 {
1122
+ %0 = vector.extract %arg0 [15 ]: f32 from vector <[16 ]xf32 >
1123
+ return %0 : f32
1124
+ }
1125
+ // CHECK-LABEL: @extract_element_from_vec_1d_scalable
1126
+ // CHECK: llvm.mlir.constant(15 : i64) : i64
1127
+ // CHECK: llvm.extractelement {{.*}}[{{.*}} : i64] : vector<[16]xf32>
1128
+ // CHECK: return {{.*}} : f32
1129
+
1098
1130
// -----
1099
1131
1100
1132
func.func @extract_index_element_from_vec_1d (%arg0: vector <16 xindex >) -> index {
@@ -1109,6 +1141,18 @@ func.func @extract_index_element_from_vec_1d(%arg0: vector<16xindex>) -> index {
1109
1141
// CHECK: %[[T3:.*]] = builtin.unrealized_conversion_cast %[[T2]] : i64 to index
1110
1142
// CHECK: return %[[T3]] : index
1111
1143
1144
+ func.func @extract_index_element_from_vec_1d_scalable (%arg0: vector <[16 ]xindex >) -> index {
1145
+ %0 = vector.extract %arg0 [15 ]: index from vector <[16 ]xindex >
1146
+ return %0 : index
1147
+ }
1148
+ // CHECK-LABEL: @extract_index_element_from_vec_1d_scalable(
1149
+ // CHECK-SAME: %[[A:.*]]: vector<[16]xindex>)
1150
+ // CHECK: %[[T0:.*]] = builtin.unrealized_conversion_cast %[[A]] : vector<[16]xindex> to vector<[16]xi64>
1151
+ // CHECK: %[[T1:.*]] = llvm.mlir.constant(15 : i64) : i64
1152
+ // CHECK: %[[T2:.*]] = llvm.extractelement %[[T0]][%[[T1]] : i64] : vector<[16]xi64>
1153
+ // CHECK: %[[T3:.*]] = builtin.unrealized_conversion_cast %[[T2]] : i64 to index
1154
+ // CHECK: return %[[T3]] : index
1155
+
1112
1156
// -----
1113
1157
1114
1158
func.func @extract_vec_2d_from_vec_3d (%arg0: vector <4 x3 x16 xf32 >) -> vector <3 x16 xf32 > {
@@ -1119,6 +1163,14 @@ func.func @extract_vec_2d_from_vec_3d(%arg0: vector<4x3x16xf32>) -> vector<3x16x
1119
1163
// CHECK: llvm.extractvalue {{.*}}[0] : !llvm.array<4 x array<3 x vector<16xf32>>>
1120
1164
// CHECK: return {{.*}} : vector<3x16xf32>
1121
1165
1166
+ func.func @extract_vec_2d_from_vec_3d_scalable (%arg0: vector <4 x3 x[16 ]xf32 >) -> vector <3 x[16 ]xf32 > {
1167
+ %0 = vector.extract %arg0 [0 ]: vector <3 x[16 ]xf32 > from vector <4 x3 x[16 ]xf32 >
1168
+ return %0 : vector <3 x[16 ]xf32 >
1169
+ }
1170
+ // CHECK-LABEL: @extract_vec_2d_from_vec_3d_scalable
1171
+ // CHECK: llvm.extractvalue {{.*}}[0] : !llvm.array<4 x array<3 x vector<[16]xf32>>>
1172
+ // CHECK: return {{.*}} : vector<3x[16]xf32>
1173
+
1122
1174
// -----
1123
1175
1124
1176
func.func @extract_vec_1d_from_vec_3d (%arg0: vector <4 x3 x16 xf32 >) -> vector <16 xf32 > {
@@ -1129,6 +1181,14 @@ func.func @extract_vec_1d_from_vec_3d(%arg0: vector<4x3x16xf32>) -> vector<16xf3
1129
1181
// CHECK: llvm.extractvalue {{.*}}[0, 0] : !llvm.array<4 x array<3 x vector<16xf32>>>
1130
1182
// CHECK: return {{.*}} : vector<16xf32>
1131
1183
1184
+ func.func @extract_vec_1d_from_vec_3d_scalable (%arg0: vector <4 x3 x[16 ]xf32 >) -> vector <[16 ]xf32 > {
1185
+ %0 = vector.extract %arg0 [0 , 0 ]: vector <[16 ]xf32 > from vector <4 x3 x[16 ]xf32 >
1186
+ return %0 : vector <[16 ]xf32 >
1187
+ }
1188
+ // CHECK-LABEL: @extract_vec_1d_from_vec_3d_scalable
1189
+ // CHECK: llvm.extractvalue {{.*}}[0, 0] : !llvm.array<4 x array<3 x vector<[16]xf32>>>
1190
+ // CHECK: return {{.*}} : vector<[16]xf32>
1191
+
1132
1192
// -----
1133
1193
1134
1194
func.func @extract_element_from_vec_3d (%arg0: vector <4 x3 x16 xf32 >) -> f32 {
@@ -1141,6 +1201,16 @@ func.func @extract_element_from_vec_3d(%arg0: vector<4x3x16xf32>) -> f32 {
1141
1201
// CHECK: llvm.extractelement {{.*}}[{{.*}} : i64] : vector<16xf32>
1142
1202
// CHECK: return {{.*}} : f32
1143
1203
1204
+ func.func @extract_element_from_vec_3d_scalable (%arg0: vector <4 x3 x[16 ]xf32 >) -> f32 {
1205
+ %0 = vector.extract %arg0 [0 , 0 , 0 ]: f32 from vector <4 x3 x[16 ]xf32 >
1206
+ return %0 : f32
1207
+ }
1208
+ // CHECK-LABEL: @extract_element_from_vec_3d_scalable
1209
+ // CHECK: llvm.extractvalue {{.*}}[0, 0] : !llvm.array<4 x array<3 x vector<[16]xf32>>>
1210
+ // CHECK: llvm.mlir.constant(0 : i64) : i64
1211
+ // CHECK: llvm.extractelement {{.*}}[{{.*}} : i64] : vector<[16]xf32>
1212
+ // CHECK: return {{.*}} : f32
1213
+
1144
1214
// -----
1145
1215
1146
1216
func.func @extract_element_with_value_1d (%arg0: vector <16 xf32 >, %arg1: index ) -> f32 {
@@ -1152,6 +1222,15 @@ func.func @extract_element_with_value_1d(%arg0: vector<16xf32>, %arg1: index) ->
1152
1222
// CHECK: %[[UC:.+]] = builtin.unrealized_conversion_cast %[[INDEX]] : index to i64
1153
1223
// CHECK: llvm.extractelement %[[VEC]][%[[UC]] : i64] : vector<16xf32>
1154
1224
1225
+ func.func @extract_element_with_value_1d_scalable (%arg0: vector <[16 ]xf32 >, %arg1: index ) -> f32 {
1226
+ %0 = vector.extract %arg0 [%arg1 ]: f32 from vector <[16 ]xf32 >
1227
+ return %0 : f32
1228
+ }
1229
+ // CHECK-LABEL: @extract_element_with_value_1d_scalable
1230
+ // CHECK-SAME: %[[VEC:.+]]: vector<[16]xf32>, %[[INDEX:.+]]: index
1231
+ // CHECK: %[[UC:.+]] = builtin.unrealized_conversion_cast %[[INDEX]] : index to i64
1232
+ // CHECK: llvm.extractelement %[[VEC]][%[[UC]] : i64] : vector<[16]xf32>
1233
+
1155
1234
// -----
1156
1235
1157
1236
func.func @extract_element_with_value_2d (%arg0: vector <1 x16 xf32 >, %arg1: index ) -> f32 {
0 commit comments