AArch64/ARM64: enable more AArch64 tests on ARM64.
[oota-llvm.git] / test / CodeGen / AArch64 / neon-scalar-recip.ll
1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
2
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)
7   ret float %1
8 }
9
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)
14   ret double %1
15 }
16
17 declare float @llvm.aarch64.neon.vrecps.f32(float, float)
18 declare double @llvm.aarch64.neon.vrecps.f64(double, double)
19
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)
24   ret float %1
25 }
26
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)
31   ret double %1
32 }
33
34 declare float @llvm.aarch64.neon.vrsqrts.f32(float, float)
35 declare double @llvm.aarch64.neon.vrsqrts.f64(double, double)
36
37 define float @test_vrecpes_f32(float %a) {
38 ; CHECK: test_vrecpes_f32
39 ; CHECK: frecpe {{s[0-9]+}}, {{s[0-9]+}}
40 entry:
41   %0 = call float @llvm.aarch64.neon.vrecpe.f32(float %a)
42   ret float %0
43 }
44
45 define double @test_vrecped_f64(double %a) {
46 ; CHECK: test_vrecped_f64
47 ; CHECK: frecpe {{d[0-9]+}}, {{d[0-9]+}}
48 entry:
49   %0 = call double @llvm.aarch64.neon.vrecpe.f64(double %a)
50   ret double %0
51 }
52
53 declare float @llvm.aarch64.neon.vrecpe.f32(float)
54 declare double @llvm.aarch64.neon.vrecpe.f64(double)
55
56 define float @test_vrecpxs_f32(float %a) {
57 ; CHECK: test_vrecpxs_f32
58 ; CHECK: frecpx {{s[0-9]+}}, {{s[0-9]+}}
59 entry:
60   %0 = call float @llvm.aarch64.neon.vrecpx.f32(float %a)
61   ret float %0
62 }
63
64 define double @test_vrecpxd_f64(double %a) {
65 ; CHECK: test_vrecpxd_f64
66 ; CHECK: frecpx {{d[0-9]+}}, {{d[0-9]+}}
67 entry:
68   %0 = call double @llvm.aarch64.neon.vrecpx.f64(double %a)
69   ret double %0
70 }
71
72 declare float @llvm.aarch64.neon.vrecpx.f32(float)
73 declare double @llvm.aarch64.neon.vrecpx.f64(double)
74
75 define float @test_vrsqrtes_f32(float %a) {
76 ; CHECK: test_vrsqrtes_f32
77 ; CHECK: frsqrte {{s[0-9]+}}, {{s[0-9]+}}
78 entry:
79   %0 = call float @llvm.aarch64.neon.vrsqrte.f32(float %a)
80   ret float %0
81 }
82
83 define double @test_vrsqrted_f64(double %a) {
84 ; CHECK: test_vrsqrted_f64
85 ; CHECK: frsqrte {{d[0-9]+}}, {{d[0-9]+}}
86 entry:
87   %0 = call double @llvm.aarch64.neon.vrsqrte.f64(double %a)
88   ret double %0
89 }
90
91 declare float @llvm.aarch64.neon.vrsqrte.f32(float)
92 declare double @llvm.aarch64.neon.vrsqrte.f64(double)