Skip to content

Commit 9f82f6d

Browse files
committed
[ARM] Add a number of extra vmovimm tests for BE. NFC
1 parent 6f618a7 commit 9f82f6d

File tree

2 files changed

+900
-18
lines changed

2 files changed

+900
-18
lines changed

llvm/test/CodeGen/ARM/big-endian-vmov.ll

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,103 @@ define arm_aapcs_vfpcc <1 x i64> @vmov_i64_b() {
134134
; CHECK-NEXT: bx lr
135135
ret <1 x i64> <i64 72056498804490495>
136136
}
137+
138+
define arm_aapcs_vfpcc <2 x i64> @vmov_v2i64_b() {
139+
; CHECK-LABEL: vmov_v2i64_b:
140+
; CHECK: @ %bb.0:
141+
; CHECK-NEXT: vmov.i64 q0, #0xffff00ff0000ff
142+
; CHECK-NEXT: bx lr
143+
ret <2 x i64> <i64 72056498804490495, i64 72056498804490495>
144+
}
145+
146+
define arm_aapcs_vfpcc <4 x i32> @vmov_v4i32_b() {
147+
; CHECK-LE-LABEL: vmov_v4i32_b:
148+
; CHECK-LE: @ %bb.0:
149+
; CHECK-LE-NEXT: vmov.i64 q0, #0xff0000ff00ffff00
150+
; CHECK-LE-NEXT: bx lr
151+
;
152+
; CHECK-BE-LABEL: vmov_v4i32_b:
153+
; CHECK-BE: @ %bb.0:
154+
; CHECK-BE-NEXT: vmov.i64 q0, #0xffff00ff0000ff
155+
; CHECK-BE-NEXT: bx lr
156+
ret <4 x i32> <i32 u0xffff00, i32 u0xff0000ff, i32 u0xffff00, i32 u0xff0000ff>
157+
}
158+
159+
define arm_aapcs_vfpcc <2 x i64> @and_v2i64_b(<2 x i64> %a) {
160+
; CHECK-LABEL: and_v2i64_b:
161+
; CHECK: @ %bb.0:
162+
; CHECK-NEXT: vmov.i64 q8, #0xffff00ff0000ff
163+
; CHECK-NEXT: vand q0, q0, q8
164+
; CHECK-NEXT: bx lr
165+
%b = and <2 x i64> %a, <i64 72056498804490495, i64 72056498804490495>
166+
ret <2 x i64> %b
167+
}
168+
169+
define arm_aapcs_vfpcc <4 x i32> @and_v4i32_b(<4 x i32> %a) {
170+
; CHECK-LE-LABEL: and_v4i32_b:
171+
; CHECK-LE: @ %bb.0:
172+
; CHECK-LE-NEXT: vmov.i64 q8, #0xff0000ff00ffff00
173+
; CHECK-LE-NEXT: vand q0, q0, q8
174+
; CHECK-LE-NEXT: bx lr
175+
;
176+
; CHECK-BE-LABEL: and_v4i32_b:
177+
; CHECK-BE: @ %bb.0:
178+
; CHECK-BE-NEXT: vmov.i64 q8, #0xffff00ff0000ff
179+
; CHECK-BE-NEXT: vrev64.32 q9, q0
180+
; CHECK-BE-NEXT: vrev64.32 q8, q8
181+
; CHECK-BE-NEXT: vand q8, q9, q8
182+
; CHECK-BE-NEXT: vrev64.32 q0, q8
183+
; CHECK-BE-NEXT: bx lr
184+
%b = and <4 x i32> %a, <i32 u0xffff00, i32 u0xff0000ff, i32 u0xffff00, i32 u0xff0000ff>
185+
ret <4 x i32> %b
186+
}
187+
188+
define arm_aapcs_vfpcc <8 x i16> @vmvn_v16i8_m1() {
189+
; CHECK-LE-LABEL: vmvn_v16i8_m1:
190+
; CHECK-LE: @ %bb.0:
191+
; CHECK-LE-NEXT: vmvn.i32 q0, #0x10000
192+
; CHECK-LE-NEXT: bx lr
193+
;
194+
; CHECK-BE-LABEL: vmvn_v16i8_m1:
195+
; CHECK-BE: @ %bb.0:
196+
; CHECK-BE-NEXT: vmvn.i32 q0, #0x1
197+
; CHECK-BE-NEXT: bx lr
198+
ret <8 x i16> <i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534>
199+
}
200+
201+
; FIXME: This is incorrect for BE
202+
define arm_aapcs_vfpcc <8 x i16> @and_v8i16_m1(<8 x i16> %a) {
203+
; CHECK-LE-LABEL: and_v8i16_m1:
204+
; CHECK-LE: @ %bb.0:
205+
; CHECK-LE-NEXT: vbic.i32 q0, #0x10000
206+
; CHECK-LE-NEXT: bx lr
207+
;
208+
; CHECK-BE-LABEL: and_v8i16_m1:
209+
; CHECK-BE: @ %bb.0:
210+
; CHECK-BE-NEXT: vrev64.32 q8, q0
211+
; CHECK-BE-NEXT: vbic.i32 q8, #0x10000
212+
; CHECK-BE-NEXT: vrev64.32 q0, q8
213+
; CHECK-BE-NEXT: bx lr
214+
%b = and <8 x i16> %a, <i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534>
215+
ret <8 x i16> %b
216+
}
217+
218+
; FIXME: This is incorrect for BE
219+
define arm_aapcs_vfpcc <8 x i16> @xor_v8i16_m1(<8 x i16> %a) {
220+
; CHECK-LE-LABEL: xor_v8i16_m1:
221+
; CHECK-LE: @ %bb.0:
222+
; CHECK-LE-NEXT: vmvn.i32 q8, #0x10000
223+
; CHECK-LE-NEXT: veor q0, q0, q8
224+
; CHECK-LE-NEXT: bx lr
225+
;
226+
; CHECK-BE-LABEL: xor_v8i16_m1:
227+
; CHECK-BE: @ %bb.0:
228+
; CHECK-BE-NEXT: vmvn.i32 q8, #0x10000
229+
; CHECK-BE-NEXT: vrev64.16 q9, q0
230+
; CHECK-BE-NEXT: vrev32.16 q8, q8
231+
; CHECK-BE-NEXT: veor q8, q9, q8
232+
; CHECK-BE-NEXT: vrev64.16 q0, q8
233+
; CHECK-BE-NEXT: bx lr
234+
%b = xor <8 x i16> %a, <i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534>
235+
ret <8 x i16> %b
236+
}

0 commit comments

Comments
 (0)