Skip to content

Commit 973ef39

Browse files
authored
AArch64: Add more 3 element vector sincos tests (llvm#165816)
1 parent dc06d69 commit 973ef39

File tree

1 file changed

+195
-0
lines changed

1 file changed

+195
-0
lines changed

llvm/test/CodeGen/AArch64/llvm.sincos.ll

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,133 @@ define { <2 x half>, <2 x half> } @test_sincos_v2f16(<2 x half> %a) nounwind {
215215
ret { <2 x half>, <2 x half> } %result
216216
}
217217

218+
define { <3 x half>, <3 x half> } @test_sincos_v3f16(<3 x half> %a) nounwind {
219+
; CHECK-LABEL: test_sincos_v3f16:
220+
; CHECK: // %bb.0:
221+
; CHECK-NEXT: sub sp, sp, #64
222+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
223+
; CHECK-NEXT: mov h1, v0.h[1]
224+
; CHECK-NEXT: str q0, [sp] // 16-byte Folded Spill
225+
; CHECK-NEXT: add x0, sp, #36
226+
; CHECK-NEXT: add x1, sp, #32
227+
; CHECK-NEXT: str x30, [sp, #48] // 8-byte Folded Spill
228+
; CHECK-NEXT: fcvt s0, h1
229+
; CHECK-NEXT: bl sincosf
230+
; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload
231+
; CHECK-NEXT: add x0, sp, #28
232+
; CHECK-NEXT: add x1, sp, #24
233+
; CHECK-NEXT: fcvt s0, h0
234+
; CHECK-NEXT: bl sincosf
235+
; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload
236+
; CHECK-NEXT: add x0, sp, #44
237+
; CHECK-NEXT: add x1, sp, #40
238+
; CHECK-NEXT: mov h0, v0.h[2]
239+
; CHECK-NEXT: fcvt s0, h0
240+
; CHECK-NEXT: bl sincosf
241+
; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload
242+
; CHECK-NEXT: add x0, sp, #60
243+
; CHECK-NEXT: add x1, sp, #56
244+
; CHECK-NEXT: mov h0, v0.h[3]
245+
; CHECK-NEXT: fcvt s0, h0
246+
; CHECK-NEXT: bl sincosf
247+
; CHECK-NEXT: ldp s2, s0, [sp, #32]
248+
; CHECK-NEXT: ldr x30, [sp, #48] // 8-byte Folded Reload
249+
; CHECK-NEXT: ldp s3, s1, [sp, #24]
250+
; CHECK-NEXT: fcvt h4, s0
251+
; CHECK-NEXT: fcvt h2, s2
252+
; CHECK-NEXT: fcvt h0, s1
253+
; CHECK-NEXT: fcvt h1, s3
254+
; CHECK-NEXT: ldp s5, s3, [sp, #40]
255+
; CHECK-NEXT: fcvt h3, s3
256+
; CHECK-NEXT: mov v0.h[1], v4.h[0]
257+
; CHECK-NEXT: fcvt h4, s5
258+
; CHECK-NEXT: mov v1.h[1], v2.h[0]
259+
; CHECK-NEXT: ldp s5, s2, [sp, #56]
260+
; CHECK-NEXT: mov v0.h[2], v3.h[0]
261+
; CHECK-NEXT: fcvt h2, s2
262+
; CHECK-NEXT: fcvt h3, s5
263+
; CHECK-NEXT: mov v1.h[2], v4.h[0]
264+
; CHECK-NEXT: mov v0.h[3], v2.h[0]
265+
; CHECK-NEXT: mov v1.h[3], v3.h[0]
266+
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
267+
; CHECK-NEXT: // kill: def $d1 killed $d1 killed $q1
268+
; CHECK-NEXT: add sp, sp, #64
269+
; CHECK-NEXT: ret
270+
;
271+
; NO-LIBCALL-LABEL: test_sincos_v3f16:
272+
; NO-LIBCALL: // %bb.0:
273+
; NO-LIBCALL-NEXT: sub sp, sp, #80
274+
; NO-LIBCALL-NEXT: // kill: def $d0 killed $d0 def $q0
275+
; NO-LIBCALL-NEXT: mov h1, v0.h[1]
276+
; NO-LIBCALL-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill
277+
; NO-LIBCALL-NEXT: str q0, [sp] // 16-byte Folded Spill
278+
; NO-LIBCALL-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill
279+
; NO-LIBCALL-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
280+
; NO-LIBCALL-NEXT: fcvt s8, h1
281+
; NO-LIBCALL-NEXT: fmov s0, s8
282+
; NO-LIBCALL-NEXT: bl sinf
283+
; NO-LIBCALL-NEXT: ldr q1, [sp] // 16-byte Folded Reload
284+
; NO-LIBCALL-NEXT: fcvt h0, s0
285+
; NO-LIBCALL-NEXT: fcvt s9, h1
286+
; NO-LIBCALL-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
287+
; NO-LIBCALL-NEXT: fmov s0, s9
288+
; NO-LIBCALL-NEXT: bl sinf
289+
; NO-LIBCALL-NEXT: ldr q1, [sp] // 16-byte Folded Reload
290+
; NO-LIBCALL-NEXT: fcvt h0, s0
291+
; NO-LIBCALL-NEXT: mov h1, v1.h[2]
292+
; NO-LIBCALL-NEXT: fcvt s10, h1
293+
; NO-LIBCALL-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
294+
; NO-LIBCALL-NEXT: mov v0.h[1], v1.h[0]
295+
; NO-LIBCALL-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
296+
; NO-LIBCALL-NEXT: fmov s0, s10
297+
; NO-LIBCALL-NEXT: bl sinf
298+
; NO-LIBCALL-NEXT: ldr q1, [sp] // 16-byte Folded Reload
299+
; NO-LIBCALL-NEXT: fcvt h0, s0
300+
; NO-LIBCALL-NEXT: mov h1, v1.h[3]
301+
; NO-LIBCALL-NEXT: fcvt s11, h1
302+
; NO-LIBCALL-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
303+
; NO-LIBCALL-NEXT: mov v1.h[2], v0.h[0]
304+
; NO-LIBCALL-NEXT: fmov s0, s11
305+
; NO-LIBCALL-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
306+
; NO-LIBCALL-NEXT: bl sinf
307+
; NO-LIBCALL-NEXT: fcvt h0, s0
308+
; NO-LIBCALL-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
309+
; NO-LIBCALL-NEXT: mov v1.h[3], v0.h[0]
310+
; NO-LIBCALL-NEXT: fmov s0, s8
311+
; NO-LIBCALL-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
312+
; NO-LIBCALL-NEXT: bl cosf
313+
; NO-LIBCALL-NEXT: fcvt h0, s0
314+
; NO-LIBCALL-NEXT: str q0, [sp] // 16-byte Folded Spill
315+
; NO-LIBCALL-NEXT: fmov s0, s9
316+
; NO-LIBCALL-NEXT: bl cosf
317+
; NO-LIBCALL-NEXT: fcvt h0, s0
318+
; NO-LIBCALL-NEXT: ldr q1, [sp] // 16-byte Folded Reload
319+
; NO-LIBCALL-NEXT: mov v0.h[1], v1.h[0]
320+
; NO-LIBCALL-NEXT: str q0, [sp] // 16-byte Folded Spill
321+
; NO-LIBCALL-NEXT: fmov s0, s10
322+
; NO-LIBCALL-NEXT: bl cosf
323+
; NO-LIBCALL-NEXT: fcvt h0, s0
324+
; NO-LIBCALL-NEXT: ldr q1, [sp] // 16-byte Folded Reload
325+
; NO-LIBCALL-NEXT: mov v1.h[2], v0.h[0]
326+
; NO-LIBCALL-NEXT: fmov s0, s11
327+
; NO-LIBCALL-NEXT: str q1, [sp] // 16-byte Folded Spill
328+
; NO-LIBCALL-NEXT: bl cosf
329+
; NO-LIBCALL-NEXT: fmov s1, s0
330+
; NO-LIBCALL-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload
331+
; NO-LIBCALL-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload
332+
; NO-LIBCALL-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
333+
; NO-LIBCALL-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload
334+
; NO-LIBCALL-NEXT: // kill: def $d0 killed $d0 killed $q0
335+
; NO-LIBCALL-NEXT: fcvt h2, s1
336+
; NO-LIBCALL-NEXT: ldr q1, [sp] // 16-byte Folded Reload
337+
; NO-LIBCALL-NEXT: mov v1.h[3], v2.h[0]
338+
; NO-LIBCALL-NEXT: // kill: def $d1 killed $d1 killed $q1
339+
; NO-LIBCALL-NEXT: add sp, sp, #80
340+
; NO-LIBCALL-NEXT: ret
341+
%result = call { <3 x half>, <3 x half> } @llvm.sincos.v3f16(<3 x half> %a)
342+
ret { <3 x half>, <3 x half> } %result
343+
}
344+
218345
define { float, float } @test_sincos_f32(float %a) nounwind {
219346
; CHECK-LABEL: test_sincos_f32:
220347
; CHECK: // %bb.0:
@@ -493,3 +620,71 @@ define { <2 x double>, <2 x double> } @test_sincos_v2f64(<2 x double> %a) nounwi
493620
%result = call { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> %a)
494621
ret { <2 x double>, <2 x double> } %result
495622
}
623+
624+
define { <3 x double>, <3 x double> } @test_sincos_v3f64(<3 x double> %a) nounwind {
625+
; CHECK-LABEL: test_sincos_v3f64:
626+
; CHECK: // %bb.0:
627+
; CHECK-NEXT: sub sp, sp, #80
628+
; CHECK-NEXT: add x0, sp, #16
629+
; CHECK-NEXT: add x1, sp, #8
630+
; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill
631+
; CHECK-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
632+
; CHECK-NEXT: fmov d8, d2
633+
; CHECK-NEXT: fmov d9, d1
634+
; CHECK-NEXT: bl sincos
635+
; CHECK-NEXT: fmov d0, d9
636+
; CHECK-NEXT: add x0, sp, #32
637+
; CHECK-NEXT: add x1, sp, #24
638+
; CHECK-NEXT: bl sincos
639+
; CHECK-NEXT: fmov d0, d8
640+
; CHECK-NEXT: add x0, sp, #72
641+
; CHECK-NEXT: add x1, sp, #40
642+
; CHECK-NEXT: bl sincos
643+
; CHECK-NEXT: ldp d3, d0, [sp, #8]
644+
; CHECK-NEXT: ldr d2, [sp, #72]
645+
; CHECK-NEXT: ldp d4, d1, [sp, #24]
646+
; CHECK-NEXT: ldr d5, [sp, #40]
647+
; CHECK-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload
648+
; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload
649+
; CHECK-NEXT: add sp, sp, #80
650+
; CHECK-NEXT: ret
651+
;
652+
; NO-LIBCALL-LABEL: test_sincos_v3f64:
653+
; NO-LIBCALL: // %bb.0:
654+
; NO-LIBCALL-NEXT: stp d13, d12, [sp, #-64]! // 16-byte Folded Spill
655+
; NO-LIBCALL-NEXT: stp d11, d10, [sp, #16] // 16-byte Folded Spill
656+
; NO-LIBCALL-NEXT: fmov d10, d0
657+
; NO-LIBCALL-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill
658+
; NO-LIBCALL-NEXT: fmov d8, d2
659+
; NO-LIBCALL-NEXT: fmov d9, d1
660+
; NO-LIBCALL-NEXT: str x30, [sp, #48] // 8-byte Folded Spill
661+
; NO-LIBCALL-NEXT: bl sin
662+
; NO-LIBCALL-NEXT: fmov d11, d0
663+
; NO-LIBCALL-NEXT: fmov d0, d9
664+
; NO-LIBCALL-NEXT: bl sin
665+
; NO-LIBCALL-NEXT: fmov d12, d0
666+
; NO-LIBCALL-NEXT: fmov d0, d8
667+
; NO-LIBCALL-NEXT: bl sin
668+
; NO-LIBCALL-NEXT: fmov d13, d0
669+
; NO-LIBCALL-NEXT: fmov d0, d10
670+
; NO-LIBCALL-NEXT: bl cos
671+
; NO-LIBCALL-NEXT: fmov d10, d0
672+
; NO-LIBCALL-NEXT: fmov d0, d9
673+
; NO-LIBCALL-NEXT: bl cos
674+
; NO-LIBCALL-NEXT: fmov d9, d0
675+
; NO-LIBCALL-NEXT: fmov d0, d8
676+
; NO-LIBCALL-NEXT: bl cos
677+
; NO-LIBCALL-NEXT: fmov d5, d0
678+
; NO-LIBCALL-NEXT: fmov d0, d11
679+
; NO-LIBCALL-NEXT: ldr x30, [sp, #48] // 8-byte Folded Reload
680+
; NO-LIBCALL-NEXT: fmov d3, d10
681+
; NO-LIBCALL-NEXT: fmov d4, d9
682+
; NO-LIBCALL-NEXT: fmov d1, d12
683+
; NO-LIBCALL-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload
684+
; NO-LIBCALL-NEXT: fmov d2, d13
685+
; NO-LIBCALL-NEXT: ldp d11, d10, [sp, #16] // 16-byte Folded Reload
686+
; NO-LIBCALL-NEXT: ldp d13, d12, [sp], #64 // 16-byte Folded Reload
687+
; NO-LIBCALL-NEXT: ret
688+
%result = call { <3 x double>, <3 x double> } @llvm.sincos.v3f64(<3 x double> %a)
689+
ret { <3 x double>, <3 x double> } %result
690+
}

0 commit comments

Comments
 (0)