Skip to content

Commit 0f60ed1

Browse files
committed
[ARM] Single source vmovnt tests. NFC
1 parent 23db2d3 commit 0f60ed1

File tree

1 file changed

+214
-0
lines changed

1 file changed

+214
-0
lines changed

llvm/test/CodeGen/Thumb2/mve-vmovn.ll

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,48 @@ entry:
4141
ret <8 x i16> %out
4242
}
4343

44+
define arm_aapcs_vfpcc <8 x i16> @vmovn32_trunc3(<4 x i32> %src1) {
45+
; CHECK-LABEL: vmovn32_trunc3:
46+
; CHECK: @ %bb.0: @ %entry
47+
; CHECK-NEXT: vmov q1, q0
48+
; CHECK-NEXT: vmov r0, s4
49+
; CHECK-NEXT: vmov.16 q0[0], r0
50+
; CHECK-NEXT: vmov.16 q0[1], r0
51+
; CHECK-NEXT: vmov r0, s5
52+
; CHECK-NEXT: vmov.16 q0[2], r0
53+
; CHECK-NEXT: vmov.16 q0[3], r0
54+
; CHECK-NEXT: vmov r0, s6
55+
; CHECK-NEXT: vmov.16 q0[4], r0
56+
; CHECK-NEXT: vmov.16 q0[5], r0
57+
; CHECK-NEXT: vmov r0, s7
58+
; CHECK-NEXT: vmov.16 q0[6], r0
59+
; CHECK-NEXT: vmov.16 q0[7], r0
60+
; CHECK-NEXT: bx lr
61+
;
62+
; CHECKBE-LABEL: vmovn32_trunc3:
63+
; CHECKBE: @ %bb.0: @ %entry
64+
; CHECKBE-NEXT: vrev64.32 q2, q0
65+
; CHECKBE-NEXT: vmov r0, s8
66+
; CHECKBE-NEXT: vmov.16 q1[0], r0
67+
; CHECKBE-NEXT: vmov.16 q1[1], r0
68+
; CHECKBE-NEXT: vmov r0, s9
69+
; CHECKBE-NEXT: vmov.16 q1[2], r0
70+
; CHECKBE-NEXT: vmov.16 q1[3], r0
71+
; CHECKBE-NEXT: vmov r0, s10
72+
; CHECKBE-NEXT: vmov.16 q1[4], r0
73+
; CHECKBE-NEXT: vmov.16 q1[5], r0
74+
; CHECKBE-NEXT: vmov r0, s11
75+
; CHECKBE-NEXT: vmov.16 q1[6], r0
76+
; CHECKBE-NEXT: vmov.16 q1[7], r0
77+
; CHECKBE-NEXT: vrev64.16 q0, q1
78+
; CHECKBE-NEXT: bx lr
79+
entry:
80+
%strided.vec = shufflevector <4 x i32> %src1, <4 x i32> undef, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>
81+
%out = trunc <8 x i32> %strided.vec to <8 x i16>
82+
ret <8 x i16> %out
83+
}
84+
85+
4486
define arm_aapcs_vfpcc <16 x i8> @vmovn16_trunc1(<8 x i16> %src1, <8 x i16> %src2) {
4587
; CHECK-LABEL: vmovn16_trunc1:
4688
; CHECK: @ %bb.0: @ %entry
@@ -80,6 +122,72 @@ entry:
80122
ret <16 x i8> %out
81123
}
82124

125+
define arm_aapcs_vfpcc <16 x i8> @vmovn16_trunc3(<8 x i16> %src1) {
126+
; CHECK-LABEL: vmovn16_trunc3:
127+
; CHECK: @ %bb.0: @ %entry
128+
; CHECK-NEXT: vmov.u16 r0, q0[0]
129+
; CHECK-NEXT: vmov q1, q0
130+
; CHECK-NEXT: vmov.8 q0[0], r0
131+
; CHECK-NEXT: vmov.8 q0[1], r0
132+
; CHECK-NEXT: vmov.u16 r0, q1[1]
133+
; CHECK-NEXT: vmov.8 q0[2], r0
134+
; CHECK-NEXT: vmov.8 q0[3], r0
135+
; CHECK-NEXT: vmov.u16 r0, q1[2]
136+
; CHECK-NEXT: vmov.8 q0[4], r0
137+
; CHECK-NEXT: vmov.8 q0[5], r0
138+
; CHECK-NEXT: vmov.u16 r0, q1[3]
139+
; CHECK-NEXT: vmov.8 q0[6], r0
140+
; CHECK-NEXT: vmov.8 q0[7], r0
141+
; CHECK-NEXT: vmov.u16 r0, q1[4]
142+
; CHECK-NEXT: vmov.8 q0[8], r0
143+
; CHECK-NEXT: vmov.8 q0[9], r0
144+
; CHECK-NEXT: vmov.u16 r0, q1[5]
145+
; CHECK-NEXT: vmov.8 q0[10], r0
146+
; CHECK-NEXT: vmov.8 q0[11], r0
147+
; CHECK-NEXT: vmov.u16 r0, q1[6]
148+
; CHECK-NEXT: vmov.8 q0[12], r0
149+
; CHECK-NEXT: vmov.8 q0[13], r0
150+
; CHECK-NEXT: vmov.u16 r0, q1[7]
151+
; CHECK-NEXT: vmov.8 q0[14], r0
152+
; CHECK-NEXT: vmov.8 q0[15], r0
153+
; CHECK-NEXT: bx lr
154+
;
155+
; CHECKBE-LABEL: vmovn16_trunc3:
156+
; CHECKBE: @ %bb.0: @ %entry
157+
; CHECKBE-NEXT: vrev64.16 q2, q0
158+
; CHECKBE-NEXT: vmov.u16 r0, q2[0]
159+
; CHECKBE-NEXT: vmov.8 q1[0], r0
160+
; CHECKBE-NEXT: vmov.8 q1[1], r0
161+
; CHECKBE-NEXT: vmov.u16 r0, q2[1]
162+
; CHECKBE-NEXT: vmov.8 q1[2], r0
163+
; CHECKBE-NEXT: vmov.8 q1[3], r0
164+
; CHECKBE-NEXT: vmov.u16 r0, q2[2]
165+
; CHECKBE-NEXT: vmov.8 q1[4], r0
166+
; CHECKBE-NEXT: vmov.8 q1[5], r0
167+
; CHECKBE-NEXT: vmov.u16 r0, q2[3]
168+
; CHECKBE-NEXT: vmov.8 q1[6], r0
169+
; CHECKBE-NEXT: vmov.8 q1[7], r0
170+
; CHECKBE-NEXT: vmov.u16 r0, q2[4]
171+
; CHECKBE-NEXT: vmov.8 q1[8], r0
172+
; CHECKBE-NEXT: vmov.8 q1[9], r0
173+
; CHECKBE-NEXT: vmov.u16 r0, q2[5]
174+
; CHECKBE-NEXT: vmov.8 q1[10], r0
175+
; CHECKBE-NEXT: vmov.8 q1[11], r0
176+
; CHECKBE-NEXT: vmov.u16 r0, q2[6]
177+
; CHECKBE-NEXT: vmov.8 q1[12], r0
178+
; CHECKBE-NEXT: vmov.8 q1[13], r0
179+
; CHECKBE-NEXT: vmov.u16 r0, q2[7]
180+
; CHECKBE-NEXT: vmov.8 q1[14], r0
181+
; CHECKBE-NEXT: vmov.8 q1[15], r0
182+
; CHECKBE-NEXT: vrev64.8 q0, q1
183+
; CHECKBE-NEXT: bx lr
184+
entry:
185+
%strided.vec = shufflevector <8 x i16> %src1, <8 x i16> undef, <16 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3, i32 4, i32 4, i32 5, i32 5, i32 6, i32 6, i32 7, i32 7>
186+
%out = trunc <16 x i16> %strided.vec to <16 x i8>
187+
ret <16 x i8> %out
188+
}
189+
190+
83191

84192
define arm_aapcs_vfpcc <2 x i64> @vmovn64_t1(<2 x i64> %src1, <2 x i64> %src2) {
85193
; CHECK-LABEL: vmovn64_t1:
@@ -331,6 +439,25 @@ entry:
331439
ret <4 x i32> %out
332440
}
333441

442+
define arm_aapcs_vfpcc <4 x i32> @vmovn32_single_t(<4 x i32> %src1) {
443+
; CHECK-LABEL: vmovn32_single_t:
444+
; CHECK: @ %bb.0: @ %entry
445+
; CHECK-NEXT: vmov.f32 s1, s0
446+
; CHECK-NEXT: vmov.f32 s3, s2
447+
; CHECK-NEXT: bx lr
448+
;
449+
; CHECKBE-LABEL: vmovn32_single_t:
450+
; CHECKBE: @ %bb.0: @ %entry
451+
; CHECKBE-NEXT: vrev64.32 q1, q0
452+
; CHECKBE-NEXT: vmov.f32 s5, s4
453+
; CHECKBE-NEXT: vmov.f32 s7, s6
454+
; CHECKBE-NEXT: vrev64.32 q0, q1
455+
; CHECKBE-NEXT: bx lr
456+
entry:
457+
%out = shufflevector <4 x i32> %src1, <4 x i32> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
458+
ret <4 x i32> %out
459+
}
460+
334461

335462

336463

@@ -474,6 +601,29 @@ entry:
474601
ret <8 x i16> %out
475602
}
476603

604+
define arm_aapcs_vfpcc <8 x i16> @vmovn16_single_t(<8 x i16> %src1) {
605+
; CHECK-LABEL: vmovn16_single_t:
606+
; CHECK: @ %bb.0: @ %entry
607+
; CHECK-NEXT: vins.f16 s0, s0
608+
; CHECK-NEXT: vins.f16 s1, s1
609+
; CHECK-NEXT: vins.f16 s2, s2
610+
; CHECK-NEXT: vins.f16 s3, s3
611+
; CHECK-NEXT: bx lr
612+
;
613+
; CHECKBE-LABEL: vmovn16_single_t:
614+
; CHECKBE: @ %bb.0: @ %entry
615+
; CHECKBE-NEXT: vrev64.16 q1, q0
616+
; CHECKBE-NEXT: vins.f16 s5, s5
617+
; CHECKBE-NEXT: vins.f16 s4, s4
618+
; CHECKBE-NEXT: vins.f16 s6, s6
619+
; CHECKBE-NEXT: vins.f16 s7, s7
620+
; CHECKBE-NEXT: vrev64.16 q0, q1
621+
; CHECKBE-NEXT: bx lr
622+
entry:
623+
%out = shufflevector <8 x i16> %src1, <8 x i16> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
624+
ret <8 x i16> %out
625+
}
626+
477627

478628
define arm_aapcs_vfpcc <16 x i8> @vmovn8_b1(<16 x i8> %src1, <16 x i8> %src2) {
479629
; CHECK-LABEL: vmovn8_b1:
@@ -710,3 +860,67 @@ entry:
710860
%out = shufflevector <16 x i8> %src1, <16 x i8> %src2, <16 x i32> <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15>
711861
ret <16 x i8> %out
712862
}
863+
864+
define arm_aapcs_vfpcc <16 x i8> @vmovn8_single_t(<16 x i8> %src1) {
865+
; CHECK-LABEL: vmovn8_single_t:
866+
; CHECK: @ %bb.0: @ %entry
867+
; CHECK-NEXT: vmov.u8 r0, q0[0]
868+
; CHECK-NEXT: vmov q1, q0
869+
; CHECK-NEXT: vmov.8 q0[0], r0
870+
; CHECK-NEXT: vmov.8 q0[1], r0
871+
; CHECK-NEXT: vmov.u8 r0, q1[2]
872+
; CHECK-NEXT: vmov.8 q0[2], r0
873+
; CHECK-NEXT: vmov.8 q0[3], r0
874+
; CHECK-NEXT: vmov.u8 r0, q1[4]
875+
; CHECK-NEXT: vmov.8 q0[4], r0
876+
; CHECK-NEXT: vmov.8 q0[5], r0
877+
; CHECK-NEXT: vmov.u8 r0, q1[6]
878+
; CHECK-NEXT: vmov.8 q0[6], r0
879+
; CHECK-NEXT: vmov.8 q0[7], r0
880+
; CHECK-NEXT: vmov.u8 r0, q1[8]
881+
; CHECK-NEXT: vmov.8 q0[8], r0
882+
; CHECK-NEXT: vmov.8 q0[9], r0
883+
; CHECK-NEXT: vmov.u8 r0, q1[10]
884+
; CHECK-NEXT: vmov.8 q0[10], r0
885+
; CHECK-NEXT: vmov.8 q0[11], r0
886+
; CHECK-NEXT: vmov.u8 r0, q1[12]
887+
; CHECK-NEXT: vmov.8 q0[12], r0
888+
; CHECK-NEXT: vmov.8 q0[13], r0
889+
; CHECK-NEXT: vmov.u8 r0, q1[14]
890+
; CHECK-NEXT: vmov.8 q0[14], r0
891+
; CHECK-NEXT: vmov.8 q0[15], r0
892+
; CHECK-NEXT: bx lr
893+
;
894+
; CHECKBE-LABEL: vmovn8_single_t:
895+
; CHECKBE: @ %bb.0: @ %entry
896+
; CHECKBE-NEXT: vrev64.8 q2, q0
897+
; CHECKBE-NEXT: vmov.u8 r0, q2[0]
898+
; CHECKBE-NEXT: vmov.8 q1[0], r0
899+
; CHECKBE-NEXT: vmov.8 q1[1], r0
900+
; CHECKBE-NEXT: vmov.u8 r0, q2[2]
901+
; CHECKBE-NEXT: vmov.8 q1[2], r0
902+
; CHECKBE-NEXT: vmov.8 q1[3], r0
903+
; CHECKBE-NEXT: vmov.u8 r0, q2[4]
904+
; CHECKBE-NEXT: vmov.8 q1[4], r0
905+
; CHECKBE-NEXT: vmov.8 q1[5], r0
906+
; CHECKBE-NEXT: vmov.u8 r0, q2[6]
907+
; CHECKBE-NEXT: vmov.8 q1[6], r0
908+
; CHECKBE-NEXT: vmov.8 q1[7], r0
909+
; CHECKBE-NEXT: vmov.u8 r0, q2[8]
910+
; CHECKBE-NEXT: vmov.8 q1[8], r0
911+
; CHECKBE-NEXT: vmov.8 q1[9], r0
912+
; CHECKBE-NEXT: vmov.u8 r0, q2[10]
913+
; CHECKBE-NEXT: vmov.8 q1[10], r0
914+
; CHECKBE-NEXT: vmov.8 q1[11], r0
915+
; CHECKBE-NEXT: vmov.u8 r0, q2[12]
916+
; CHECKBE-NEXT: vmov.8 q1[12], r0
917+
; CHECKBE-NEXT: vmov.8 q1[13], r0
918+
; CHECKBE-NEXT: vmov.u8 r0, q2[14]
919+
; CHECKBE-NEXT: vmov.8 q1[14], r0
920+
; CHECKBE-NEXT: vmov.8 q1[15], r0
921+
; CHECKBE-NEXT: vrev64.8 q0, q1
922+
; CHECKBE-NEXT: bx lr
923+
entry:
924+
%out = shufflevector <16 x i8> %src1, <16 x i8> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>
925+
ret <16 x i8> %out
926+
}

0 commit comments

Comments
 (0)