xref: /llvm-project/llvm/test/Transforms/InstCombine/erf.ll (revision b90ea5caade7b92796276937467a0dabc355a62e)
1*b90ea5caSc8ef; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2*b90ea5caSc8ef; RUN: opt < %s -passes=instcombine -mtriple x86_64-unknown-linux-gnu -S | FileCheck %s
3*b90ea5caSc8ef
4*b90ea5caSc8efdefine float @erff_const() {
5*b90ea5caSc8ef; CHECK-LABEL: define float @erff_const() {
6*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float 5.000000e-01)
7*b90ea5caSc8ef; CHECK-NEXT:    ret float 0x3FE0A7EF60000000
8*b90ea5caSc8ef;
9*b90ea5caSc8ef  %r = call float @erff(float 5.000000e-01)
10*b90ea5caSc8ef  ret float %r
11*b90ea5caSc8ef}
12*b90ea5caSc8ef
13*b90ea5caSc8efdefine double @erf_const() {
14*b90ea5caSc8ef; CHECK-LABEL: define double @erf_const() {
15*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double -5.000000e-01)
16*b90ea5caSc8ef; CHECK-NEXT:    ret double 0xBFE0A7EF5C18EDD2
17*b90ea5caSc8ef;
18*b90ea5caSc8ef  %r = call double @erf(double -5.000000e-01)
19*b90ea5caSc8ef  ret double %r
20*b90ea5caSc8ef}
21*b90ea5caSc8ef
22*b90ea5caSc8efdefine float @erff_zero() {
23*b90ea5caSc8ef; CHECK-LABEL: define float @erff_zero() {
24*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float 0.000000e+00)
25*b90ea5caSc8ef; CHECK-NEXT:    ret float 0.000000e+00
26*b90ea5caSc8ef;
27*b90ea5caSc8ef  %r = call float @erff(float 0.000000e+00)
28*b90ea5caSc8ef  ret float %r
29*b90ea5caSc8ef}
30*b90ea5caSc8ef
31*b90ea5caSc8efdefine double @erf_zero() {
32*b90ea5caSc8ef; CHECK-LABEL: define double @erf_zero() {
33*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double 0.000000e+00)
34*b90ea5caSc8ef; CHECK-NEXT:    ret double 0.000000e+00
35*b90ea5caSc8ef;
36*b90ea5caSc8ef  %r = call double @erf(double 0.000000e+00)
37*b90ea5caSc8ef  ret double %r
38*b90ea5caSc8ef}
39*b90ea5caSc8ef
40*b90ea5caSc8efdefine float @erff_neg_zero() {
41*b90ea5caSc8ef; CHECK-LABEL: define float @erff_neg_zero() {
42*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float -0.000000e+00)
43*b90ea5caSc8ef; CHECK-NEXT:    ret float -0.000000e+00
44*b90ea5caSc8ef;
45*b90ea5caSc8ef  %r = call float @erff(float -0.000000e+00)
46*b90ea5caSc8ef  ret float %r
47*b90ea5caSc8ef}
48*b90ea5caSc8ef
49*b90ea5caSc8efdefine double @erf_neg_zero() {
50*b90ea5caSc8ef; CHECK-LABEL: define double @erf_neg_zero() {
51*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double -0.000000e+00)
52*b90ea5caSc8ef; CHECK-NEXT:    ret double -0.000000e+00
53*b90ea5caSc8ef;
54*b90ea5caSc8ef  %r = call double @erf(double -0.000000e+00)
55*b90ea5caSc8ef  ret double %r
56*b90ea5caSc8ef}
57*b90ea5caSc8ef
58*b90ea5caSc8efdefine float @erff_inf() {
59*b90ea5caSc8ef; CHECK-LABEL: define float @erff_inf() {
60*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float 0x7FF0000000000000)
61*b90ea5caSc8ef; CHECK-NEXT:    ret float [[R]]
62*b90ea5caSc8ef;
63*b90ea5caSc8ef  %r = call float @erff(float 0x7FF0000000000000)
64*b90ea5caSc8ef  ret float %r
65*b90ea5caSc8ef}
66*b90ea5caSc8ef
67*b90ea5caSc8efdefine double @erf_inf() {
68*b90ea5caSc8ef; CHECK-LABEL: define double @erf_inf() {
69*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double 0x7FF0000000000000)
70*b90ea5caSc8ef; CHECK-NEXT:    ret double [[R]]
71*b90ea5caSc8ef;
72*b90ea5caSc8ef  %r = call double @erf(double 0x7FF0000000000000)
73*b90ea5caSc8ef  ret double %r
74*b90ea5caSc8ef}
75*b90ea5caSc8ef
76*b90ea5caSc8efdefine float @erff_inf_memory_none() {
77*b90ea5caSc8ef; CHECK-LABEL: define float @erff_inf_memory_none() {
78*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float 0x7FF0000000000000) #[[ATTR1:[0-9]+]]
79*b90ea5caSc8ef; CHECK-NEXT:    ret float [[R]]
80*b90ea5caSc8ef;
81*b90ea5caSc8ef  %r = call float @erff(float 0x7FF0000000000000) readnone
82*b90ea5caSc8ef  ret float %r
83*b90ea5caSc8ef}
84*b90ea5caSc8ef
85*b90ea5caSc8efdefine double @erf_inf_memory_none() {
86*b90ea5caSc8ef; CHECK-LABEL: define double @erf_inf_memory_none() {
87*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double 0x7FF0000000000000) #[[ATTR1]]
88*b90ea5caSc8ef; CHECK-NEXT:    ret double [[R]]
89*b90ea5caSc8ef;
90*b90ea5caSc8ef  %r = call double @erf(double 0x7FF0000000000000) readnone
91*b90ea5caSc8ef  ret double %r
92*b90ea5caSc8ef}
93*b90ea5caSc8ef
94*b90ea5caSc8efdefine float @erff_neg_inf() {
95*b90ea5caSc8ef; CHECK-LABEL: define float @erff_neg_inf() {
96*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float 0xFFF0000000000000)
97*b90ea5caSc8ef; CHECK-NEXT:    ret float [[R]]
98*b90ea5caSc8ef;
99*b90ea5caSc8ef  %r = call float @erff(float 0xFFF0000000000000)
100*b90ea5caSc8ef  ret float %r
101*b90ea5caSc8ef}
102*b90ea5caSc8ef
103*b90ea5caSc8efdefine double @erf_neg_inf() {
104*b90ea5caSc8ef; CHECK-LABEL: define double @erf_neg_inf() {
105*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double 0xFFF0000000000000)
106*b90ea5caSc8ef; CHECK-NEXT:    ret double [[R]]
107*b90ea5caSc8ef;
108*b90ea5caSc8ef  %r = call double @erf(double 0xFFF0000000000000)
109*b90ea5caSc8ef  ret double %r
110*b90ea5caSc8ef}
111*b90ea5caSc8ef
112*b90ea5caSc8efdefine float @erff_neg_inf_memory_none() {
113*b90ea5caSc8ef; CHECK-LABEL: define float @erff_neg_inf_memory_none() {
114*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float 0xFFF0000000000000) #[[ATTR1]]
115*b90ea5caSc8ef; CHECK-NEXT:    ret float [[R]]
116*b90ea5caSc8ef;
117*b90ea5caSc8ef  %r = call float @erff(float 0xFFF0000000000000) readnone
118*b90ea5caSc8ef  ret float %r
119*b90ea5caSc8ef}
120*b90ea5caSc8ef
121*b90ea5caSc8efdefine double @erf_neg_inf_memory_none() {
122*b90ea5caSc8ef; CHECK-LABEL: define double @erf_neg_inf_memory_none() {
123*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double 0xFFF0000000000000) #[[ATTR1]]
124*b90ea5caSc8ef; CHECK-NEXT:    ret double [[R]]
125*b90ea5caSc8ef;
126*b90ea5caSc8ef  %r = call double @erf(double 0xFFF0000000000000) readnone
127*b90ea5caSc8ef  ret double %r
128*b90ea5caSc8ef}
129*b90ea5caSc8ef
130*b90ea5caSc8efdefine float @erff_nan() {
131*b90ea5caSc8ef; CHECK-LABEL: define float @erff_nan() {
132*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float 0x7FF8000000000000)
133*b90ea5caSc8ef; CHECK-NEXT:    ret float [[R]]
134*b90ea5caSc8ef;
135*b90ea5caSc8ef  %r = call float @erff(float 0x7FF8000000000000)
136*b90ea5caSc8ef  ret float %r
137*b90ea5caSc8ef}
138*b90ea5caSc8ef
139*b90ea5caSc8efdefine double @erf_nan() {
140*b90ea5caSc8ef; CHECK-LABEL: define double @erf_nan() {
141*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double 0x7FF8000000000000)
142*b90ea5caSc8ef; CHECK-NEXT:    ret double [[R]]
143*b90ea5caSc8ef;
144*b90ea5caSc8ef  %r = call double @erf(double 0x7FF8000000000000)
145*b90ea5caSc8ef  ret double %r
146*b90ea5caSc8ef}
147*b90ea5caSc8ef
148*b90ea5caSc8efdefine float @erff_nan_memory_none() {
149*b90ea5caSc8ef; CHECK-LABEL: define float @erff_nan_memory_none() {
150*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float 0x7FF8000000000000) #[[ATTR1]]
151*b90ea5caSc8ef; CHECK-NEXT:    ret float [[R]]
152*b90ea5caSc8ef;
153*b90ea5caSc8ef  %r = call float @erff(float 0x7FF8000000000000) readnone
154*b90ea5caSc8ef  ret float %r
155*b90ea5caSc8ef}
156*b90ea5caSc8ef
157*b90ea5caSc8efdefine double @erf_nan_memory_none() {
158*b90ea5caSc8ef; CHECK-LABEL: define double @erf_nan_memory_none() {
159*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double 0x7FF8000000000000) #[[ATTR1]]
160*b90ea5caSc8ef; CHECK-NEXT:    ret double [[R]]
161*b90ea5caSc8ef;
162*b90ea5caSc8ef  %r = call double @erf(double 0x7FF8000000000000) readnone
163*b90ea5caSc8ef  ret double %r
164*b90ea5caSc8ef}
165*b90ea5caSc8ef
166*b90ea5caSc8efdefine float @erff_poison() {
167*b90ea5caSc8ef; CHECK-LABEL: define float @erff_poison() {
168*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float poison)
169*b90ea5caSc8ef; CHECK-NEXT:    ret float [[R]]
170*b90ea5caSc8ef;
171*b90ea5caSc8ef  %r = call float @erff(float poison)
172*b90ea5caSc8ef  ret float %r
173*b90ea5caSc8ef}
174*b90ea5caSc8ef
175*b90ea5caSc8efdefine double @erf_poison() {
176*b90ea5caSc8ef; CHECK-LABEL: define double @erf_poison() {
177*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double poison)
178*b90ea5caSc8ef; CHECK-NEXT:    ret double [[R]]
179*b90ea5caSc8ef;
180*b90ea5caSc8ef  %r = call double @erf(double poison)
181*b90ea5caSc8ef  ret double %r
182*b90ea5caSc8ef}
183*b90ea5caSc8ef
184*b90ea5caSc8efdefine float @erff_const_strictfp() {
185*b90ea5caSc8ef; CHECK-LABEL: define float @erff_const_strictfp() {
186*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float 5.000000e-01) #[[ATTR2:[0-9]+]]
187*b90ea5caSc8ef; CHECK-NEXT:    ret float [[R]]
188*b90ea5caSc8ef;
189*b90ea5caSc8ef  %r = call float @erff(float 5.000000e-01) strictfp
190*b90ea5caSc8ef  ret float %r
191*b90ea5caSc8ef}
192*b90ea5caSc8ef
193*b90ea5caSc8efdefine double @erf_const_strictfp() {
194*b90ea5caSc8ef; CHECK-LABEL: define double @erf_const_strictfp() {
195*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double -5.000000e-01) #[[ATTR2]]
196*b90ea5caSc8ef; CHECK-NEXT:    ret double [[R]]
197*b90ea5caSc8ef;
198*b90ea5caSc8ef  %r = call double @erf(double -5.000000e-01) strictfp
199*b90ea5caSc8ef  ret double %r
200*b90ea5caSc8ef}
201*b90ea5caSc8ef
202*b90ea5caSc8efdefine float @erff_nan_strictfp() {
203*b90ea5caSc8ef; CHECK-LABEL: define float @erff_nan_strictfp() {
204*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call float @erff(float 0x7FF8000000000000) #[[ATTR2]]
205*b90ea5caSc8ef; CHECK-NEXT:    ret float [[R]]
206*b90ea5caSc8ef;
207*b90ea5caSc8ef  %r = call float @erff(float 0x7FF8000000000000) strictfp
208*b90ea5caSc8ef  ret float %r
209*b90ea5caSc8ef}
210*b90ea5caSc8ef
211*b90ea5caSc8efdefine double @erf_nan_strictfp() {
212*b90ea5caSc8ef; CHECK-LABEL: define double @erf_nan_strictfp() {
213*b90ea5caSc8ef; CHECK-NEXT:    [[R:%.*]] = call double @erf(double 0x7FF8000000000000) #[[ATTR2]]
214*b90ea5caSc8ef; CHECK-NEXT:    ret double [[R]]
215*b90ea5caSc8ef;
216*b90ea5caSc8ef  %r = call double @erf(double 0x7FF8000000000000) strictfp
217*b90ea5caSc8ef  ret double %r
218*b90ea5caSc8ef}
219*b90ea5caSc8ef
220*b90ea5caSc8efdeclare float @erff(float) willreturn
221*b90ea5caSc8efdeclare double @erf(double) willreturn
222