@@ -17,6 +17,33 @@ define <16 x i32> @concat_zext_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {
1717 ret <16 x i32 > %r
1818}
1919
20+ define <16 x i32 > @concat_zext_nneg_v8i8_v16i32 (<8 x i8 > %a0 , <8 x i8 > %a1 ) {
21+ ; CHECK-LABEL: @concat_zext_nneg_v8i8_v16i32(
22+ ; CHECK-NEXT: [[X0:%.*]] = zext nneg <8 x i8> [[A0:%.*]] to <8 x i32>
23+ ; CHECK-NEXT: [[X1:%.*]] = zext nneg <8 x i8> [[A1:%.*]] to <8 x i32>
24+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <8 x i32> [[X0]], <8 x i32> [[X1]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
25+ ; CHECK-NEXT: ret <16 x i32> [[R]]
26+ ;
27+ %x0 = zext nneg <8 x i8 > %a0 to <8 x i32 >
28+ %x1 = zext nneg <8 x i8 > %a1 to <8 x i32 >
29+ %r = shufflevector <8 x i32 > %x0 , <8 x i32 > %x1 , <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
30+ ret <16 x i32 > %r
31+ }
32+
33+ ; TODO - sext + zext nneg -> sext
34+ define <8 x i32 > @concat_sext_zext_nneg_v4i8_v8i32 (<4 x i8 > %a0 , <4 x i8 > %a1 ) {
35+ ; CHECK-LABEL: @concat_sext_zext_nneg_v4i8_v8i32(
36+ ; CHECK-NEXT: [[X0:%.*]] = sext <4 x i8> [[A0:%.*]] to <4 x i32>
37+ ; CHECK-NEXT: [[X1:%.*]] = zext nneg <4 x i8> [[A1:%.*]] to <4 x i32>
38+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i32> [[X0]], <4 x i32> [[X1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
39+ ; CHECK-NEXT: ret <8 x i32> [[R]]
40+ ;
41+ %x0 = sext <4 x i8 > %a0 to <4 x i32 >
42+ %x1 = zext nneg <4 x i8 > %a1 to <4 x i32 >
43+ %r = shufflevector <4 x i32 > %x0 , <4 x i32 > %x1 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
44+ ret <8 x i32 > %r
45+ }
46+
2047define <16 x i32 > @concat_sext_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
2148; CHECK-LABEL: @concat_sext_v8i16_v16i32(
2249; CHECK-NEXT: [[X0:%.*]] = sext <8 x i16> [[A0:%.*]] to <8 x i32>
@@ -170,6 +197,21 @@ define <8 x float> @concat_bitcast_v4i32_v8f32(<4 x i32> %a0, <4 x i32> %a1) {
170197 ret <8 x float > %r
171198}
172199
200+ ; negative - src type mismatch
201+
202+ define <8 x i32 > @concat_sext_v4i8_v4i16_v8i32 (<4 x i8 > %a0 , <4 x i16 > %a1 ) {
203+ ; CHECK-LABEL: @concat_sext_v4i8_v4i16_v8i32(
204+ ; CHECK-NEXT: [[X0:%.*]] = sext <4 x i8> [[A0:%.*]] to <4 x i32>
205+ ; CHECK-NEXT: [[X1:%.*]] = sext <4 x i16> [[A1:%.*]] to <4 x i32>
206+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i32> [[X0]], <4 x i32> [[X1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
207+ ; CHECK-NEXT: ret <8 x i32> [[R]]
208+ ;
209+ %x0 = sext <4 x i8 > %a0 to <4 x i32 >
210+ %x1 = sext <4 x i16 > %a1 to <4 x i32 >
211+ %r = shufflevector <4 x i32 > %x0 , <4 x i32 > %x1 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
212+ ret <8 x i32 > %r
213+ }
214+
173215; negative - castop mismatch
174216
175217define <16 x i32 > @concat_sext_zext_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
0 commit comments