@@ -1774,3 +1774,45 @@ func.func @from_elements_3d(%arg0: f32, %arg1: f32, %arg2: f32, %arg3: f32) -> v
1774
1774
%0 = vector.from_elements %arg0 , %arg1 , %arg2 , %arg3 : vector <2 x1 x2 xf32 >
1775
1775
return %0 : vector <2 x1 x2 xf32 >
1776
1776
}
1777
+
1778
+ // -----
1779
+
1780
+ //===----------------------------------------------------------------------===//
1781
+ // vector.to_elements
1782
+ //===----------------------------------------------------------------------===//
1783
+
1784
+ // CHECK-LABEL: func @to_elements_1d(
1785
+ // CHECK-SAME: %[[ARG0:.+]]: vector<2xf32>
1786
+ // CHECK: %[[C0:.+]] = llvm.mlir.constant(0 : i64) : i64
1787
+ // CHECK: %[[V0:.+]] = llvm.extractelement %[[ARG0]][%[[C0]] : i64] : vector<2xf32>
1788
+ // CHECK: %[[C1:.+]] = llvm.mlir.constant(1 : i64) : i64
1789
+ // CHECK: %[[V1:.+]] = llvm.extractelement %[[ARG0]][%[[C1]] : i64] : vector<2xf32>
1790
+ // CHECK: return %[[V0]], %[[V1]]
1791
+ func.func @to_elements_1d (%arg0: vector <2 xf32 >) -> (f32 , f32 ) {
1792
+ %0:2 = vector.to_elements %arg0 : vector <2 xf32 >
1793
+ return %0#0 , %0#1 : f32 , f32
1794
+ }
1795
+
1796
+ // -----
1797
+
1798
+ // NOTE: We unroll multi-dimensional to_elements ops with pattern
1799
+ // `UnrollToElements` and then convert the 1-D to_elements ops to llvm.
1800
+
1801
+ // CHECK-LABEL: func @to_elements_2d(
1802
+ // CHECK-SAME: %[[ARG0:.+]]: vector<2x2xf32>
1803
+ // CHECK: %[[CAST:.+]] = builtin.unrealized_conversion_cast %[[ARG0]] : vector<2x2xf32> to !llvm.array<2 x vector<2xf32>>
1804
+ // CHECK: %[[V0:.+]] = llvm.extractvalue %[[CAST]][0] : !llvm.array<2 x vector<2xf32>>
1805
+ // CHECK: %[[V1:.+]] = llvm.extractvalue %[[CAST]][1] : !llvm.array<2 x vector<2xf32>>
1806
+ // CHECK: %[[C0:.+]] = llvm.mlir.constant(0 : i64) : i64
1807
+ // CHECK: %[[R0:.+]] = llvm.extractelement %[[V0]][%[[C0]] : i64] : vector<2xf32>
1808
+ // CHECK: %[[C1:.+]] = llvm.mlir.constant(1 : i64) : i64
1809
+ // CHECK: %[[R1:.+]] = llvm.extractelement %[[V0]][%[[C1]] : i64] : vector<2xf32>
1810
+ // CHECK: %[[C0:.+]] = llvm.mlir.constant(0 : i64) : i64
1811
+ // CHECK: %[[R2:.+]] = llvm.extractelement %[[V1]][%[[C0]] : i64] : vector<2xf32>
1812
+ // CHECK: %[[C1:.+]] = llvm.mlir.constant(1 : i64) : i64
1813
+ // CHECK: %[[R3:.+]] = llvm.extractelement %[[V1]][%[[C1]] : i64] : vector<2xf32>
1814
+ // CHECK: return %[[R0]], %[[R1]], %[[R2]], %[[R3]]
1815
+ func.func @to_elements_2d (%arg0: vector <2 x2 xf32 >) -> (f32 , f32 , f32 , f32 ) {
1816
+ %0:4 = vector.to_elements %arg0 : vector <2 x2 xf32 >
1817
+ return %0#0 , %0#1 , %0#2 , %0#3 : f32 , f32 , f32 , f32
1818
+ }
0 commit comments