@@ -3530,6 +3530,62 @@ func.func @from_elements_index_to_i64_conversion() -> vector<3xi64> {
35303530
35313531// -----
35323532
3533+ // +---------------------------------------------------------------------------
3534+ // Tests for FoldTransposeFromElements
3535+ // +---------------------------------------------------------------------------
3536+
3537+ // CHECK-LABEL: transpose_from_elements_1d
3538+ // CHECK-SAME: %[[EL_0:.*]]: i32, %[[EL_1:.*]]: i32
3539+ func.func @transpose_from_elements_1d (%el_0: i32 , %el_1: i32 ) -> vector <2 xi32 > {
3540+ %v = vector.from_elements %el_0 , %el_1 : vector <2 xi32 >
3541+ %t = vector.transpose %v , [0 ] : vector <2 xi32 > to vector <2 xi32 >
3542+ return %t : vector <2 xi32 >
3543+ // CHECK: %[[R:.*]] = vector.from_elements %[[EL_0]], %[[EL_1]] : vector<2xi32>
3544+ // CHECK-NOT: vector.transpose
3545+ // CHECK: return %[[R]]
3546+ }
3547+
3548+ // CHECK-LABEL: transpose_from_elements_2d
3549+ // CHECK-SAME: %[[EL_0_0:.*]]: i32, %[[EL_0_1:.*]]: i32, %[[EL_0_2:.*]]: i32, %[[EL_1_0:.*]]: i32, %[[EL_1_1:.*]]: i32, %[[EL_1_2:.*]]: i32
3550+ func.func @transpose_from_elements_2d (
3551+ %el_0_0: i32 , %el_0_1: i32 , %el_0_2: i32 ,
3552+ %el_1_0: i32 , %el_1_1: i32 , %el_1_2: i32
3553+ ) -> vector <3 x2 xi32 > {
3554+ %v = vector.from_elements %el_0_0 , %el_0_1 , %el_0_2 , %el_1_0 , %el_1_1 , %el_1_2 : vector <2 x3 xi32 >
3555+ %t = vector.transpose %v , [1 , 0 ] : vector <2 x3 xi32 > to vector <3 x2 xi32 >
3556+ return %t : vector <3 x2 xi32 >
3557+ // CHECK: %[[R:.*]] = vector.from_elements %[[EL_0_0:.*]], %[[EL_1_0:.*]], %[[EL_0_1:.*]], %[[EL_1_1:.*]], %[[EL_0_2:.*]], %[[EL_1_2:.*]] : vector<3x2xi32>
3558+ // CHECK-NOT: vector.transpose
3559+ // CHECK: return %[[R]]
3560+ }
3561+
3562+ // CHECK-LABEL: transpose_from_elements_3d
3563+ // CHECK-SAME: %[[EL_0_0_0:.*]]: i32, %[[EL_0_0_1:.*]]: i32, %[[EL_0_1_0:.*]]: i32, %[[EL_0_1_1:.*]]: i32, %[[EL_0_2_0:.*]]: i32, %[[EL_0_2_1:.*]]: i32, %[[EL_1_0_0:.*]]: i32, %[[EL_1_0_1:.*]]: i32, %[[EL_1_1_0:.*]]: i32, %[[EL_1_1_1:.*]]: i32, %[[EL_1_2_0:.*]]: i32, %[[EL_1_2_1:.*]]: i32
3564+ func.func @transpose_from_elements_3d (
3565+ %el_0_0_0: i32 , %el_0_0_1: i32 , %el_0_1_0: i32 , %el_0_1_1: i32 , %el_0_2_0: i32 , %el_0_2_1: i32 ,
3566+ %el_1_0_0: i32 , %el_1_0_1: i32 , %el_1_1_0: i32 , %el_1_1_1: i32 , %el_1_2_0: i32 , %el_1_2_1: i32
3567+ ) -> vector <2 x2 x3 xi32 > {
3568+ %v = vector.from_elements
3569+ %el_0_0_0 , %el_0_0_1 ,
3570+ %el_0_1_0 , %el_0_1_1 ,
3571+ %el_0_2_0 , %el_0_2_1 ,
3572+ %el_1_0_0 , %el_1_0_1 ,
3573+ %el_1_1_0 , %el_1_1_1 ,
3574+ %el_1_2_0 , %el_1_2_1
3575+ : vector <2 x3 x2 xi32 >
3576+ %t = vector.transpose %v , [0 , 2 , 1 ] : vector <2 x3 x2 xi32 > to vector <2 x2 x3 xi32 >
3577+ return %t : vector <2 x2 x3 xi32 >
3578+ // CHECK: %[[R:.*]] = vector.from_elements %[[EL_0_0_0:.*]], %[[EL_0_1_0:.*]], %[[EL_0_2_0:.*]], %[[EL_0_0_1:.*]], %[[EL_0_1_1:.*]], %[[EL_0_2_1:.*]], %[[EL_1_0_0:.*]], %[[EL_1_1_0:.*]], %[[EL_1_2_0:.*]], %[[EL_1_0_1:.*]], %[[EL_1_1_1:.*]], %[[EL_1_2_1:.*]] : vector<2x2x3xi32>
3579+ // CHECK-NOT: vector.transpose
3580+ // CHECK: return %[[R]]
3581+ }
3582+
3583+ // +---------------------------------------------------------------------------
3584+ // End of Tests for FoldTransposeFromElements
3585+ // +---------------------------------------------------------------------------
3586+
3587+ // -----
3588+
35333589// Not a DenseElementsAttr, don't fold.
35343590
35353591// CHECK-LABEL: func @negative_insert_llvm_undef(
0 commit comments