@@ -17,6 +17,33 @@ define <16 x i32> @concat_zext_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {
17
17
ret <16 x i32 > %r
18
18
}
19
19
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
+
20
47
define <16 x i32 > @concat_sext_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
21
48
; CHECK-LABEL: @concat_sext_v8i16_v16i32(
22
49
; 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) {
170
197
ret <8 x float > %r
171
198
}
172
199
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
+
173
215
; negative - castop mismatch
174
216
175
217
define <16 x i32 > @concat_sext_zext_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
0 commit comments