1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
3 define float @test_vrecpss_f32(float %a, float %b) {
4 ; CHECK: test_vrecpss_f32
5 ; CHECK: frecps {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
6 %1 = call float @llvm.aarch64.neon.vrecps.f32(float %a, float %b)
10 define double @test_vrecpsd_f64(double %a, double %b) {
11 ; CHECK: test_vrecpsd_f64
12 ; CHECK: frecps {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
13 %1 = call double @llvm.aarch64.neon.vrecps.f64(double %a, double %b)
17 declare float @llvm.aarch64.neon.vrecps.f32(float, float)
18 declare double @llvm.aarch64.neon.vrecps.f64(double, double)
20 define float @test_vrsqrtss_f32(float %a, float %b) {
21 ; CHECK: test_vrsqrtss_f32
22 ; CHECK: frsqrts {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
23 %1 = call float @llvm.aarch64.neon.vrsqrts.f32(float %a, float %b)
27 define double @test_vrsqrtsd_f64(double %a, double %b) {
28 ; CHECK: test_vrsqrtsd_f64
29 ; CHECK: frsqrts {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
30 %1 = call double @llvm.aarch64.neon.vrsqrts.f64(double %a, double %b)
34 declare float @llvm.aarch64.neon.vrsqrts.f32(float, float)
35 declare double @llvm.aarch64.neon.vrsqrts.f64(double, double)
37 define float @test_vrecpes_f32(float %a) {
38 ; CHECK: test_vrecpes_f32
39 ; CHECK: frecpe {{s[0-9]+}}, {{s[0-9]+}}
41 %0 = call float @llvm.aarch64.neon.vrecpe.f32(float %a)
45 define double @test_vrecped_f64(double %a) {
46 ; CHECK: test_vrecped_f64
47 ; CHECK: frecpe {{d[0-9]+}}, {{d[0-9]+}}
49 %0 = call double @llvm.aarch64.neon.vrecpe.f64(double %a)
53 declare float @llvm.aarch64.neon.vrecpe.f32(float)
54 declare double @llvm.aarch64.neon.vrecpe.f64(double)
56 define float @test_vrecpxs_f32(float %a) {
57 ; CHECK: test_vrecpxs_f32
58 ; CHECK: frecpx {{s[0-9]+}}, {{s[0-9]+}}
60 %0 = call float @llvm.aarch64.neon.vrecpx.f32(float %a)
64 define double @test_vrecpxd_f64(double %a) {
65 ; CHECK: test_vrecpxd_f64
66 ; CHECK: frecpx {{d[0-9]+}}, {{d[0-9]+}}
68 %0 = call double @llvm.aarch64.neon.vrecpx.f64(double %a)
72 declare float @llvm.aarch64.neon.vrecpx.f32(float)
73 declare double @llvm.aarch64.neon.vrecpx.f64(double)
75 define float @test_vrsqrtes_f32(float %a) {
76 ; CHECK: test_vrsqrtes_f32
77 ; CHECK: frsqrte {{s[0-9]+}}, {{s[0-9]+}}
79 %0 = call float @llvm.aarch64.neon.vrsqrte.f32(float %a)
83 define double @test_vrsqrted_f64(double %a) {
84 ; CHECK: test_vrsqrted_f64
85 ; CHECK: frsqrte {{d[0-9]+}}, {{d[0-9]+}}
87 %0 = call double @llvm.aarch64.neon.vrsqrte.f64(double %a)
91 declare float @llvm.aarch64.neon.vrsqrte.f32(float)
92 declare double @llvm.aarch64.neon.vrsqrte.f64(double)