@@ -1473,6 +1473,26 @@ func.func @extract_scalar_from_vec_0d_index(%arg0: vector<index>) -> index {
1473
1473
// CHECK: %[[T3:.*]] = builtin.unrealized_conversion_cast %[[T2]] : i64 to index
1474
1474
// CHECK: return %[[T3]] : index
1475
1475
1476
+
1477
+ // -----
1478
+
1479
+ func.func @extract_scalar_from_vec_2d_f32_dynamic_idxs_compile_time_const (%arg : vector <32 x1 xi32 >) -> i32 {
1480
+ %0 = arith.constant 0 : index
1481
+ %1 = vector.extract %arg [%0 , %0 ] : i32 from vector <32 x1 xi32 >
1482
+ return %1 : i32
1483
+ }
1484
+
1485
+ // Compile-time if the indices of extractOp if constants, the constants will be collapsed,
1486
+ // the constants are folded away, hence the lowering works.
1487
+
1488
+ // CHECK-LABEL: @extract_scalar_from_vec_2d_f32_dynamic_idxs_compile_time_const
1489
+ // CHECK-SAME: %[[ARG:.*]]: vector<32x1xi32>) -> i32 {
1490
+ // CHECK: %[[CAST:.*]] = builtin.unrealized_conversion_cast %[[ARG]] : vector<32x1xi32> to !llvm.array<32 x vector<1xi32>>
1491
+ // CHECK: %[[VEC_0:.*]] = llvm.extractvalue %[[CAST]][0] : !llvm.array<32 x vector<1xi32>>
1492
+ // CHECK: %[[C0:.*]] = llvm.mlir.constant(0 : i64) : i64
1493
+ // CHECK: %[[RES:.*]] = llvm.extractelement %[[VEC_0]]{{\[}}%[[C0]] : i64] : vector<1xi32>
1494
+ // CHECK: return %[[RES]] : i32
1495
+
1476
1496
// -----
1477
1497
1478
1498
//===----------------------------------------------------------------------===//
@@ -1726,6 +1746,29 @@ func.func @insert_scalar_into_vec_2d_f32_dynamic_idx_scalable(%arg0: vector<1x[1
1726
1746
1727
1747
// -----
1728
1748
1749
+ func.func @insert_scalar_from_vec_2d_f32_dynamic_idxs_compile_time_const (%arg : vector <4 x1 xi32 >) -> vector <4 x1 xi32 > {
1750
+ %0 = arith.constant 0 : index
1751
+ %1 = arith.constant 1 : i32
1752
+ %res = vector.insert %1 , %arg [%0 , %0 ] : i32 into vector <4 x1 xi32 >
1753
+ return %res : vector <4 x1 xi32 >
1754
+ }
1755
+
1756
+ // Compile-time if the indices of insertOp if constants, the constants will be collapsed,
1757
+ // the constants are folded away, hence the lowering works.
1758
+
1759
+ // CHECK-LABEL: @insert_scalar_from_vec_2d_f32_dynamic_idxs_compile_time_const
1760
+ // CHECK-SAME: %[[ARG:.*]]: vector<4x1xi32>) -> vector<4x1xi32> {
1761
+ // CHECK: %[[CAST:.*]] = builtin.unrealized_conversion_cast %[[ARG]] : vector<4x1xi32> to !llvm.array<4 x vector<1xi32>>
1762
+ // CHECK: %[[C1:.*]] = arith.constant 1 : i32
1763
+ // CHECK: %[[VEC_0:.*]] = llvm.extractvalue %[[CAST]][0] : !llvm.array<4 x vector<1xi32>>
1764
+ // CHECK: %[[C0:.*]] = llvm.mlir.constant(0 : i64) : i64
1765
+ // CHECK: %[[VEC_1:.*]] = llvm.insertelement %[[C1]], %[[VEC_0]]{{\[}}%[[C0]] : i64] : vector<1xi32>
1766
+ // CHECK: %[[VEC_2:.*]] = llvm.insertvalue %[[VEC_1]], %[[CAST]][0] : !llvm.array<4 x vector<1xi32>>
1767
+ // CHECK: %[[RES:.*]] = builtin.unrealized_conversion_cast %[[VEC_2]] : !llvm.array<4 x vector<1xi32>> to vector<4x1xi32>
1768
+ // CHECK: return %[[RES]] : vector<4x1xi32>
1769
+
1770
+ // -----
1771
+
1729
1772
//===----------------------------------------------------------------------===//
1730
1773
// vector.type_cast
1731
1774
//
@@ -4125,42 +4168,3 @@ func.func @step_scalable() -> vector<[4]xindex> {
4125
4168
%0 = vector.step : vector <[4 ]xindex >
4126
4169
return %0 : vector <[4 ]xindex >
4127
4170
}
4128
-
4129
- // -----
4130
-
4131
- // CHECK-LABEL: func @fold_extract_constant_indices
4132
-
4133
- func.func @fold_extract_constant_indices (%arg : vector <32 x1 xi32 >) -> i32 {
4134
- %0 = arith.constant 0 : index
4135
- %1 = vector.extract %arg [%0 , %0 ] : i32 from vector <32 x1 xi32 >
4136
- return %1 : i32
4137
- }
4138
-
4139
- // CHECK-SAME: %[[ARG:.*]]: vector<32x1xi32>) -> i32 {
4140
- // CHECK: %[[CAST:.*]] = builtin.unrealized_conversion_cast %[[ARG]] : vector<32x1xi32> to !llvm.array<32 x vector<1xi32>>
4141
- // CHECK: %[[VEC_0:.*]] = llvm.extractvalue %[[CAST]][0] : !llvm.array<32 x vector<1xi32>>
4142
- // CHECK: %[[C0:.*]] = llvm.mlir.constant(0 : i64) : i64
4143
- // CHECK: %[[RES:.*]] = llvm.extractelement %[[VEC_0]]{{\[}}%[[C0]] : i64] : vector<1xi32>
4144
- // CHECK: return %[[RES]] : i32
4145
-
4146
- // -----
4147
-
4148
- // CHECK-LABEL: func @fold_insert_constant_indices
4149
-
4150
- func.func @fold_insert_constant_indices (%arg : vector <4 x1 xi32 >) -> vector <4 x1 xi32 > {
4151
- %0 = arith.constant 0 : index
4152
- %1 = arith.constant 1 : i32
4153
- %res = vector.insert %1 , %arg [%0 , %0 ] : i32 into vector <4 x1 xi32 >
4154
- return %res : vector <4 x1 xi32 >
4155
- }
4156
-
4157
-
4158
- // CHECK-SAME: %[[ARG:.*]]: vector<4x1xi32>) -> vector<4x1xi32> {
4159
- // CHECK: %[[CAST:.*]] = builtin.unrealized_conversion_cast %[[ARG]] : vector<4x1xi32> to !llvm.array<4 x vector<1xi32>>
4160
- // CHECK: %[[C1:.*]] = arith.constant 1 : i32
4161
- // CHECK: %[[VEC_0:.*]] = llvm.extractvalue %[[CAST]][0] : !llvm.array<4 x vector<1xi32>>
4162
- // CHECK: %[[C0:.*]] = llvm.mlir.constant(0 : i64) : i64
4163
- // CHECK: %[[VEC_1:.*]] = llvm.insertelement %[[C1]], %[[VEC_0]]{{\[}}%[[C0]] : i64] : vector<1xi32>
4164
- // CHECK: %[[VEC_2:.*]] = llvm.insertvalue %[[VEC_1]], %[[CAST]][0] : !llvm.array<4 x vector<1xi32>>
4165
- // CHECK: %[[RES:.*]] = builtin.unrealized_conversion_cast %[[VEC_2]] : !llvm.array<4 x vector<1xi32>> to vector<4x1xi32>
4166
- // CHECK: return %[[RES]] : vector<4x1xi32>
0 commit comments