|
46 | 46 | iterator_types = ["parallel", "reduction"]
|
47 | 47 | }
|
48 | 48 |
|
49 |
| -#redpar_vecmattrans_accesses = [ |
50 |
| - affine_map<(m, k) -> (m)>, |
51 |
| - affine_map<(m, k) -> (m, k)>, |
52 |
| - affine_map<(m, k) -> (k)> |
| 49 | +#matvec_accesses_8 = [ |
| 50 | + affine_map<(k, m) -> (k)>, |
| 51 | + affine_map<(k, m) -> (k, m)>, |
| 52 | + affine_map<(k, m) -> (m)> |
53 | 53 | ]
|
54 |
| -#redpar_vecmattrans_trait = { |
55 |
| - indexing_maps = #redpar_vecmattrans_accesses, |
| 54 | +#matvec_trait_8 = { |
| 55 | + indexing_maps = #matvec_accesses_8, |
56 | 56 | iterator_types = ["reduction", "parallel"]
|
57 | 57 | }
|
58 | 58 |
|
@@ -321,23 +321,6 @@ func.func @matvec_k_km_m(%A: vector<2x2xf32>,
|
321 | 321 | return %0 : vector<2xf32>
|
322 | 322 | }
|
323 | 323 |
|
324 |
| -// CHECK-LABEL: func @matvec_m_mk_k |
325 |
| -// CHECK-SAME: %[[A:.*0]]: vector<2x2xf32> |
326 |
| -// CHECK-SAME: %[[B:.*1]]: vector<2xf32> |
327 |
| -// CHECK-SAME: %[[C:.*2]]: vector<2xf32> |
328 |
| -// CHECK: %[[T3:.*]] = vector.extract %[[A]][0] : vector<2xf32> from vector<2x2xf32> |
329 |
| -// CHECK: %[[T4:.*]] = vector.extract %[[B]][0] : f32 from vector<2xf32> |
330 |
| -// CHECK: %[[T5:.*]] = vector.outerproduct %[[T3]], %[[T4]], %[[C]] {kind = #vector.kind<add>} : vector<2xf32>, f32 |
331 |
| -// CHECK: %[[T6:.*]] = vector.extract %[[A]][1] : vector<2xf32> from vector<2x2xf32> |
332 |
| -// CHECK: %[[T7:.*]] = vector.extract %[[B]][1] : f32 from vector<2xf32> |
333 |
| -// CHECK: %[[T8:.*]] = vector.outerproduct %[[T6]], %[[T7]], %[[T5]] {kind = #vector.kind<add>} : vector<2xf32>, f32 |
334 |
| -func.func @matvec_m_mk_k(%A: vector<2x2xf32>, |
335 |
| - %x: vector<2xf32>, |
336 |
| - %b: vector<2xf32>) -> vector<2xf32> { |
337 |
| - %0 = vector.contract #matvec_trait_4 %x, %A, %b : vector<2xf32>, vector<2x2xf32> into vector<2xf32> |
338 |
| - return %0 : vector<2xf32> |
339 |
| -} |
340 |
| - |
341 | 324 | // ============================================================================
|
342 | 325 | // Matvec 5 (masked + scalable)
|
343 | 326 | // ============================================================================
|
@@ -474,16 +457,23 @@ func.func @masked_tmatvec_k_mk_m_scalable_parallel_dim(%arg0: vector<[4]x2xf32>,
|
474 | 457 | }
|
475 | 458 |
|
476 | 459 | // ============================================================================
|
477 |
| -// Matvec 8 (masked + scalable) |
| 460 | +// Matvec 8 (plain + masked + scalable) |
478 | 461 | // ============================================================================
|
479 |
| -#matvec_accesses_8 = [ |
480 |
| - affine_map<(k, m) -> (k)>, |
481 |
| - affine_map<(k, m) -> (k, m)>, |
482 |
| - affine_map<(k, m) -> (m)> |
483 |
| -] |
484 |
| -#matvec_trait_8 = { |
485 |
| - indexing_maps = #matvec_accesses_8, |
486 |
| - iterator_types = ["reduction", "parallel"] |
| 462 | +// CHECK-LABEL: func @matvec_m_mk_k |
| 463 | +// CHECK-SAME: %[[A:.*0]]: vector<2x2xf32> |
| 464 | +// CHECK-SAME: %[[B:.*1]]: vector<2xf32> |
| 465 | +// CHECK-SAME: %[[C:.*2]]: vector<2xf32> |
| 466 | +// CHECK: %[[T3:.*]] = vector.extract %[[A]][0] : vector<2xf32> from vector<2x2xf32> |
| 467 | +// CHECK: %[[T4:.*]] = vector.extract %[[B]][0] : f32 from vector<2xf32> |
| 468 | +// CHECK: %[[T5:.*]] = vector.outerproduct %[[T3]], %[[T4]], %[[C]] {kind = #vector.kind<add>} : vector<2xf32>, f32 |
| 469 | +// CHECK: %[[T6:.*]] = vector.extract %[[A]][1] : vector<2xf32> from vector<2x2xf32> |
| 470 | +// CHECK: %[[T7:.*]] = vector.extract %[[B]][1] : f32 from vector<2xf32> |
| 471 | +// CHECK: %[[T8:.*]] = vector.outerproduct %[[T6]], %[[T7]], %[[T5]] {kind = #vector.kind<add>} : vector<2xf32>, f32 |
| 472 | +func.func @matvec_m_mk_k(%A: vector<2x2xf32>, |
| 473 | + %x: vector<2xf32>, |
| 474 | + %b: vector<2xf32>) -> vector<2xf32> { |
| 475 | + %0 = vector.contract #matvec_trait_8 %x, %A, %b : vector<2xf32>, vector<2x2xf32> into vector<2xf32> |
| 476 | + return %0 : vector<2xf32> |
487 | 477 | }
|
488 | 478 |
|
489 | 479 | // CHECK-LABEL: @masked_tmatvec_k_km_m
|
|
0 commit comments