@@ -87,3 +87,72 @@ func @strided_slice_of_constant_mask() -> (vector<2x1xi1>) {
8787 // CHECK: vector.constant_mask [1, 1] : vector<2x1xi1>
8888 return %1 : vector <2 x1 xi1 >
8989}
90+
91+ // -----
92+
93+ // CHECK-LABEL: transpose_1D_identity
94+ // CHECK-SAME: ([[ARG:%.*]]: vector<4xf32>)
95+ func @transpose_1D_identity (%arg : vector <4 xf32 >) -> vector <4 xf32 > {
96+ // CHECK-NOT: transpose
97+ %0 = vector.transpose %arg , [0 ] : vector <4 xf32 > to vector <4 xf32 >
98+ // CHECK-NEXT: return [[ARG]]
99+ return %0 : vector <4 xf32 >
100+ }
101+
102+ // -----
103+
104+ // CHECK-LABEL: transpose_2D_identity
105+ // CHECK-SAME: ([[ARG:%.*]]: vector<4x3xf32>)
106+ func @transpose_2D_identity (%arg : vector <4 x3 xf32 >) -> vector <4 x3 xf32 > {
107+ // CHECK-NOT: transpose
108+ %0 = vector.transpose %arg , [0 , 1 ] : vector <4 x3 xf32 > to vector <4 x3 xf32 >
109+ // CHECK-NEXT: return [[ARG]]
110+ return %0 : vector <4 x3 xf32 >
111+ }
112+
113+ // -----
114+
115+ // CHECK-LABEL: transpose_3D_identity
116+ // CHECK-SAME: ([[ARG:%.*]]: vector<4x3x2xf32>)
117+ func @transpose_3D_identity (%arg : vector <4 x3 x2 xf32 >) -> vector <4 x3 x2 xf32 > {
118+ // CHECK-NOT: transpose
119+ %0 = vector.transpose %arg , [0 , 1 , 2 ] : vector <4 x3 x2 xf32 > to vector <4 x3 x2 xf32 >
120+ // CHECK-NEXT: return [[ARG]]
121+ return %0 : vector <4 x3 x2 xf32 >
122+ }
123+
124+ // -----
125+
126+ // CHECK-LABEL: transpose_2D_sequence
127+ // CHECK-SAME: ([[ARG:%.*]]: vector<4x3xf32>)
128+ func @transpose_2D_sequence (%arg : vector <4 x3 xf32 >) -> vector <3 x4 xf32 > {
129+ // CHECK-NOT: transpose
130+ %0 = vector.transpose %arg , [0 , 1 ] : vector <4 x3 xf32 > to vector <4 x3 xf32 >
131+ // CHECK: [[T1:%.*]] = vector.transpose [[ARG]], [1, 0]
132+ %1 = vector.transpose %0 , [1 , 0 ] : vector <4 x3 xf32 > to vector <3 x4 xf32 >
133+ // CHECK-NOT: transpose
134+ %2 = vector.transpose %1 , [0 , 1 ] : vector <3 x4 xf32 > to vector <3 x4 xf32 >
135+ // CHECK: [[ADD:%.*]] = addf [[T1]], [[T1]]
136+ %4 = addf %1 , %2 : vector <3 x4 xf32 >
137+ // CHECK-NEXT: return [[ADD]]
138+ return %4 : vector <3 x4 xf32 >
139+ }
140+
141+ // -----
142+
143+ // CHECK-LABEL: transpose_3D_sequence
144+ // CHECK-SAME: ([[ARG:%.*]]: vector<4x3x2xf32>)
145+ func @transpose_3D_sequence (%arg : vector <4 x3 x2 xf32 >) -> vector <2 x3 x4 xf32 > {
146+ // CHECK: [[T0:%.*]] = vector.transpose [[ARG]], [1, 2, 0]
147+ %0 = vector.transpose %arg , [1 , 2 , 0 ] : vector <4 x3 x2 xf32 > to vector <3 x2 x4 xf32 >
148+ // CHECK-NOT: transpose
149+ %1 = vector.transpose %0 , [0 , 1 , 2 ] : vector <3 x2 x4 xf32 > to vector <3 x2 x4 xf32 >
150+ // CHECK: [[T2:%.*]] = vector.transpose [[T0]], [1, 0, 2]
151+ %2 = vector.transpose %1 , [1 , 0 , 2 ] : vector <3 x2 x4 xf32 > to vector <2 x3 x4 xf32 >
152+ // CHECK: [[ADD:%.*]] = addf [[T2]], [[T2]]
153+ %3 = addf %2 , %2 : vector <2 x3 x4 xf32 >
154+ // CHECK-NOT: transpose
155+ %4 = vector.transpose %3 , [0 , 1 , 2 ] : vector <2 x3 x4 xf32 > to vector <2 x3 x4 xf32 >
156+ // CHECK-NEXT: return [[ADD]]
157+ return %4 : vector <2 x3 x4 xf32 >
158+ }
0 commit comments