@@ -78,6 +78,38 @@ func.func @bitcast_index_to_i8_vector_scalable(%input: vector<[16]xindex>) -> ve
78
78
79
79
// -----
80
80
81
+ // CHECK-LABEL: func.func @bitcast_2d(
82
+ // CHECK-SAME: %[[ARG_0:.*]]: vector<2x4xi32>) -> vector<2x2xi64> {
83
+ // CHECK: %[[T0:.*]] = builtin.unrealized_conversion_cast %[[ARG_0]] : vector<2x4xi32> to !llvm.array<2 x vector<4xi32>>
84
+ // CHECK: %[[VEC_1:.*]] = llvm.extractvalue %[[T0]][0] : !llvm.array<2 x vector<4xi32>>
85
+ // CHECK: %[[BCAST_1:.*]] = llvm.bitcast %[[VEC_1]] : vector<4xi32> to vector<2xi64>
86
+ // CHECK: %[[OUT_1:.*]] = llvm.insertvalue %[[BCAST_1]], {{.*}}[0] : !llvm.array<2 x vector<2xi64>>
87
+ // CHECK: %[[VEC_2:.*]] = llvm.extractvalue %[[T0]][1] : !llvm.array<2 x vector<4xi32>>
88
+ // CHECK: %[[BCAST_2:.*]] = llvm.bitcast %[[VEC_2]] : vector<4xi32> to vector<2xi64>
89
+ // CHECK: %[[OUT_2:.*]] = llvm.insertvalue %[[BCAST_2]], %[[OUT_1]][1] : !llvm.array<2 x vector<2xi64>>
90
+ func.func @bitcast_2d (%arg0: vector <2 x4 xi32 >) -> vector <2 x2 xi64 > {
91
+ %0 = vector.bitcast %arg0 : vector <2 x4 xi32 > to vector <2 x2 xi64 >
92
+ return %0 : vector <2 x2 xi64 >
93
+ }
94
+
95
+ // -----
96
+
97
+ // CHECK-LABEL: func.func @bitcast_2d_scalable(
98
+ // CHECK-SAME: %[[ARG_0:.*]]: vector<2x[4]xi32>) -> vector<2x[2]xi64> {
99
+ // CHECK: %[[T0:.*]] = builtin.unrealized_conversion_cast %[[ARG_0]] : vector<2x[4]xi32> to !llvm.array<2 x vector<[4]xi32>>
100
+ // CHECK: %[[VEC_1:.*]] = llvm.extractvalue %[[T0]][0] : !llvm.array<2 x vector<[4]xi32>>
101
+ // CHECK: %[[BCAST_1:.*]] = llvm.bitcast %[[VEC_1]] : vector<[4]xi32> to vector<[2]xi64>
102
+ // CHECK: %[[OUT_1:.*]] = llvm.insertvalue %[[BCAST_1]], {{.*}}[0] : !llvm.array<2 x vector<[2]xi64>>
103
+ // CHECK: %[[VEC_2:.*]] = llvm.extractvalue %[[T0]][1] : !llvm.array<2 x vector<[4]xi32>>
104
+ // CHECK: %[[BCAST_2:.*]] = llvm.bitcast %[[VEC_2]] : vector<[4]xi32> to vector<[2]xi64>
105
+ // CHECK: %[[OUT_2:.*]] = llvm.insertvalue %[[BCAST_2]], %[[OUT_1]][1] : !llvm.array<2 x vector<[2]xi64>>
106
+ func.func @bitcast_2d_scalable (%arg0: vector <2 x[4 ]xi32 >) -> vector <2 x[2 ]xi64 > {
107
+ %0 = vector.bitcast %arg0 : vector <2 x[4 ]xi32 > to vector <2 x[2 ]xi64 >
108
+ return %0 : vector <2 x[2 ]xi64 >
109
+ }
110
+
111
+ // -----
112
+
81
113
func.func @broadcast_vec0d_from_f32 (%arg0: f32 ) -> vector <f32 > {
82
114
%0 = vector.broadcast %arg0 : f32 to vector <f32 >
83
115
return %0 : vector <f32 >
@@ -3520,6 +3552,23 @@ func.func @splat(%a: vector<4xf32>, %b: f32) -> vector<4xf32> {
3520
3552
3521
3553
// -----
3522
3554
3555
+ // CHECK-LABEL: @splat_scalable
3556
+ // CHECK-SAME: %[[A:arg[0-9]+]]: vector<[4]xf32>
3557
+ // CHECK-SAME: %[[ELT:arg[0-9]+]]: f32
3558
+ func.func @splat_scalable (%a: vector <[4 ]xf32 >, %b: f32 ) -> vector <[4 ]xf32 > {
3559
+ %vb = vector.splat %b : vector <[4 ]xf32 >
3560
+ %r = arith.mulf %a , %vb : vector <[4 ]xf32 >
3561
+ return %r : vector <[4 ]xf32 >
3562
+ }
3563
+ // CHECK-NEXT: %[[UNDEF:[0-9]+]] = llvm.mlir.undef : vector<[4]xf32>
3564
+ // CHECK-NEXT: %[[ZERO:[0-9]+]] = llvm.mlir.constant(0 : i32) : i32
3565
+ // CHECK-NEXT: %[[V:[0-9]+]] = llvm.insertelement %[[ELT]], %[[UNDEF]][%[[ZERO]] : i32] : vector<[4]xf32>
3566
+ // CHECK-NEXT: %[[SPLAT:[0-9]+]] = llvm.shufflevector %[[V]], %[[UNDEF]] [0, 0, 0, 0]
3567
+ // CHECK-NEXT: %[[SCALE:[0-9]+]] = arith.mulf %[[A]], %[[SPLAT]] : vector<[4]xf32>
3568
+ // CHECK-NEXT: return %[[SCALE]] : vector<[4]xf32>
3569
+
3570
+ // -----
3571
+
3523
3572
// CHECK-LABEL: @vector_scalable_insert
3524
3573
// CHECK-SAME: %[[SUB:.*]]: vector<4xf32>, %[[SV:.*]]: vector<[4]xf32>
3525
3574
func.func @vector_scalable_insert (%sub: vector <4 xf32 >, %dsv: vector <[4 ]xf32 >) -> vector <[4 ]xf32 > {
@@ -3542,16 +3591,6 @@ func.func @vector_scalable_extract(%vec: vector<[4]xf32>) -> vector<8xf32> {
3542
3591
3543
3592
// -----
3544
3593
3545
- // CHECK-LABEL: @make_fixed_vector_of_scalable_vector
3546
- func.func @make_fixed_vector_of_scalable_vector (%f : f64 ) -> vector <3 x[2 ]xf64 >
3547
- {
3548
- // CHECK: %{{.*}} = llvm.mlir.undef : !llvm.array<3 x vector<[2]xf64>>
3549
- %res = vector.broadcast %f : f64 to vector <3 x[2 ]xf64 >
3550
- return %res : vector <3 x[2 ]xf64 >
3551
- }
3552
-
3553
- // -----
3554
-
3555
3594
// CHECK-LABEL: @vector_interleave_0d
3556
3595
// CHECK-SAME: %[[LHS:.*]]: vector<i8>, %[[RHS:.*]]: vector<i8>)
3557
3596
func.func @vector_interleave_0d (%a: vector <i8 >, %b: vector <i8 >) -> vector <2 xi8 > {
@@ -3647,16 +3686,6 @@ func.func @vector_deinterleave_2d_scalable(%a: vector<2x[8]xf32>) -> (vector<2x[
3647
3686
3648
3687
// -----
3649
3688
3650
- // CHECK-LABEL: func.func @vector_bitcast_2d
3651
- // CHECK: llvm.bitcast
3652
- // CHECK-NOT: vector.bitcast
3653
- func.func @vector_bitcast_2d (%arg0: vector <2 x4 xi32 >) -> vector <2 x2 xi64 > {
3654
- %0 = vector.bitcast %arg0 : vector <2 x4 xi32 > to vector <2 x2 xi64 >
3655
- return %0 : vector <2 x2 xi64 >
3656
- }
3657
-
3658
- // -----
3659
-
3660
3689
// CHECK-LABEL: func.func @vector_from_elements_1d(
3661
3690
// CHECK-SAME: %[[a:.*]]: f32, %[[b:.*]]: f32)
3662
3691
// CHECK: %[[undef:.*]] = llvm.mlir.undef : vector<3xf32>
0 commit comments