xref: /llvm-project/llvm/test/Transforms/InstCombine/log1p.ll (revision 5091a359d9807db8f7d62375696f93fc34226969)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3
4define float @log1pf_const() {
5; CHECK-LABEL: define float @log1pf_const() {
6; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float 7.000000e+00)
7; CHECK-NEXT:    ret float 0x4000A2B240000000
8;
9  %r = call float @log1pf(float 7.000000e+00)
10  ret float %r
11}
12
13define double @log1p_const() {
14; CHECK-LABEL: define double @log1p_const() {
15; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double 7.000000e+00)
16; CHECK-NEXT:    ret double 0x4000A2B23F3BAB73
17;
18  %r = call double @log1p(double 7.000000e+00)
19  ret double %r
20}
21
22define float @log1pf_minus_one() {
23; CHECK-LABEL: define float @log1pf_minus_one() {
24; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float -1.000000e+00)
25; CHECK-NEXT:    ret float [[R]]
26;
27  %r = call float @log1pf(float -1.000000e+00)
28  ret float %r
29}
30
31define double @log1p_minus_one() {
32; CHECK-LABEL: define double @log1p_minus_one() {
33; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double -1.000000e+00)
34; CHECK-NEXT:    ret double [[R]]
35;
36  %r = call double @log1p(double -1.000000e+00)
37  ret double %r
38}
39
40define float @log1pf_minus_one_memory_none() {
41; CHECK-LABEL: define float @log1pf_minus_one_memory_none() {
42; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float -1.000000e+00) #[[ATTR0:[0-9]+]]
43; CHECK-NEXT:    ret float [[R]]
44;
45  %r = call float @log1pf(float -1.000000e+00) readnone
46  ret float %r
47}
48
49define double @log1p_minus_one_memory_none() {
50; CHECK-LABEL: define double @log1p_minus_one_memory_none() {
51; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double -1.000000e+00) #[[ATTR0]]
52; CHECK-NEXT:    ret double [[R]]
53;
54  %r = call double @log1p(double -1.000000e+00) readnone
55  ret double %r
56}
57
58define float @log1pf_zero() {
59; CHECK-LABEL: define float @log1pf_zero() {
60; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float 0.000000e+00)
61; CHECK-NEXT:    ret float 0.000000e+00
62;
63  %r = call float @log1pf(float 0.000000e+00)
64  ret float %r
65}
66
67define double @log1p_zero() {
68; CHECK-LABEL: define double @log1p_zero() {
69; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double 0.000000e+00)
70; CHECK-NEXT:    ret double 0.000000e+00
71;
72  %r = call double @log1p(double 0.000000e+00)
73  ret double %r
74}
75
76define float @log1pf_neg_zero() {
77; CHECK-LABEL: define float @log1pf_neg_zero() {
78; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float -0.000000e+00)
79; CHECK-NEXT:    ret float -0.000000e+00
80;
81  %r = call float @log1pf(float -0.000000e+00)
82  ret float %r
83}
84
85define double @log1p_neg_zero() {
86; CHECK-LABEL: define double @log1p_neg_zero() {
87; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double -0.000000e+00)
88; CHECK-NEXT:    ret double -0.000000e+00
89;
90  %r = call double @log1p(double -0.000000e+00)
91  ret double %r
92}
93
94define float @log1pf_neg1() {
95; CHECK-LABEL: define float @log1pf_neg1() {
96; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float -7.000000e+00)
97; CHECK-NEXT:    ret float [[R]]
98;
99  %r = call float @log1pf(float -7.000000e+00)
100  ret float %r
101}
102
103define double @log1p_neg1() {
104; CHECK-LABEL: define double @log1p_neg1() {
105; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double -7.000000e+00)
106; CHECK-NEXT:    ret double [[R]]
107;
108  %r = call double @log1p(double -7.000000e+00)
109  ret double %r
110}
111
112define float @log1pf_neg1_memory_none() {
113; CHECK-LABEL: define float @log1pf_neg1_memory_none() {
114; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float -7.000000e+00) #[[ATTR0]]
115; CHECK-NEXT:    ret float [[R]]
116;
117  %r = call float @log1pf(float -7.000000e+00) readnone
118  ret float %r
119}
120
121define double @log1p_neg1_memory_none() {
122; CHECK-LABEL: define double @log1p_neg1_memory_none() {
123; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double -7.000000e+00) #[[ATTR0]]
124; CHECK-NEXT:    ret double [[R]]
125;
126  %r = call double @log1p(double -7.000000e+00) readnone
127  ret double %r
128}
129
130define float @log1pf_neg2() {
131; CHECK-LABEL: define float @log1pf_neg2() {
132; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float -5.000000e-01)
133; CHECK-NEXT:    ret float 0xBFE62E4300000000
134;
135  %r = call float @log1pf(float -5.000000e-01)
136  ret float %r
137}
138
139define double @log1p_neg2() {
140; CHECK-LABEL: define double @log1p_neg2() {
141; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double -5.000000e-01)
142; CHECK-NEXT:    ret double 0xBFE62E42FEFA39EF
143;
144  %r = call double @log1p(double -5.000000e-01)
145  ret double %r
146}
147
148define float @log1pf_inf() {
149; CHECK-LABEL: define float @log1pf_inf() {
150; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float 0x7FF0000000000000)
151; CHECK-NEXT:    ret float [[R]]
152;
153  %r = call float @log1pf(float 0x7FF0000000000000)
154  ret float %r
155}
156
157define double @log1p_inf() {
158; CHECK-LABEL: define double @log1p_inf() {
159; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double 0x7FF0000000000000)
160; CHECK-NEXT:    ret double [[R]]
161;
162  %r = call double @log1p(double 0x7FF0000000000000)
163  ret double %r
164}
165
166define float @log1pf_inf_memory_none() {
167; CHECK-LABEL: define float @log1pf_inf_memory_none() {
168; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float 0x7FF0000000000000) #[[ATTR0]]
169; CHECK-NEXT:    ret float [[R]]
170;
171  %r = call float @log1pf(float 0x7FF0000000000000) readnone
172  ret float %r
173}
174
175define double @log1p_inf_memory_none() {
176; CHECK-LABEL: define double @log1p_inf_memory_none() {
177; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double 0x7FF0000000000000) #[[ATTR0]]
178; CHECK-NEXT:    ret double [[R]]
179;
180  %r = call double @log1p(double 0x7FF0000000000000) readnone
181  ret double %r
182}
183
184define float @log1pf_neg_inf() {
185; CHECK-LABEL: define float @log1pf_neg_inf() {
186; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float 0xFFF0000000000000)
187; CHECK-NEXT:    ret float [[R]]
188;
189  %r = call float @log1pf(float 0xFFF0000000000000)
190  ret float %r
191}
192
193define double @log1p_neg_inf() {
194; CHECK-LABEL: define double @log1p_neg_inf() {
195; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double 0xFFF0000000000000)
196; CHECK-NEXT:    ret double [[R]]
197;
198  %r = call double @log1p(double 0xFFF0000000000000)
199  ret double %r
200}
201
202define float @log1pf_neg_inf_memory_none() {
203; CHECK-LABEL: define float @log1pf_neg_inf_memory_none() {
204; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float 0xFFF0000000000000) #[[ATTR0]]
205; CHECK-NEXT:    ret float [[R]]
206;
207  %r = call float @log1pf(float 0xFFF0000000000000) readnone
208  ret float %r
209}
210
211define double @log1p_neg_inf_memory_none() {
212; CHECK-LABEL: define double @log1p_neg_inf_memory_none() {
213; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double 0xFFF0000000000000) #[[ATTR0]]
214; CHECK-NEXT:    ret double [[R]]
215;
216  %r = call double @log1p(double 0xFFF0000000000000) readnone
217  ret double %r
218}
219
220define float @log1pf_nan() {
221; CHECK-LABEL: define float @log1pf_nan() {
222; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float 0x7FF8000000000000)
223; CHECK-NEXT:    ret float [[R]]
224;
225  %r = call float @log1pf(float 0x7FF8000000000000)
226  ret float %r
227}
228
229define double @log1p_nan() {
230; CHECK-LABEL: define double @log1p_nan() {
231; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double 0x7FF8000000000000)
232; CHECK-NEXT:    ret double [[R]]
233;
234  %r = call double @log1p(double 0x7FF8000000000000)
235  ret double %r
236}
237
238define float @log1pf_nan_memory_none() {
239; CHECK-LABEL: define float @log1pf_nan_memory_none() {
240; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float 0x7FF8000000000000) #[[ATTR0]]
241; CHECK-NEXT:    ret float [[R]]
242;
243  %r = call float @log1pf(float 0x7FF8000000000000) readnone
244  ret float %r
245}
246
247define double @log1p_nan_memory_none() {
248; CHECK-LABEL: define double @log1p_nan_memory_none() {
249; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double 0x7FF8000000000000) #[[ATTR0]]
250; CHECK-NEXT:    ret double [[R]]
251;
252  %r = call double @log1p(double 0x7FF8000000000000) readnone
253  ret double %r
254}
255
256define float @log1pf_poison() {
257; CHECK-LABEL: define float @log1pf_poison() {
258; CHECK-NEXT:    [[R:%.*]] = call float @log1pf(float poison)
259; CHECK-NEXT:    ret float [[R]]
260;
261  %r = call float @log1pf(float poison)
262  ret float %r
263}
264
265define double @log1p_poison() {
266; CHECK-LABEL: define double @log1p_poison() {
267; CHECK-NEXT:    [[R:%.*]] = call double @log1p(double poison)
268; CHECK-NEXT:    ret double [[R]]
269;
270  %r = call double @log1p(double poison)
271  ret double %r
272}
273
274declare float @log1pf(float)
275declare double @log1p(double)
276