@@ -288,6 +288,117 @@ entry:
288288 ret <2 x double > %0
289289}
290290
291+ define arm_aapcs_vfpcc <4 x float > @tan_float32_t (<4 x float > %src ) {
292+ ; CHECK-LABEL: tan_float32_t:
293+ ; CHECK: @ %bb.0: @ %entry
294+ ; CHECK-NEXT: .save {r4, r5, r7, lr}
295+ ; CHECK-NEXT: push {r4, r5, r7, lr}
296+ ; CHECK-NEXT: .vsave {d8, d9}
297+ ; CHECK-NEXT: vpush {d8, d9}
298+ ; CHECK-NEXT: vmov q4, q0
299+ ; CHECK-NEXT: vmov r0, r4, d9
300+ ; CHECK-NEXT: bl tanf
301+ ; CHECK-NEXT: mov r5, r0
302+ ; CHECK-NEXT: mov r0, r4
303+ ; CHECK-NEXT: bl tanf
304+ ; CHECK-NEXT: vmov r4, r1, d8
305+ ; CHECK-NEXT: vmov s19, r0
306+ ; CHECK-NEXT: vmov s18, r5
307+ ; CHECK-NEXT: mov r0, r1
308+ ; CHECK-NEXT: bl tanf
309+ ; CHECK-NEXT: vmov s17, r0
310+ ; CHECK-NEXT: mov r0, r4
311+ ; CHECK-NEXT: bl tanf
312+ ; CHECK-NEXT: vmov s16, r0
313+ ; CHECK-NEXT: vmov q0, q4
314+ ; CHECK-NEXT: vpop {d8, d9}
315+ ; CHECK-NEXT: pop {r4, r5, r7, pc}
316+ entry:
317+ %0 = call fast <4 x float > @llvm.tan.v4f32 (<4 x float > %src )
318+ ret <4 x float > %0
319+ }
320+
321+ define arm_aapcs_vfpcc <8 x half > @tan_float16_t (<8 x half > %src ) {
322+ ; CHECK-LABEL: tan_float16_t:
323+ ; CHECK: @ %bb.0: @ %entry
324+ ; CHECK-NEXT: .save {r7, lr}
325+ ; CHECK-NEXT: push {r7, lr}
326+ ; CHECK-NEXT: .vsave {d8, d9, d10, d11}
327+ ; CHECK-NEXT: vpush {d8, d9, d10, d11}
328+ ; CHECK-NEXT: vmov q4, q0
329+ ; CHECK-NEXT: vcvtb.f32.f16 s0, s16
330+ ; CHECK-NEXT: vmov r0, s0
331+ ; CHECK-NEXT: bl tanf
332+ ; CHECK-NEXT: vcvtt.f32.f16 s0, s16
333+ ; CHECK-NEXT: vmov s16, r0
334+ ; CHECK-NEXT: vmov r1, s0
335+ ; CHECK-NEXT: mov r0, r1
336+ ; CHECK-NEXT: bl tanf
337+ ; CHECK-NEXT: vmov s0, r0
338+ ; CHECK-NEXT: vcvtb.f16.f32 s20, s16
339+ ; CHECK-NEXT: vcvtt.f16.f32 s20, s0
340+ ; CHECK-NEXT: vcvtb.f32.f16 s0, s17
341+ ; CHECK-NEXT: vmov r0, s0
342+ ; CHECK-NEXT: bl tanf
343+ ; CHECK-NEXT: vmov s0, r0
344+ ; CHECK-NEXT: vcvtb.f16.f32 s21, s0
345+ ; CHECK-NEXT: vcvtt.f32.f16 s0, s17
346+ ; CHECK-NEXT: vmov r0, s0
347+ ; CHECK-NEXT: bl tanf
348+ ; CHECK-NEXT: vmov s0, r0
349+ ; CHECK-NEXT: vcvtt.f16.f32 s21, s0
350+ ; CHECK-NEXT: vcvtb.f32.f16 s0, s18
351+ ; CHECK-NEXT: vmov r0, s0
352+ ; CHECK-NEXT: bl tanf
353+ ; CHECK-NEXT: vmov s0, r0
354+ ; CHECK-NEXT: vcvtb.f16.f32 s22, s0
355+ ; CHECK-NEXT: vcvtt.f32.f16 s0, s18
356+ ; CHECK-NEXT: vmov r0, s0
357+ ; CHECK-NEXT: bl tanf
358+ ; CHECK-NEXT: vmov s0, r0
359+ ; CHECK-NEXT: vcvtt.f16.f32 s22, s0
360+ ; CHECK-NEXT: vcvtb.f32.f16 s0, s19
361+ ; CHECK-NEXT: vmov r0, s0
362+ ; CHECK-NEXT: bl tanf
363+ ; CHECK-NEXT: vmov s0, r0
364+ ; CHECK-NEXT: vcvtb.f16.f32 s23, s0
365+ ; CHECK-NEXT: vcvtt.f32.f16 s0, s19
366+ ; CHECK-NEXT: vmov r0, s0
367+ ; CHECK-NEXT: bl tanf
368+ ; CHECK-NEXT: vmov s0, r0
369+ ; CHECK-NEXT: vcvtt.f16.f32 s23, s0
370+ ; CHECK-NEXT: vmov q0, q5
371+ ; CHECK-NEXT: vpop {d8, d9, d10, d11}
372+ ; CHECK-NEXT: pop {r7, pc}
373+ entry:
374+ %0 = call fast <8 x half > @llvm.tan.v8f16 (<8 x half > %src )
375+ ret <8 x half > %0
376+ }
377+
378+ define arm_aapcs_vfpcc <2 x double > @tan_float64_t (<2 x double > %src ) {
379+ ; CHECK-LABEL: tan_float64_t:
380+ ; CHECK: @ %bb.0: @ %entry
381+ ; CHECK-NEXT: .save {r7, lr}
382+ ; CHECK-NEXT: push {r7, lr}
383+ ; CHECK-NEXT: .vsave {d8, d9}
384+ ; CHECK-NEXT: vpush {d8, d9}
385+ ; CHECK-NEXT: vmov q4, q0
386+ ; CHECK-NEXT: vmov r0, r1, d9
387+ ; CHECK-NEXT: bl tan
388+ ; CHECK-NEXT: vmov r2, r3, d8
389+ ; CHECK-NEXT: vmov d9, r0, r1
390+ ; CHECK-NEXT: mov r0, r2
391+ ; CHECK-NEXT: mov r1, r3
392+ ; CHECK-NEXT: bl tan
393+ ; CHECK-NEXT: vmov d8, r0, r1
394+ ; CHECK-NEXT: vmov q0, q4
395+ ; CHECK-NEXT: vpop {d8, d9}
396+ ; CHECK-NEXT: pop {r7, pc}
397+ entry:
398+ %0 = call fast <2 x double > @llvm.tan.v2f64 (<2 x double > %src )
399+ ret <2 x double > %0
400+ }
401+
291402define arm_aapcs_vfpcc <4 x float > @exp_float32_t (<4 x float > %src ) {
292403; CHECK-LABEL: exp_float32_t:
293404; CHECK: @ %bb.0: @ %entry
0 commit comments