|
1 | 1 | // RUN: mlir-opt %s -convert-vector-to-arm-sme -split-input-file -allow-unregistered-dialect | FileCheck %s
|
2 | 2 |
|
| 3 | +//===----------------------------------------------------------------------===// |
| 4 | +// vector.transfer_write |
| 5 | +//===----------------------------------------------------------------------===// |
| 6 | + |
3 | 7 | // CHECK-LABEL: func.func @transfer_write_2d_i8(
|
4 | 8 | // CHECK-SAME: %[[VECTOR:.*]]: vector<[16]x[16]xi8>,
|
5 | 9 | // CHECK-SAME: %[[DEST:.*]]: memref<?x?xi8>) {
|
@@ -165,9 +169,9 @@ func.func @transfer_write_2d__fixed(%vector : vector<16x16xi8>, %dest : memref<?
|
165 | 169 | return
|
166 | 170 | }
|
167 | 171 |
|
168 |
| -// ============================================================================= |
| 172 | +//===----------------------------------------------------------------------===// |
169 | 173 | // vector.broadcast
|
170 |
| -// ============================================================================= |
| 174 | +//===----------------------------------------------------------------------===// |
171 | 175 |
|
172 | 176 | // -----
|
173 | 177 |
|
@@ -215,3 +219,121 @@ func.func @broadcast_vec2d_from_vec1d(%arg0: vector<[8]xi16>) {
|
215 | 219 | "prevent.dce"(%0) : (vector<[8]x[8]xi16>) -> ()
|
216 | 220 | return
|
217 | 221 | }
|
| 222 | + |
| 223 | +//===----------------------------------------------------------------------===// |
| 224 | +// vector.transpose |
| 225 | +//===----------------------------------------------------------------------===// |
| 226 | + |
| 227 | +// ----- |
| 228 | + |
| 229 | +// CHECK-LABEL: func.func @transpose_i8( |
| 230 | +// CHECK-SAME: %[[TILE:.*]]: vector<[16]x[16]xi8>) |
| 231 | +// CHECK: %[[C16:.*]] = arith.constant 16 : index |
| 232 | +// CHECK: %[[C0:.*]] = arith.constant 0 : index |
| 233 | +// CHECK: %[[VSCALE:.*]] = vector.vscale |
| 234 | +// CHECK: %[[MIN_TILE_SLICES:.*]] = arith.muli %[[VSCALE]], %[[C16]] : index |
| 235 | +// CHECK: %[[NUM_TILE_SLICES:.*]] = memref.alloca(%[[MIN_TILE_SLICES]], %[[MIN_TILE_SLICES]]) : memref<?x?xi8> |
| 236 | +// CHECK: arm_sme.tile_store %[[TILE]], %[[NUM_TILE_SLICES]]{{\[}}%[[C0]], %[[C0]]] : memref<?x?xi8>, vector<[16]x[16]xi8> |
| 237 | +// CHECK: arm_sme.tile_load %[[NUM_TILE_SLICES]]{{\[}}%[[C0]], %[[C0]]], <vertical> : memref<?x?xi8>, vector<[16]x[16]xi8> |
| 238 | +func.func @transpose_i8(%arg0: vector<[16]x[16]xi8>) { |
| 239 | + %0 = vector.transpose %arg0, [1, 0] : vector<[16]x[16]xi8> to vector<[16]x[16]xi8> |
| 240 | + "prevent.dce"(%0) : (vector<[16]x[16]xi8>) -> () |
| 241 | + return |
| 242 | +} |
| 243 | + |
| 244 | +// ----- |
| 245 | + |
| 246 | +// CHECK-LABEL: @transpose_i16 |
| 247 | +// CHECK: arith.constant 8 |
| 248 | +// CHECK: arm_sme.tile_store {{.*}} : memref<?x?xi16>, vector<[8]x[8]xi16> |
| 249 | +// CHECK: arm_sme.tile_load {{.*}}, <vertical> : memref<?x?xi16>, vector<[8]x[8]xi16> |
| 250 | +func.func @transpose_i16(%arg0: vector<[8]x[8]xi16>) { |
| 251 | + %0 = vector.transpose %arg0, [1, 0] : vector<[8]x[8]xi16> to vector<[8]x[8]xi16> |
| 252 | + "prevent.dce"(%0) : (vector<[8]x[8]xi16>) -> () |
| 253 | + return |
| 254 | +} |
| 255 | + |
| 256 | +// ----- |
| 257 | + |
| 258 | +// CHECK-LABEL: @transpose_i32 |
| 259 | +// CHECK: arith.constant 4 |
| 260 | +// CHECK: arm_sme.tile_store {{.*}} : memref<?x?xi32>, vector<[4]x[4]xi32> |
| 261 | +// CHECK: arm_sme.tile_load {{.*}}, <vertical> : memref<?x?xi32>, vector<[4]x[4]xi32> |
| 262 | +func.func @transpose_i32(%arg0: vector<[4]x[4]xi32>) { |
| 263 | + %0 = vector.transpose %arg0, [1, 0] : vector<[4]x[4]xi32> to vector<[4]x[4]xi32> |
| 264 | + "prevent.dce"(%0) : (vector<[4]x[4]xi32>) -> () |
| 265 | + return |
| 266 | +} |
| 267 | + |
| 268 | +// ----- |
| 269 | + |
| 270 | +// CHECK-LABEL: @transpose_i64 |
| 271 | +// CHECK: arith.constant 2 |
| 272 | +// CHECK: arm_sme.tile_store {{.*}} : memref<?x?xi64>, vector<[2]x[2]xi64> |
| 273 | +// CHECK: arm_sme.tile_load {{.*}}, <vertical> : memref<?x?xi64>, vector<[2]x[2]xi64> |
| 274 | +func.func @transpose_i64(%arg0: vector<[2]x[2]xi64>) { |
| 275 | + %0 = vector.transpose %arg0, [1, 0] : vector<[2]x[2]xi64> to vector<[2]x[2]xi64> |
| 276 | + "prevent.dce"(%0) : (vector<[2]x[2]xi64>) -> () |
| 277 | + return |
| 278 | +} |
| 279 | + |
| 280 | +// ----- |
| 281 | + |
| 282 | +// CHECK-LABEL: @transpose_i128 |
| 283 | +// CHECK: %[[VSCALE:.*]] = vector.vscale |
| 284 | +// CHECK: %[[NUM_TILE_SLICES:.*]] = memref.alloca(%[[VSCALE]], %[[VSCALE]]) : memref<?x?xi128> |
| 285 | +// CHECK: arm_sme.tile_store {{.*}} : memref<?x?xi128>, vector<[1]x[1]xi128> |
| 286 | +// CHECK: arm_sme.tile_load {{.*}}, <vertical> : memref<?x?xi128>, vector<[1]x[1]xi128> |
| 287 | +func.func @transpose_i128(%arg0: vector<[1]x[1]xi128>) { |
| 288 | + %0 = vector.transpose %arg0, [1, 0] : vector<[1]x[1]xi128> to vector<[1]x[1]xi128> |
| 289 | + "prevent.dce"(%0) : (vector<[1]x[1]xi128>) -> () |
| 290 | + return |
| 291 | +} |
| 292 | + |
| 293 | +// ----- |
| 294 | + |
| 295 | +// CHECK-LABEL: @transpose_f16 |
| 296 | +// CHECK: arith.constant 8 |
| 297 | +// CHECK: arm_sme.tile_store {{.*}} : memref<?x?xf16>, vector<[8]x[8]xf16> |
| 298 | +// CHECK: arm_sme.tile_load {{.*}}, <vertical> : memref<?x?xf16>, vector<[8]x[8]xf16> |
| 299 | +func.func @transpose_f16(%arg0: vector<[8]x[8]xf16>) { |
| 300 | + %0 = vector.transpose %arg0, [1, 0] : vector<[8]x[8]xf16> to vector<[8]x[8]xf16> |
| 301 | + "prevent.dce"(%0) : (vector<[8]x[8]xf16>) -> () |
| 302 | + return |
| 303 | +} |
| 304 | + |
| 305 | +// ----- |
| 306 | + |
| 307 | +// CHECK-LABEL: @transpose_bf16 |
| 308 | +// CHECK: arith.constant 8 |
| 309 | +// CHECK: arm_sme.tile_store {{.*}} : memref<?x?xbf16>, vector<[8]x[8]xbf16> |
| 310 | +// CHECK: arm_sme.tile_load {{.*}}, <vertical> : memref<?x?xbf16>, vector<[8]x[8]xbf16> |
| 311 | +func.func @transpose_bf16(%arg0: vector<[8]x[8]xbf16>) { |
| 312 | + %0 = vector.transpose %arg0, [1, 0] : vector<[8]x[8]xbf16> to vector<[8]x[8]xbf16> |
| 313 | + "prevent.dce"(%0) : (vector<[8]x[8]xbf16>) -> () |
| 314 | + return |
| 315 | +} |
| 316 | + |
| 317 | +// ----- |
| 318 | + |
| 319 | +// CHECK-LABEL: @transpose_f32 |
| 320 | +// CHECK: arith.constant 4 |
| 321 | +// CHECK: arm_sme.tile_store {{.*}} : memref<?x?xf32>, vector<[4]x[4]xf32> |
| 322 | +// CHECK: arm_sme.tile_load {{.*}}, <vertical> : memref<?x?xf32>, vector<[4]x[4]xf32> |
| 323 | +func.func @transpose_f32(%arg0: vector<[4]x[4]xf32>) { |
| 324 | + %0 = vector.transpose %arg0, [1, 0] : vector<[4]x[4]xf32> to vector<[4]x[4]xf32> |
| 325 | + "prevent.dce"(%0) : (vector<[4]x[4]xf32>) -> () |
| 326 | + return |
| 327 | +} |
| 328 | + |
| 329 | +// ----- |
| 330 | + |
| 331 | +// CHECK-LABEL: @transpose_f64 |
| 332 | +// CHECK: arith.constant 2 |
| 333 | +// CHECK: arm_sme.tile_store {{.*}} : memref<?x?xf64>, vector<[2]x[2]xf64> |
| 334 | +// CHECK: arm_sme.tile_load {{.*}}, <vertical> : memref<?x?xf64>, vector<[2]x[2]xf64> |
| 335 | +func.func @transpose_f64(%arg0: vector<[2]x[2]xf64>) { |
| 336 | + %0 = vector.transpose %arg0, [1, 0] : vector<[2]x[2]xf64> to vector<[2]x[2]xf64> |
| 337 | + "prevent.dce"(%0) : (vector<[2]x[2]xf64>) -> () |
| 338 | + return |
| 339 | +} |
0 commit comments