blob: 38e0fb360e492a800ab8d70a8df0d18c5006d454 [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
Evandro Menezes9fc54822016-11-14 23:29:01 +000019; CHECK-NEXT: frecpe [[R:s[0-7]]]
20; CHECK-NEXT: frecps {{s[0-7](, s[0-7])?}}, [[R]]
Evandro Menezeseff2bd92016-10-24 16:14:58 +000021}
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
Evandro Menezes9fc54822016-11-14 23:29:01 +000039; CHECK-NEXT: frecpe [[R:v[0-7]\.2s]]
40; CHECK-NEXT: frecps {{v[0-7]\.2s(, v[0-7].2s)?}}, [[R]]
Evandro Menezeseff2bd92016-10-24 16:14:58 +000041}
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
Evandro Menezes9fc54822016-11-14 23:29:01 +000059; CHECK-NEXT: frecpe [[R:v[0-7]\.4s]]
60; CHECK-NEXT: frecps {{v[0-7]\.4s(, v[0-7].4s)?}}, [[R]]
Evandro Menezeseff2bd92016-10-24 16:14:58 +000061}
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
Evandro Menezes9fc54822016-11-14 23:29:01 +000080; CHECK-NEXT: frecpe [[RA:v[0-7]\.4s]]
81; CHECK-NEXT: frecpe [[RB:v[0-7]\.4s]]
82; CHECK-NEXT: frecps {{v[0-7]\.4s(, v[0-7].4s)?}}, [[RA]]
83; CHECK: frecps {{v[0-7]\.4s(, v[0-7].4s)?}}, [[RB]]
Evandro Menezeseff2bd92016-10-24 16:14:58 +000084}
85
86define double @drecp0(double %x) #0 {
87 %div = fdiv fast double 1.0, %x
88 ret double %div
89
90; CHECK-LABEL: drecp0:
91; CHECK-NEXT: BB#0
92; CHECK-NEXT: fmov
93; CHECK-NEXT: fdiv
94}
95
96define double @drecp1(double %x) #1 {
97 %div = fdiv fast double 1.0, %x
98 ret double %div
99
100; CHECK-LABEL: drecp1:
101; CHECK-NEXT: BB#0
Evandro Menezes9fc54822016-11-14 23:29:01 +0000102; CHECK-NEXT: frecpe [[R:d[0-7]]]
103; CHECK-NEXT: frecps {{d[0-7](, d[0-7])?}}, [[R]]
Evandro Menezeseff2bd92016-10-24 16:14:58 +0000104}
105
106define <2 x double> @d2recp0(<2 x double> %x) #0 {
107 %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %x
108 ret <2 x double> %div
109
110; CHECK-LABEL: d2recp0:
111; CHECK-NEXT: BB#0
112; CHECK-NEXT: fmov
113; CHECK-NEXT: fdiv
114}
115
116define <2 x double> @d2recp1(<2 x double> %x) #1 {
117 %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %x
118 ret <2 x double> %div
119
120; CHECK-LABEL: d2recp1:
121; CHECK-NEXT: BB#0
Evandro Menezes9fc54822016-11-14 23:29:01 +0000122; CHECK-NEXT: frecpe [[R:v[0-7]\.2d]]
123; CHECK-NEXT: frecps {{v[0-7]\.2d(, v[0-7].2d)?}}, [[R]]
Evandro Menezeseff2bd92016-10-24 16:14:58 +0000124}
125
126define <4 x double> @d4recp0(<4 x double> %x) #0 {
127 %div = fdiv fast <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, %x
128 ret <4 x double> %div
129
130; CHECK-LABEL: d4recp0:
131; CHECK-NEXT: BB#0
132; CHECK-NEXT: fmov
133; CHECK-NEXT: fdiv
134; CHECK-NEXT: fdiv
135}
136
137define <4 x double> @d4recp1(<4 x double> %x) #1 {
138 %div = fdiv fast <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, %x
139 ret <4 x double> %div
140
141; CHECK-LABEL: d4recp1:
142; CHECK-NEXT: BB#0
Evandro Menezes9fc54822016-11-14 23:29:01 +0000143; CHECK-NEXT: frecpe [[RA:v[0-7]\.2d]]
144; CHECK-NEXT: frecpe [[RB:v[0-7]\.2d]]
145; CHECK-NEXT: frecps {{v[0-7]\.2d(, v[0-7].2d)?}}, [[RA]]
146; CHECK: frecps {{v[0-7]\.2d(, v[0-7].2d)?}}, [[RB]]
Evandro Menezeseff2bd92016-10-24 16:14:58 +0000147}
148
149attributes #0 = { nounwind "unsafe-fp-math"="true" }
150attributes #1 = { nounwind "unsafe-fp-math"="true" "reciprocal-estimates"="div,vec-div" }