blob: 280ef75b891877c73acba1d7245905b3318c52c0 [file] [log] [blame]
Evandro Menezeseff2bd92016-10-24 16:14:58 +00001; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -mattr=+neon | FileCheck %s
2
3define float @frecp0(float %x) #0 {
4 %div = fdiv fast float 1.0, %x
5 ret float %div
6
7; CHECK-LABEL: frecp0:
8; CHECK-NEXT: BB#0
9; CHECK-NEXT: fmov
10; CHECK-NEXT: fdiv
11}
12
13define float @frecp1(float %x) #1 {
14 %div = fdiv fast float 1.0, %x
15 ret float %div
16
17; CHECK-LABEL: frecp1:
18; CHECK-NEXT: BB#0
19; CHECK-NEXT: frecpe
20; CHECK-NEXT: fmov
21}
22
23define <2 x float> @f2recp0(<2 x float> %x) #0 {
24 %div = fdiv fast <2 x float> <float 1.0, float 1.0>, %x
25 ret <2 x float> %div
26
27; CHECK-LABEL: f2recp0:
28; CHECK-NEXT: BB#0
29; CHECK-NEXT: fmov
30; CHECK-NEXT: fdiv
31}
32
33define <2 x float> @f2recp1(<2 x float> %x) #1 {
34 %div = fdiv fast <2 x float> <float 1.0, float 1.0>, %x
35 ret <2 x float> %div
36
37; CHECK-LABEL: f2recp1:
38; CHECK-NEXT: BB#0
39; CHECK-NEXT: fmov
40; CHECK-NEXT: frecpe
41}
42
43define <4 x float> @f4recp0(<4 x float> %x) #0 {
44 %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x
45 ret <4 x float> %div
46
47; CHECK-LABEL: f4recp0:
48; CHECK-NEXT: BB#0
49; CHECK-NEXT: fmov
50; CHECK-NEXT: fdiv
51}
52
53define <4 x float> @f4recp1(<4 x float> %x) #1 {
54 %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x
55 ret <4 x float> %div
56
57; CHECK-LABEL: f4recp1:
58; CHECK-NEXT: BB#0
59; CHECK-NEXT: fmov
60; CHECK-NEXT: frecpe
61}
62
63define <8 x float> @f8recp0(<8 x float> %x) #0 {
64 %div = fdiv fast <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, %x
65 ret <8 x float> %div
66
67; CHECK-LABEL: f8recp0:
68; CHECK-NEXT: BB#0
69; CHECK-NEXT: fmov
70; CHECK-NEXT: fdiv
71; CHECK-NEXT: fdiv
72}
73
74define <8 x float> @f8recp1(<8 x float> %x) #1 {
75 %div = fdiv fast <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, %x
76 ret <8 x float> %div
77
78; CHECK-LABEL: f8recp1:
79; CHECK-NEXT: BB#0
80; CHECK-NEXT: fmov
81; CHECK-NEXT: frecpe
82; CHECK: frecpe
83}
84
85define double @drecp0(double %x) #0 {
86 %div = fdiv fast double 1.0, %x
87 ret double %div
88
89; CHECK-LABEL: drecp0:
90; CHECK-NEXT: BB#0
91; CHECK-NEXT: fmov
92; CHECK-NEXT: fdiv
93}
94
95define double @drecp1(double %x) #1 {
96 %div = fdiv fast double 1.0, %x
97 ret double %div
98
99; CHECK-LABEL: drecp1:
100; CHECK-NEXT: BB#0
101; CHECK-NEXT: frecpe
102; CHECK-NEXT: fmov
103}
104
105define <2 x double> @d2recp0(<2 x double> %x) #0 {
106 %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %x
107 ret <2 x double> %div
108
109; CHECK-LABEL: d2recp0:
110; CHECK-NEXT: BB#0
111; CHECK-NEXT: fmov
112; CHECK-NEXT: fdiv
113}
114
115define <2 x double> @d2recp1(<2 x double> %x) #1 {
116 %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %x
117 ret <2 x double> %div
118
119; CHECK-LABEL: d2recp1:
120; CHECK-NEXT: BB#0
121; CHECK-NEXT: fmov
122; CHECK-NEXT: frecpe
123}
124
125define <4 x double> @d4recp0(<4 x double> %x) #0 {
126 %div = fdiv fast <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, %x
127 ret <4 x double> %div
128
129; CHECK-LABEL: d4recp0:
130; CHECK-NEXT: BB#0
131; CHECK-NEXT: fmov
132; CHECK-NEXT: fdiv
133; CHECK-NEXT: fdiv
134}
135
136define <4 x double> @d4recp1(<4 x double> %x) #1 {
137 %div = fdiv fast <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, %x
138 ret <4 x double> %div
139
140; CHECK-LABEL: d4recp1:
141; CHECK-NEXT: BB#0
142; CHECK-NEXT: fmov
143; CHECK-NEXT: frecpe
144; CHECK: frecpe
145}
146
147attributes #0 = { nounwind "unsafe-fp-math"="true" }
148attributes #1 = { nounwind "unsafe-fp-math"="true" "reciprocal-estimates"="div,vec-div" }