3
3
// Offset per thread:
4
4
// CHECK-DAG: affine_map<(d0)[s0] -> (d0 * (s0 ceildiv 10))>
5
5
// Per thread tile size.
6
- // CHECK-DAG: affine_map<(d0)[s0] -> (s0 ceildiv 10, -(d0 * (s0 ceildiv 10)) + s0)>
6
+ // CHECK-DAG: affine_map<(d0)[s0] -> (-(d0 * (s0 ceildiv 10)) + s0, s0 ceildiv 10 )>
7
7
// CHECK-DAG: affine_map<(d0)[s0] -> (d0 * (s0 ceildiv 20))>
8
- // CHECK-DAG: affine_map<(d0)[s0] -> (s0 ceildiv 20, -(d0 * (s0 ceildiv 20)) + s0)>
8
+ // CHECK-DAG: affine_map<(d0)[s0] -> (-(d0 * (s0 ceildiv 20)) + s0, s0 ceildiv 20 )>
9
9
10
10
module {
11
11
// CHECK-LABEL: matmul(
@@ -96,7 +96,7 @@ module {
96
96
// In this test case, matmul dims and tile size are dynamic.
97
97
98
98
// CHECK-DAG: #[[$map0:.+]] = affine_map<()[s0, s1] -> (s0 ceildiv s1)>
99
- // CHECK-DAG: #[[$map2:.+]] = affine_map<(d0)[s0, s1] -> (s0, -(d0 * s0 ) + s1)>
99
+ // CHECK-DAG: #[[$map2:.+]] = affine_map<(d0)[s0, s1] -> (-(d0 * s1 ) + s0, s1)>
100
100
// CHECK-DAG: #[[$map4:.+]] = affine_map<(d0)[s0] -> (d0 * s0)>
101
101
102
102
// CHECK-LABEL: matmul_tile_size_dynamic_dynamic(
@@ -140,7 +140,7 @@ module attributes {transform.with_named_sequence} {
140
140
141
141
// Tests that dimension 0 can eliminate affine.min/max, dimension 1 cannot.
142
142
143
- // CHECK-DAG: #[[$map0:.+]] = affine_map<(d0) -> (15, d0 * -15 + 300)>
143
+ // CHECK-DAG: #[[$map0:.+]] = affine_map<(d0) -> (d0 * -15 + 300, 15 )>
144
144
// CHECK-DAG: #[[$map1:.+]] = affine_map<(d0) -> (0, d0)>
145
145
// CHECK-DAG: #[[$map2:.+]] = affine_map<(d0) -> (d0 * 10)>
146
146
// CHECK-DAG: #[[$map3:.+]] = affine_map<(d0) -> (d0 * 15)>
@@ -176,6 +176,7 @@ module attributes {transform.with_named_sequence} {
176
176
transform.yield
177
177
}
178
178
}
179
+
179
180
// -----
180
181
181
182
// CHECK-DAG: #[[MAP0:.+]] = affine_map<()[s0] -> (s0 ceildiv 10)>
@@ -296,7 +297,7 @@ module {
296
297
297
298
// CHECK-DAG: #[[$map0:.+]] = affine_map<()[s0, s1] -> (s0 ceildiv s1)>
298
299
// CHECK-DAG: #[[$map1:.+]] = affine_map<()[s0] -> (s0 ceildiv 20)>
299
- // CHECK-DAG: #[[$map2:.+]] = affine_map<(d0)[s0, s1] -> (s0, -(d0 * s0 ) + s1)>
300
+ // CHECK-DAG: #[[$map2:.+]] = affine_map<(d0)[s0, s1] -> (-(d0 * s1 ) + s0, s1)>
300
301
// CHECK-DAG: #[[$map3:.+]] = affine_map<(d0)[s0] -> (d0 * -20 + s0, 20)>
301
302
// CHECK-DAG: #[[$map4:.+]] = affine_map<(d0)[s0] -> (d0 * s0)>
302
303
// CHECK-DAG: #[[$map5:.+]] = affine_map<(d0) -> (d0 * 20)>
@@ -339,7 +340,6 @@ module attributes {transform.with_named_sequence} {
339
340
// -----
340
341
341
342
// CHECK-DAG: #[[$map0:.+]] = affine_map<(d0) -> (d0 * -15 + 100, 15)>
342
- // CHECK-DAG: #[[$map1:.+]] = affine_map<(d0) -> (0, d0)>
343
343
// CHECK-DAG: #[[$map2:.+]] = affine_map<(d0) -> (d0 * 15)>
344
344
// CHECK-DAG: #[[$map3:.+]] = affine_map<(d0) -> (d0)>
345
345
@@ -352,8 +352,7 @@ module attributes {transform.with_named_sequence} {
352
352
%OUT1: tensor <100 xf32 >, %OUT2: tensor <100 xf32 >)
353
353
-> (tensor <100 xf32 >, tensor <100 xf32 >) {
354
354
// CHECK: scf.forall (%[[IV0:.+]]) in (7) shared_outs(%[[OUT1:[0-9a-z]+]] = %[[ORGOUT1]], %[[OUT2:[0-9a-z]+]] = %[[ORGOUT2]])
355
- // CHECK: %[[TSMIN:.+]] = affine.min #[[$map0]](%[[IV0]])
356
- // CHECK: %[[TS:.+]] = affine.max #[[$map1]](%[[TSMIN]])
355
+ // CHECK: %[[TS:.+]] = affine.min #[[$map0]](%[[IV0]])
357
356
// CHECK-NOT: affine.min
358
357
// CHECK-NOT: affine.max
359
358
// CHECK: %[[LB:.+]] = affine.apply #[[$map2]](%[[IV0]])
@@ -453,9 +452,10 @@ module attributes {transform.with_named_sequence} {
453
452
// CHECK-DAG: #[[$map0:.+]] = affine_map<()[s0] -> (s0 ceildiv 10)>
454
453
// CHECK-DAG: #[[$map1:.+]] = affine_map<()[s0] -> (s0 ceildiv 20)>
455
454
// CHECK-DAG: #[[$map2:.+]] = affine_map<(d0)[s0] -> (d0 * -10 + s0, 10)>
456
- // CHECK-DAG: #[[$map3:.+]] = affine_map<(d0)[s0] -> (d0 * -20 + s0, 20)>
457
- // CHECK-DAG: #[[$map4:.+]] = affine_map<(d0) -> (d0 * 10)>
458
- // CHECK-DAG: #[[$map5:.+]] = affine_map<(d0) -> (d0 * 20)>
455
+ // CHECK-DAG: #[[$map3:.+]] = affine_map<(d0) -> (0, d0)>
456
+ // CHECK-DAG: #[[$map4:.+]] = affine_map<(d0)[s0] -> (d0 * -20 + s0, 20)>
457
+ // CHECK-DAG: #[[$map5:.+]] = affine_map<(d0) -> (d0 * 10)>
458
+ // CHECK-DAG: #[[$map6:.+]] = affine_map<(d0) -> (d0 * 20)>
459
459
460
460
// CHECK-LABEL: matmul_tile_size_dynamic(
461
461
// CHECK-SAME: %[[A:[0-9a-z]+]]: tensor<?x?xf32>
@@ -470,10 +470,12 @@ func.func @matmul_tile_size_dynamic(%A: tensor<?x?xf32>, %B: tensor<?x?xf32>, %C
470
470
// CHECK: %[[NT1:.+]] = affine.apply #map1()[%[[N]]]
471
471
// CHECK: %[[K:.+]] = tensor.dim %[[A]], %[[c1]] :
472
472
// CHECK: scf.forall (%[[IV0:.+]], %[[IV1:.+]]) in (%[[NT0]], %[[NT1]]) shared_outs(%[[C_BLK:.*]] = %[[C]])
473
- // CHECK: %[[TS0:.+]] = affine.min #[[$map2]](%[[IV0]])[%[[M]]]
474
- // CHECK: %[[TS1:.+]] = affine.min #[[$map3]](%[[IV1]])[%[[N]]]
475
- // CHECK: %[[LB0:.+]] = affine.apply #[[$map4]](%[[IV0]])
476
- // CHECK: %[[LB1:.+]] = affine.apply #[[$map5]](%[[IV1]])
473
+ // CHECK: %[[TSMIN0:.+]] = affine.min #[[$map2]](%[[IV0]])[%[[M]]]
474
+ // CHECK: %[[TS0:.+]] = affine.max #[[$map3]](%[[TSMIN0]])
475
+ // CHECK: %[[TSMIN1:.+]] = affine.min #[[$map4]](%[[IV1]])[%[[N]]]
476
+ // CHECK: %[[TS1:.+]] = affine.max #[[$map3]](%[[TSMIN1]])
477
+ // CHECK: %[[LB0:.+]] = affine.apply #[[$map5]](%[[IV0]])
478
+ // CHECK: %[[LB1:.+]] = affine.apply #[[$map6]](%[[IV1]])
477
479
// CHECK: tensor.extract_slice %[[A]][%[[LB0]], 0] [%[[TS0]], %[[K]]] [1, 1] :
478
480
// CHECK: tensor.extract_slice %[[B]][0, %[[LB1]]] [%[[K]], %[[TS1]]] [1, 1] :
479
481
// CHECK: tensor.extract_slice %[[C_BLK]][%[[LB0]], %[[LB1]]] [%[[TS0]], %[[TS1]]] [1, 1] :
@@ -521,9 +523,10 @@ module attributes {transform.with_named_sequence} {
521
523
// CHECK-DAG: #[[$map0:.+]] = affine_map<()[s0] -> (s0 ceildiv 10)>
522
524
// CHECK-DAG: #[[$map1:.+]] = affine_map<()[s0] -> (s0 ceildiv 20)>
523
525
// CHECK-DAG: #[[$map2:.+]] = affine_map<(d0)[s0] -> (d0 * -10 + s0, 10)>
524
- // CHECK-DAG: #[[$map3:.+]] = affine_map<(d0)[s0] -> (d0 * -20 + s0, 20)>
525
- // CHECK-DAG: #[[$map4:.+]] = affine_map<(d0) -> (d0 * 10)>
526
- // CHECK-DAG: #[[$map5:.+]] = affine_map<(d0) -> (d0 * 20)>
526
+ // CHECK-DAG: #[[$map3:.+]] = affine_map<(d0) -> (0, d0)>
527
+ // CHECK-DAG: #[[$map4:.+]] = affine_map<(d0)[s0] -> (d0 * -20 + s0, 20)>
528
+ // CHECK-DAG: #[[$map5:.+]] = affine_map<(d0) -> (d0 * 10)>
529
+ // CHECK-DAG: #[[$map6:.+]] = affine_map<(d0) -> (d0 * 20)>
527
530
528
531
// CHECK-LABEL: matmul_tile_size_dynamic(
529
532
// CHECK-SAME: %[[A:[0-9a-z]+]]: tensor<?x?xf32>
@@ -538,10 +541,12 @@ func.func @matmul_tile_size_dynamic(%A: tensor<?x?xf32>, %B: tensor<?x?xf32>, %C
538
541
// CHECK: %[[NT1:.+]] = affine.apply #map1()[%[[N]]]
539
542
// CHECK: %[[K:.+]] = tensor.dim %[[A]], %[[c1]] :
540
543
// CHECK: scf.forall (%[[IV0:.+]], %[[IV1:.+]]) in (%[[NT0]], %[[NT1]]) shared_outs(%[[C_BLK:.*]] = %[[C]])
541
- // CHECK: %[[TS0:.+]] = affine.min #[[$map2]](%[[IV0]])[%[[M]]]
542
- // CHECK: %[[TS1:.+]] = affine.min #[[$map3]](%[[IV1]])[%[[N]]]
543
- // CHECK: %[[LB0:.+]] = affine.apply #[[$map4]](%[[IV0]])
544
- // CHECK: %[[LB1:.+]] = affine.apply #[[$map5]](%[[IV1]])
544
+ // CHECK: %[[TSMIN0:.+]] = affine.min #[[$map2]](%[[IV0]])[%[[M]]]
545
+ // CHECK: %[[TS0:.+]] = affine.max #[[$map3]](%[[TSMIN0]])
546
+ // CHECK: %[[TSMIN1:.+]] = affine.min #[[$map4]](%[[IV1]])[%[[N]]]
547
+ // CHECK: %[[TS1:.+]] = affine.max #[[$map3]](%[[TSMIN1]])
548
+ // CHECK: %[[LB0:.+]] = affine.apply #[[$map5]](%[[IV0]])
549
+ // CHECK: %[[LB1:.+]] = affine.apply #[[$map6]](%[[IV1]])
545
550
// CHECK: tensor.extract_slice %[[A]][%[[LB0]], 0] [%[[TS0]], %[[K]]] [1, 1] :
546
551
// CHECK: tensor.extract_slice %[[B]][0, %[[LB1]]] [%[[K]], %[[TS1]]] [1, 1] :
547
552
// CHECK: tensor.extract_slice %[[C_BLK]][%[[LB0]], %[[LB1]]] [%[[TS0]], %[[TS1]]] [1, 1] :
0 commit comments