Skip to content

Commit b15d27e

Browse files
committed
[VectorCombine][X86] Add additional tests for #87510
Add zext nneg tests and check we don't fold casts with different src types
1 parent d578840 commit b15d27e

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

llvm/test/Transforms/VectorCombine/X86/shuffle-of-casts.ll

+42
Original file line numberDiff line numberDiff line change
@@ -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+
2047
define <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

175217
define <16 x i32> @concat_sext_zext_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {

0 commit comments

Comments
 (0)