@@ -408,7 +408,7 @@ func.func @extract_strided_fold_insert(%a: vector<6x4xf32>, %b: vector<8x16xf32>
408
408
// -----
409
409
410
410
// Negative test where the extract is not a subset of the element inserted.
411
- // CHECK-LABEL: extract_strided_fold_negative
411
+ // CHECK-LABEL: negative_extract_strided_fold
412
412
// CHECK-SAME: (%[[ARG0:.*]]: vector<4x4xf32>, %[[ARG1:.*]]: vector<8x16xf32>
413
413
// CHECK: %[[INS:.*]] = vector.insert_strided_slice %[[ARG0]], %[[ARG1]]
414
414
// CHECK-SAME: {offsets = [2, 2], strides = [1, 1]}
@@ -417,7 +417,7 @@ func.func @extract_strided_fold_insert(%a: vector<6x4xf32>, %b: vector<8x16xf32>
417
417
// CHECK-SAME: {offsets = [2, 2], sizes = [6, 4], strides = [1, 1]}
418
418
// CHECK-SAME: : vector<8x16xf32> to vector<6x4xf32>
419
419
// CHECK-NEXT: return %[[EXT]] : vector<6x4xf32>
420
- func.func @extract_strided_fold_negative (%a: vector <4 x4 xf32 >, %b: vector <8 x16 xf32 >)
420
+ func.func @negative_extract_strided_fold (%a: vector <4 x4 xf32 >, %b: vector <8 x16 xf32 >)
421
421
-> (vector <6 x4 xf32 >) {
422
422
%0 = vector.insert_strided_slice %a , %b {offsets = [2 , 2 ], strides = [1 , 1 ]}
423
423
: vector <4 x4 xf32 > into vector <8 x16 xf32 >
@@ -753,10 +753,10 @@ func.func @fold_extract_broadcast_0dvec_input_scalar_output(%a : vector<f32>,
753
753
754
754
// -----
755
755
756
- // CHECK-LABEL: fold_extract_broadcast_negative
756
+ // CHECK-LABEL: negative_fold_extract_broadcast
757
757
// CHECK: vector.broadcast %{{.*}} : vector<1x1xf32> to vector<1x1x4xf32>
758
758
// CHECK: vector.extract %{{.*}}[0, 0] : vector<4xf32> from vector<1x1x4xf32>
759
- func.func @fold_extract_broadcast_negative (%a : vector <1 x1 xf32 >) -> vector <4 xf32 > {
759
+ func.func @negative_fold_extract_broadcast (%a : vector <1 x1 xf32 >) -> vector <4 xf32 > {
760
760
%b = vector.broadcast %a : vector <1 x1 xf32 > to vector <1 x1 x4 xf32 >
761
761
%r = vector.extract %b [0 , 0 ] : vector <4 xf32 > from vector <1 x1 x4 xf32 >
762
762
return %r : vector <4 xf32 >
@@ -895,11 +895,11 @@ func.func @fold_extract_shapecast_0d_source(%arg0 : vector<f32>) -> f32 {
895
895
896
896
// -----
897
897
898
- // CHECK-LABEL: fold_extract_shapecast_negative
898
+ // CHECK-LABEL: negative_fold_extract_shapecast
899
899
// CHECK: %[[V:.*]] = vector.shape_cast %{{.*}} : vector<16xf32> to vector<2x4x2xf32>
900
900
// CHECK: %[[R:.*]] = vector.extract %[[V]][1] : vector<4x2xf32> from vector<2x4x2xf32>
901
901
// CHECK: return %[[R]] : vector<4x2xf32>
902
- func.func @fold_extract_shapecast_negative (%arg0 : vector <16 xf32 >) -> vector <4 x2 xf32 > {
902
+ func.func @negative_fold_extract_shapecast (%arg0 : vector <16 xf32 >) -> vector <4 x2 xf32 > {
903
903
%0 = vector.shape_cast %arg0 : vector <16 xf32 > to vector <2 x4 x2 xf32 >
904
904
%r = vector.extract %0 [1 ] : vector <4 x2 xf32 > from vector <2 x4 x2 xf32 >
905
905
return %r : vector <4 x2 xf32 >
@@ -1460,11 +1460,11 @@ func.func @store_after_load_tensor(%arg0 : tensor<4x4xf32>) -> tensor<4x4xf32> {
1460
1460
1461
1461
// -----
1462
1462
1463
- // CHECK-LABEL: func @store_after_load_tensor_negative
1463
+ // CHECK-LABEL: func @negative_store_after_load_tensor
1464
1464
// CHECK: vector.transfer_read
1465
1465
// CHECK: vector.transfer_write
1466
1466
// CHECK: return
1467
- func.func @store_after_load_tensor_negative (%arg0 : tensor <4 x4 xf32 >) -> tensor <4 x4 xf32 > {
1467
+ func.func @negative_store_after_load_tensor (%arg0 : tensor <4 x4 xf32 >) -> tensor <4 x4 xf32 > {
1468
1468
%c1 = arith.constant 1 : index
1469
1469
%c0 = arith.constant 0 : index
1470
1470
%cf0 = arith.constant 0.0 : f32
@@ -1499,12 +1499,12 @@ func.func @store_to_load_tensor(%arg0 : tensor<4x4xf32>,
1499
1499
1500
1500
// -----
1501
1501
1502
- // CHECK-LABEL: func @store_to_load_negative_tensor
1502
+ // CHECK-LABEL: func @negative_store_to_load_tensor
1503
1503
// CHECK: vector.transfer_write
1504
1504
// CHECK: vector.transfer_write
1505
1505
// CHECK: %[[V:.*]] = vector.transfer_read
1506
1506
// CHECK: return %[[V]] : vector<1x4xf32>
1507
- func.func @store_to_load_negative_tensor (%arg0 : tensor <4 x4 xf32 >,
1507
+ func.func @negative_store_to_load_tensor (%arg0 : tensor <4 x4 xf32 >,
1508
1508
%v0 : vector <1 x4 xf32 >, %v1 : vector <1 x4 xf32 >, %i : index ) -> vector <1 x4 xf32 > {
1509
1509
%c1 = arith.constant 1 : index
1510
1510
%c2 = arith.constant 2 : index
@@ -1540,6 +1540,86 @@ func.func @store_to_load_tensor_broadcast(%arg0 : tensor<4x4xf32>,
1540
1540
1541
1541
// -----
1542
1542
1543
+ // CHECK-LABEL: func @negative_store_to_load_tensor_memref
1544
+ // CHECK-NOT: vector.broadcast
1545
+ // CHECK-NOT: vector.transpose
1546
+ // CHECK: vector.transfer_write
1547
+ // CHECK: vector.transfer_read
1548
+ func.func @negative_store_to_load_tensor_memref (
1549
+ %arg0 : tensor <?x?xf32 >,
1550
+ %arg1 : memref <?x?xf32 >,
1551
+ %v0 : vector <4 x2 xf32 >
1552
+ ) -> vector <4 x2 xf32 >
1553
+ {
1554
+ %c0 = arith.constant 0 : index
1555
+ %cf0 = arith.constant 0.0 : f32
1556
+ vector.transfer_write %v0 , %arg1 [%c0 , %c0 ] {in_bounds = [true , true ]} :
1557
+ vector <4 x2 xf32 >, memref <?x?xf32 >
1558
+ %0 = vector.transfer_read %arg0 [%c0 , %c0 ], %cf0 {in_bounds = [true , true ]} :
1559
+ tensor <?x?xf32 >, vector <4 x2 xf32 >
1560
+ return %0 : vector <4 x2 xf32 >
1561
+ }
1562
+
1563
+ // -----
1564
+
1565
+ // CHECK-LABEL: func @negative_store_to_load_tensor_no_actual_broadcast
1566
+ // CHECK-NOT: vector.broadcast
1567
+ // CHECK-NOT: vector.transpose
1568
+ // CHECK: vector.transfer_write
1569
+ // CHECK: vector.transfer_read
1570
+ func.func @negative_store_to_load_tensor_no_actual_broadcast (%arg0 : tensor <?x?xf32 >,
1571
+ %v0 : vector <4 x2 xf32 >) -> vector <4 x2 xf32 > {
1572
+ %c0 = arith.constant 0 : index
1573
+ %cf0 = arith.constant 0.0 : f32
1574
+ %w0 = vector.transfer_write %v0 , %arg0 [%c0 , %c0 ] :
1575
+ vector <4 x2 xf32 >, tensor <?x?xf32 >
1576
+ %0 = vector.transfer_read %w0 [%c0 , %c0 ], %cf0 {in_bounds = [true , true ]} :
1577
+ tensor <?x?xf32 >, vector <4 x2 xf32 >
1578
+ return %0 : vector <4 x2 xf32 >
1579
+ }
1580
+
1581
+ // -----
1582
+
1583
+ // CHECK-LABEL: func @negative_store_to_load_tensor_broadcast_out_of_bounds
1584
+ // CHECK-NOT: vector.broadcast
1585
+ // CHECK-NOT: vector.transpose
1586
+ // CHECK: vector.transfer_write
1587
+ // CHECK: vector.transfer_read
1588
+ func.func @negative_store_to_load_tensor_broadcast_out_of_bounds (%arg0 : tensor <?x?xf32 >,
1589
+ %v0 : vector <4 x2 xf32 >) -> vector <4 x2 x6 xf32 > {
1590
+ %c0 = arith.constant 0 : index
1591
+ %cf0 = arith.constant 0.0 : f32
1592
+ %w0 = vector.transfer_write %v0 , %arg0 [%c0 , %c0 ] :
1593
+ vector <4 x2 xf32 >, tensor <?x?xf32 >
1594
+ %0 = vector.transfer_read %w0 [%c0 , %c0 ], %cf0 {in_bounds = [true , true , true ],
1595
+ permutation_map = affine_map <(d0 , d1 ) -> (d0 , d1 , 0 )>} :
1596
+ tensor <?x?xf32 >, vector <4 x2 x6 xf32 >
1597
+ return %0 : vector <4 x2 x6 xf32 >
1598
+ }
1599
+
1600
+ // -----
1601
+
1602
+ // CHECK-LABEL: func @negative_store_to_load_tensor_broadcast_masked
1603
+ // CHECK-NOT: vector.broadcast
1604
+ // CHECK-NOT: vector.transpose
1605
+ // CHECK: vector.transfer_write
1606
+ // CHECK: vector.transfer_read
1607
+ func.func @negative_store_to_load_tensor_broadcast_masked (
1608
+ %arg0 : tensor <?x?xf32 >, %v0 : vector <4 x2 xf32 >, %mask : vector <4 x2 xi1 >)
1609
+ -> vector <4 x2 x6 xf32 >
1610
+ {
1611
+ %c0 = arith.constant 0 : index
1612
+ %cf0 = arith.constant 0.0 : f32
1613
+ %w0 = vector.transfer_write %v0 , %arg0 [%c0 , %c0 ], %mask {in_bounds = [true , true ]} :
1614
+ vector <4 x2 xf32 >, tensor <?x?xf32 >
1615
+ %0 = vector.transfer_read %w0 [%c0 , %c0 ], %cf0 {in_bounds = [true , true , true ],
1616
+ permutation_map = affine_map <(d0 , d1 ) -> (d0 , d1 , 0 )>} :
1617
+ tensor <?x?xf32 >, vector <4 x2 x6 xf32 >
1618
+ return %0 : vector <4 x2 x6 xf32 >
1619
+ }
1620
+
1621
+ // -----
1622
+
1543
1623
// CHECK-LABEL: func @store_to_load_tensor_broadcast_scalable
1544
1624
// CHECK-SAME: (%[[ARG:.*]]: tensor<?xf32>, %[[V0:.*]]: vector<[4]xf32>)
1545
1625
// CHECK: %[[B:.*]] = vector.broadcast %[[V0]] : vector<[4]xf32> to vector<6x[4]xf32>
@@ -1604,15 +1684,15 @@ func.func @dead_store_tensor(%arg0 : tensor<4x4xf32>,
1604
1684
1605
1685
// -----
1606
1686
1607
- // CHECK-LABEL: func @dead_store_tensor_negative
1687
+ // CHECK-LABEL: func @negative_dead_store_tensor
1608
1688
// CHECK-DAG: %[[C0:.*]] = arith.constant 0 : index
1609
1689
// CHECK-DAG: %[[C1:.*]] = arith.constant 1 : index
1610
1690
// CHECK: vector.transfer_write
1611
1691
// CHECK: vector.transfer_write
1612
1692
// CHECK: vector.transfer_read
1613
1693
// CHECK: %[[VTW:.*]] = vector.transfer_write {{.*}}, {{.*}}[%[[C1]], %[[C0]]]
1614
1694
// CHECK: return %[[VTW]] : tensor<4x4xf32>
1615
- func.func @dead_store_tensor_negative (%arg0 : tensor <4 x4 xf32 >,
1695
+ func.func @negative_dead_store_tensor (%arg0 : tensor <4 x4 xf32 >,
1616
1696
%v0 : vector <1 x4 xf32 >, %v1 : vector <1 x4 xf32 >, %i : index ) -> tensor <4 x4 xf32 > {
1617
1697
%c1 = arith.constant 1 : index
1618
1698
%c2 = arith.constant 2 : index
@@ -2063,10 +2143,10 @@ func.func @extract_insert_rank_reduce(%a: vector<4xf32>, %b: vector<8x16xf32>)
2063
2143
2064
2144
// -----
2065
2145
2066
- // CHECK-LABEL: extract_insert_negative
2146
+ // CHECK-LABEL: negative_extract_insert
2067
2147
// CHECK: vector.insert_strided_slice
2068
2148
// CHECK: vector.extract
2069
- func.func @extract_insert_negative (%a: vector <2 x15 xf32 >, %b: vector <12 x8 x16 xf32 >)
2149
+ func.func @negative_extract_insert (%a: vector <2 x15 xf32 >, %b: vector <12 x8 x16 xf32 >)
2070
2150
-> vector <16 xf32 > {
2071
2151
%0 = vector.insert_strided_slice %a , %b {offsets = [4 , 2 , 0 ], strides = [1 , 1 ]}
2072
2152
: vector <2 x15 xf32 > into vector <12 x8 x16 xf32 >
0 commit comments