1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
2 ; duplicates arm64 tests in vsqrt.ll
4 define float @test_vrecpss_f32(float %a, float %b) {
5 ; CHECK: test_vrecpss_f32
6 ; CHECK: frecps {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
7 %1 = call float @llvm.aarch64.neon.vrecps.f32(float %a, float %b)
11 define double @test_vrecpsd_f64(double %a, double %b) {
12 ; CHECK: test_vrecpsd_f64
13 ; CHECK: frecps {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
14 %1 = call double @llvm.aarch64.neon.vrecps.f64(double %a, double %b)
18 declare float @llvm.aarch64.neon.vrecps.f32(float, float)
19 declare double @llvm.aarch64.neon.vrecps.f64(double, double)
21 define float @test_vrsqrtss_f32(float %a, float %b) {
22 ; CHECK: test_vrsqrtss_f32
23 ; CHECK: frsqrts {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
24 %1 = call float @llvm.aarch64.neon.vrsqrts.f32(float %a, float %b)
28 define double @test_vrsqrtsd_f64(double %a, double %b) {
29 ; CHECK: test_vrsqrtsd_f64
30 ; CHECK: frsqrts {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
31 %1 = call double @llvm.aarch64.neon.vrsqrts.f64(double %a, double %b)
35 declare float @llvm.aarch64.neon.vrsqrts.f32(float, float)
36 declare double @llvm.aarch64.neon.vrsqrts.f64(double, double)
38 define float @test_vrecpes_f32(float %a) {
39 ; CHECK: test_vrecpes_f32
40 ; CHECK: frecpe {{s[0-9]+}}, {{s[0-9]+}}
42 %0 = call float @llvm.aarch64.neon.vrecpe.f32(float %a)
46 define double @test_vrecped_f64(double %a) {
47 ; CHECK: test_vrecped_f64
48 ; CHECK: frecpe {{d[0-9]+}}, {{d[0-9]+}}
50 %0 = call double @llvm.aarch64.neon.vrecpe.f64(double %a)
54 declare float @llvm.aarch64.neon.vrecpe.f32(float)
55 declare double @llvm.aarch64.neon.vrecpe.f64(double)
57 define float @test_vrecpxs_f32(float %a) {
58 ; CHECK: test_vrecpxs_f32
59 ; CHECK: frecpx {{s[0-9]+}}, {{s[0-9]+}}
61 %0 = call float @llvm.aarch64.neon.vrecpx.f32(float %a)
65 define double @test_vrecpxd_f64(double %a) {
66 ; CHECK: test_vrecpxd_f64
67 ; CHECK: frecpx {{d[0-9]+}}, {{d[0-9]+}}
69 %0 = call double @llvm.aarch64.neon.vrecpx.f64(double %a)
73 declare float @llvm.aarch64.neon.vrecpx.f32(float)
74 declare double @llvm.aarch64.neon.vrecpx.f64(double)
76 define float @test_vrsqrtes_f32(float %a) {
77 ; CHECK: test_vrsqrtes_f32
78 ; CHECK: frsqrte {{s[0-9]+}}, {{s[0-9]+}}
80 %0 = call float @llvm.aarch64.neon.vrsqrte.f32(float %a)
84 define double @test_vrsqrted_f64(double %a) {
85 ; CHECK: test_vrsqrted_f64
86 ; CHECK: frsqrte {{d[0-9]+}}, {{d[0-9]+}}
88 %0 = call double @llvm.aarch64.neon.vrsqrte.f64(double %a)
92 declare float @llvm.aarch64.neon.vrsqrte.f32(float)
93 declare double @llvm.aarch64.neon.vrsqrte.f64(double)