|
2 | 2 |
|
3 | 3 | // This file contains some tests of folding/canonicalizing vector.from_elements
|
4 | 4 |
|
| 5 | +///===----------------------------------------------===// |
| 6 | +/// Tests of `rewriteFromElementsAsSplat` |
| 7 | +///===----------------------------------------------===// |
| 8 | + |
5 | 9 | // CHECK-LABEL: func @extract_scalar_from_from_elements(
|
6 | 10 | // CHECK-SAME: %[[a:.*]]: f32, %[[b:.*]]: f32)
|
7 | 11 | func.func @extract_scalar_from_from_elements(%a: f32, %b: f32) -> (f32, f32, f32, f32, f32, f32, f32) {
|
@@ -70,3 +74,72 @@ func.func @from_elements_to_splat(%a: f32, %b: f32) -> (vector<2x3xf32>, vector<
|
70 | 74 | }
|
71 | 75 |
|
72 | 76 | // -----
|
| 77 | + |
| 78 | + |
| 79 | +///===----------------------------------------------===// |
| 80 | +/// Tests of `rewriteFromElementsAsShapeCast` |
| 81 | +///===----------------------------------------------===// |
| 82 | + |
| 83 | +// CHECK-LABEL: func @to_shape_cast_rank2_to_rank1( |
| 84 | +// CHECK-SAME: %[[a:.*]]: vector<1x2xi8>) |
| 85 | +// CHECK: %[[shape_cast:.*]] = vector.shape_cast %[[a]] : vector<1x2xi8> to vector<2xi8> |
| 86 | +// CHECK: return %[[shape_cast]] : vector<2xi8> |
| 87 | +func.func @to_shape_cast_rank2_to_rank1(%arg0: vector<1x2xi8>) -> vector<2xi8> { |
| 88 | + %0 = vector.extract %arg0[0, 0] : i8 from vector<1x2xi8> |
| 89 | + %1 = vector.extract %arg0[0, 1] : i8 from vector<1x2xi8> |
| 90 | + %4 = vector.from_elements %0, %1 : vector<2xi8> |
| 91 | + return %4 : vector<2xi8> |
| 92 | +} |
| 93 | + |
| 94 | +// ----- |
| 95 | + |
| 96 | +// CHECK-LABEL: func @to_shape_cast_rank1_to_rank3( |
| 97 | +// CHECK-SAME: %[[a:.*]]: vector<8xi8>) |
| 98 | +// CHECK: %[[shape_cast:.*]] = vector.shape_cast %[[a]] : vector<8xi8> to vector<2x2x2xi8> |
| 99 | +// CHECK: return %[[shape_cast]] : vector<2x2x2xi8> |
| 100 | +func.func @to_shape_cast_rank1_to_rank3(%arg0: vector<8xi8>) -> vector<2x2x2xi8> { |
| 101 | + %0 = vector.extract %arg0[0] : i8 from vector<8xi8> |
| 102 | + %1 = vector.extract %arg0[1] : i8 from vector<8xi8> |
| 103 | + %2 = vector.extract %arg0[2] : i8 from vector<8xi8> |
| 104 | + %3 = vector.extract %arg0[3] : i8 from vector<8xi8> |
| 105 | + %4 = vector.extract %arg0[4] : i8 from vector<8xi8> |
| 106 | + %5 = vector.extract %arg0[5] : i8 from vector<8xi8> |
| 107 | + %6 = vector.extract %arg0[6] : i8 from vector<8xi8> |
| 108 | + %7 = vector.extract %arg0[7] : i8 from vector<8xi8> |
| 109 | + %8 = vector.from_elements %0, %1, %2, %3, %4, %5, %6, %7 : vector<2x2x2xi8> |
| 110 | + return %8 : vector<2x2x2xi8> |
| 111 | +} |
| 112 | + |
| 113 | +// ----- |
| 114 | + |
| 115 | +// The extracted elements are recombined into a single vector, but in a new order. |
| 116 | +// CHECK-LABEL: func @negative_nonascending_order( |
| 117 | +// CHECK-NOT: shape_cast |
| 118 | +func.func @negative_nonascending_order(%arg0: vector<1x2xi8>) -> vector<2xi8> { |
| 119 | + %0 = vector.extract %arg0[0, 1] : i8 from vector<1x2xi8> |
| 120 | + %1 = vector.extract %arg0[0, 0] : i8 from vector<1x2xi8> |
| 121 | + %2 = vector.from_elements %0, %1 : vector<2xi8> |
| 122 | + return %2 : vector<2xi8> |
| 123 | +} |
| 124 | + |
| 125 | +// ----- |
| 126 | + |
| 127 | +// CHECK-LABEL: func @negative_nonstatic_extract( |
| 128 | +// CHECK-NOT: shape_cast |
| 129 | +func.func @negative_nonstatic_extract(%arg0: vector<1x2xi8>, %i0 : index, %i1 : index) -> vector<2xi8> { |
| 130 | + %0 = vector.extract %arg0[0, %i0] : i8 from vector<1x2xi8> |
| 131 | + %1 = vector.extract %arg0[0, %i1] : i8 from vector<1x2xi8> |
| 132 | + %2 = vector.from_elements %0, %1 : vector<2xi8> |
| 133 | + return %2 : vector<2xi8> |
| 134 | +} |
| 135 | + |
| 136 | +// ----- |
| 137 | + |
| 138 | +// CHECK-LABEL: func @negative_different_sources( |
| 139 | +// CHECK-NOT: shape_cast |
| 140 | +func.func @negative_different_sources(%arg0: vector<1x2xi8>, %arg1: vector<1x2xi8>) -> vector<2xi8> { |
| 141 | + %0 = vector.extract %arg0[0, 0] : i8 from vector<1x2xi8> |
| 142 | + %1 = vector.extract %arg1[0, 1] : i8 from vector<1x2xi8> |
| 143 | + %2 = vector.from_elements %0, %1 : vector<2xi8> |
| 144 | + return %2 : vector<2xi8> |
| 145 | +} |
0 commit comments