1; RUN: llc < %s -mtriple=aarch64 -mattr=neon -recip=!div,!vec-div | FileCheck %s --check-prefix=FAULT
2; RUN: llc < %s -mtriple=aarch64 -mattr=neon -recip=div,vec-div   | FileCheck %s
3
4define float @frecp(float %x) #0 {
5  %div = fdiv fast float 1.0, %x
6  ret float %div
7
8; FAULT-LABEL: frecp:
9; FAULT-NEXT: BB#0
10; FAULT-NEXT: fmov
11; FAULT-NEXT: fdiv
12
13; CHECK-LABEL: frecp:
14; CHECK-NEXT: BB#0
15; CHECK-NEXT: frecpe
16; CHECK-NEXT: fmov
17}
18
19define <2 x float> @f2recp(<2 x float> %x) #0 {
20  %div = fdiv fast <2 x float> <float 1.0, float 1.0>, %x
21  ret <2 x float> %div
22
23; FAULT-LABEL: f2recp:
24; FAULT-NEXT: BB#0
25; FAULT-NEXT: fmov
26; FAULT-NEXT: fdiv
27
28; CHECK-LABEL: f2recp:
29; CHECK-NEXT: BB#0
30; CHECK-NEXT: fmov
31; CHECK-NEXT: frecpe
32}
33
34define <4 x float> @f4recp(<4 x float> %x) #0 {
35  %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x
36  ret <4 x float> %div
37
38; FAULT-LABEL: f4recp:
39; FAULT-NEXT: BB#0
40; FAULT-NEXT: fmov
41; FAULT-NEXT: fdiv
42
43; CHECK-LABEL: f4recp:
44; CHECK-NEXT: BB#0
45; CHECK-NEXT: fmov
46; CHECK-NEXT: frecpe
47}
48
49define double @drecp(double %x) #0 {
50  %div = fdiv fast double 1.0, %x
51  ret double %div
52
53; FAULT-LABEL: drecp:
54; FAULT-NEXT: BB#0
55; FAULT-NEXT: fmov
56; FAULT-NEXT: fdiv
57
58; CHECK-LABEL: drecp:
59; CHECK-NEXT: BB#0
60; CHECK-NEXT: frecpe
61; CHECK-NEXT: fmov
62}
63
64define <2 x double> @d2recp(<2 x double> %x) #0 {
65  %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %x
66  ret <2 x double> %div
67
68; FAULT-LABEL: d2recp:
69; FAULT-NEXT: BB#0
70; FAULT-NEXT: fmov
71; FAULT-NEXT: fdiv
72
73; CHECK-LABEL: d2recp:
74; CHECK-NEXT: BB#0
75; CHECK-NEXT: fmov
76; CHECK-NEXT: frecpe
77}
78
79attributes #0 = { nounwind "unsafe-fp-math"="true" }
80