blob: 9f00621eff6b4d3a2b4ec0a01d2bda269c6822ab [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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00008; CHECK-NEXT: %bb.0
Evandro Menezeseff2bd92016-10-24 16:14:58 +00009; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000018; 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 Menezes9dcf0992017-11-03 18:56:36 +000021; CHECK: frecps {{s[0-7]}}, {{s[0-7]}}, {{s[0-7]}}
22; CHECK-NOT: frecps {{s[0-7]}}, {{s[0-7]}}, {{s[0-7]}}
Evandro Menezeseff2bd92016-10-24 16:14:58 +000023}
24
25define <2 x float> @f2recp0(<2 x float> %x) #0 {
26 %div = fdiv fast <2 x float> <float 1.0, float 1.0>, %x
27 ret <2 x float> %div
28
29; CHECK-LABEL: f2recp0:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000030; CHECK-NEXT: %bb.0
Evandro Menezeseff2bd92016-10-24 16:14:58 +000031; CHECK-NEXT: fmov
32; CHECK-NEXT: fdiv
33}
34
35define <2 x float> @f2recp1(<2 x float> %x) #1 {
36 %div = fdiv fast <2 x float> <float 1.0, float 1.0>, %x
37 ret <2 x float> %div
38
39; CHECK-LABEL: f2recp1:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000040; CHECK-NEXT: %bb.0
Evandro Menezes9fc54822016-11-14 23:29:01 +000041; CHECK-NEXT: frecpe [[R:v[0-7]\.2s]]
42; CHECK-NEXT: frecps {{v[0-7]\.2s(, v[0-7].2s)?}}, [[R]]
Evandro Menezes9dcf0992017-11-03 18:56:36 +000043; CHECK: frecps {{v[0-7]\.2s}}, {{v[0-7]\.2s}}, {{v[0-7]\.2s}}
44; CHECK-NOT: frecps {{v[0-7]\.2s}}, {{v[0-7]\.2s}}, {{v[0-7]\.2s}}
Evandro Menezeseff2bd92016-10-24 16:14:58 +000045}
46
47define <4 x float> @f4recp0(<4 x float> %x) #0 {
48 %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x
49 ret <4 x float> %div
50
51; CHECK-LABEL: f4recp0:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000052; CHECK-NEXT: %bb.0
Evandro Menezeseff2bd92016-10-24 16:14:58 +000053; CHECK-NEXT: fmov
54; CHECK-NEXT: fdiv
55}
56
57define <4 x float> @f4recp1(<4 x float> %x) #1 {
58 %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x
59 ret <4 x float> %div
60
61; CHECK-LABEL: f4recp1:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000062; CHECK-NEXT: %bb.0
Evandro Menezes9fc54822016-11-14 23:29:01 +000063; CHECK-NEXT: frecpe [[R:v[0-7]\.4s]]
64; CHECK-NEXT: frecps {{v[0-7]\.4s(, v[0-7].4s)?}}, [[R]]
Evandro Menezes9dcf0992017-11-03 18:56:36 +000065; CHECK: frecps {{v[0-7]\.4s}}, {{v[0-7]\.4s}}, {{v[0-7]\.4s}}
66; CHECK-NOT: frecps {{v[0-7]\.4s}}, {{v[0-7]\.4s}}, {{v[0-7]\.4s}}
Evandro Menezeseff2bd92016-10-24 16:14:58 +000067}
68
69define <8 x float> @f8recp0(<8 x float> %x) #0 {
70 %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
71 ret <8 x float> %div
72
73; CHECK-LABEL: f8recp0:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000074; CHECK-NEXT: %bb.0
Evandro Menezeseff2bd92016-10-24 16:14:58 +000075; CHECK-NEXT: fmov
76; CHECK-NEXT: fdiv
77; CHECK-NEXT: fdiv
78}
79
80define <8 x float> @f8recp1(<8 x float> %x) #1 {
81 %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
82 ret <8 x float> %div
83
84; CHECK-LABEL: f8recp1:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000085; CHECK-NEXT: %bb.0
Evandro Menezes9dcf0992017-11-03 18:56:36 +000086; CHECK-NEXT: frecpe [[R:v[0-7]\.4s]]
87; CHECK: frecps {{v[0-7]\.4s(, v[0-7].4s)?}}, [[R]]
88; CHECK: frecps {{v[0-7]\.4s(, v[0-7].4s)?}}, {{v[0-7]\.4s}}
89; CHECK: frecps {{v[0-7]\.4s}}, {{v[0-7]\.4s}}, {{v[0-7]\.4s}}
90; CHECK: frecps {{v[0-7]\.4s}}, {{v[0-7]\.4s}}, {{v[0-7]\.4s}}
91; CHECK-NOT: frecps {{v[0-7]\.4s}}, {{v[0-7]\.4s}}, {{v[0-7]\.4s}}
Evandro Menezeseff2bd92016-10-24 16:14:58 +000092}
93
94define double @drecp0(double %x) #0 {
95 %div = fdiv fast double 1.0, %x
96 ret double %div
97
98; CHECK-LABEL: drecp0:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000099; CHECK-NEXT: %bb.0
Evandro Menezeseff2bd92016-10-24 16:14:58 +0000100; CHECK-NEXT: fmov
101; CHECK-NEXT: fdiv
102}
103
104define double @drecp1(double %x) #1 {
105 %div = fdiv fast double 1.0, %x
106 ret double %div
107
108; CHECK-LABEL: drecp1:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000109; CHECK-NEXT: %bb.0
Evandro Menezes9fc54822016-11-14 23:29:01 +0000110; CHECK-NEXT: frecpe [[R:d[0-7]]]
111; CHECK-NEXT: frecps {{d[0-7](, d[0-7])?}}, [[R]]
Evandro Menezes9dcf0992017-11-03 18:56:36 +0000112; CHECK: frecps {{d[0-7]}}, {{d[0-7]}}, {{d[0-7]}}
113; CHECK: frecps {{d[0-7]}}, {{d[0-7]}}, {{d[0-7]}}
114; CHECK-NOT: frecps {{d[0-7]}}, {{d[0-7]}}, {{d[0-7]}}
Evandro Menezeseff2bd92016-10-24 16:14:58 +0000115}
116
117define <2 x double> @d2recp0(<2 x double> %x) #0 {
118 %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %x
119 ret <2 x double> %div
120
121; CHECK-LABEL: d2recp0:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000122; CHECK-NEXT: %bb.0
Evandro Menezeseff2bd92016-10-24 16:14:58 +0000123; CHECK-NEXT: fmov
124; CHECK-NEXT: fdiv
125}
126
127define <2 x double> @d2recp1(<2 x double> %x) #1 {
128 %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %x
129 ret <2 x double> %div
130
131; CHECK-LABEL: d2recp1:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000132; CHECK-NEXT: %bb.0
Evandro Menezes9fc54822016-11-14 23:29:01 +0000133; CHECK-NEXT: frecpe [[R:v[0-7]\.2d]]
134; CHECK-NEXT: frecps {{v[0-7]\.2d(, v[0-7].2d)?}}, [[R]]
Evandro Menezes9dcf0992017-11-03 18:56:36 +0000135; CHECK: frecps {{v[0-7]\.2d}}, {{v[0-7]\.2d}}, {{v[0-7]\.2d}}
136; CHECK: frecps {{v[0-7]\.2d}}, {{v[0-7]\.2d}}, {{v[0-7]\.2d}}
137; CHECK-NOT: frecps {{v[0-7]\.2d}}, {{v[0-7]\.2d}}, {{v[0-7]\.2d}}
Evandro Menezeseff2bd92016-10-24 16:14:58 +0000138}
139
140define <4 x double> @d4recp0(<4 x double> %x) #0 {
141 %div = fdiv fast <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, %x
142 ret <4 x double> %div
143
144; CHECK-LABEL: d4recp0:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000145; CHECK-NEXT: %bb.0
Evandro Menezeseff2bd92016-10-24 16:14:58 +0000146; CHECK-NEXT: fmov
147; CHECK-NEXT: fdiv
148; CHECK-NEXT: fdiv
149}
150
151define <4 x double> @d4recp1(<4 x double> %x) #1 {
152 %div = fdiv fast <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, %x
153 ret <4 x double> %div
154
155; CHECK-LABEL: d4recp1:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000156; CHECK-NEXT: %bb.0
Evandro Menezes9dcf0992017-11-03 18:56:36 +0000157; CHECK-NEXT: frecpe [[R:v[0-7]\.2d]]
158; CHECK: frecps {{v[0-7]\.2d(, v[0-7].2d)?}}, [[R]]
159; CHECK: frecps {{v[0-7]\.2d}}, {{v[0-7]\.2d}}, {{v[0-7]\.2d}}
160; CHECK: frecps {{v[0-7]\.2d}}, {{v[0-7]\.2d}}, {{v[0-7]\.2d}}
161; CHECK: frecps {{v[0-7]\.2d}}, {{v[0-7]\.2d}}, {{v[0-7]\.2d}}
162; CHECK: frecps {{v[0-7]\.2d}}, {{v[0-7]\.2d}}, {{v[0-7]\.2d}}
163; CHECK: frecps {{v[0-7]\.2d}}, {{v[0-7]\.2d}}, {{v[0-7]\.2d}}
164; CHECK-NOT: frecps {{v[0-7]\.2d}}, {{v[0-7]\.2d}}, {{v[0-7]\.2d}}
Evandro Menezeseff2bd92016-10-24 16:14:58 +0000165}
166
167attributes #0 = { nounwind "unsafe-fp-math"="true" }
168attributes #1 = { nounwind "unsafe-fp-math"="true" "reciprocal-estimates"="div,vec-div" }