annotate llvm/test/Feature/fp-intrinsics.ll @ 150:1d019706d866

LLVM10
author anatofuz
date Thu, 13 Feb 2020 15:10:13 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ; RUN: opt -O3 -S < %s | FileCheck %s
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 ; Test to verify that constants aren't folded when the rounding mode is unknown.
anatofuz
parents:
diff changeset
4 ; CHECK-LABEL: @f1
anatofuz
parents:
diff changeset
5 ; CHECK: call double @llvm.experimental.constrained.fdiv.f64
anatofuz
parents:
diff changeset
6 define double @f1() #0 {
anatofuz
parents:
diff changeset
7 entry:
anatofuz
parents:
diff changeset
8 %div = call double @llvm.experimental.constrained.fdiv.f64(
anatofuz
parents:
diff changeset
9 double 1.000000e+00,
anatofuz
parents:
diff changeset
10 double 1.000000e+01,
anatofuz
parents:
diff changeset
11 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
12 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
13 ret double %div
anatofuz
parents:
diff changeset
14 }
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 ; Verify that 'a - 0' isn't simplified to 'a' when the rounding mode is unknown.
anatofuz
parents:
diff changeset
17 ;
anatofuz
parents:
diff changeset
18 ; double f2(double a) {
anatofuz
parents:
diff changeset
19 ; // Because the result of '0 - 0' is negative zero if rounding mode is
anatofuz
parents:
diff changeset
20 ; // downward, this shouldn't be simplified.
anatofuz
parents:
diff changeset
21 ; return a - 0.0;
anatofuz
parents:
diff changeset
22 ; }
anatofuz
parents:
diff changeset
23 ;
anatofuz
parents:
diff changeset
24 ; CHECK-LABEL: @f2
anatofuz
parents:
diff changeset
25 ; CHECK: call double @llvm.experimental.constrained.fsub.f64
anatofuz
parents:
diff changeset
26 define double @f2(double %a) #0 {
anatofuz
parents:
diff changeset
27 entry:
anatofuz
parents:
diff changeset
28 %div = call double @llvm.experimental.constrained.fsub.f64(
anatofuz
parents:
diff changeset
29 double %a, double 0.000000e+00,
anatofuz
parents:
diff changeset
30 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
31 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
32 ret double %div
anatofuz
parents:
diff changeset
33 }
anatofuz
parents:
diff changeset
34
anatofuz
parents:
diff changeset
35 ; Verify that '-((-a)*b)' isn't simplified to 'a*b' when the rounding mode is
anatofuz
parents:
diff changeset
36 ; unknown.
anatofuz
parents:
diff changeset
37 ;
anatofuz
parents:
diff changeset
38 ; double f3(double a, double b) {
anatofuz
parents:
diff changeset
39 ; // Because the intermediate value involved in this calculation may require
anatofuz
parents:
diff changeset
40 ; // rounding, this shouldn't be simplified.
anatofuz
parents:
diff changeset
41 ; return -((-a)*b);
anatofuz
parents:
diff changeset
42 ; }
anatofuz
parents:
diff changeset
43 ;
anatofuz
parents:
diff changeset
44 ; CHECK-LABEL: @f3
anatofuz
parents:
diff changeset
45 ; CHECK: call double @llvm.experimental.constrained.fsub.f64
anatofuz
parents:
diff changeset
46 ; CHECK: call double @llvm.experimental.constrained.fmul.f64
anatofuz
parents:
diff changeset
47 ; CHECK: call double @llvm.experimental.constrained.fsub.f64
anatofuz
parents:
diff changeset
48 define double @f3(double %a, double %b) #0 {
anatofuz
parents:
diff changeset
49 entry:
anatofuz
parents:
diff changeset
50 %sub = call double @llvm.experimental.constrained.fsub.f64(
anatofuz
parents:
diff changeset
51 double -0.000000e+00, double %a,
anatofuz
parents:
diff changeset
52 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
53 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
54 %mul = call double @llvm.experimental.constrained.fmul.f64(
anatofuz
parents:
diff changeset
55 double %sub, double %b,
anatofuz
parents:
diff changeset
56 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
57 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
58 %ret = call double @llvm.experimental.constrained.fsub.f64(
anatofuz
parents:
diff changeset
59 double -0.000000e+00,
anatofuz
parents:
diff changeset
60 double %mul,
anatofuz
parents:
diff changeset
61 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
62 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
63 ret double %ret
anatofuz
parents:
diff changeset
64 }
anatofuz
parents:
diff changeset
65
anatofuz
parents:
diff changeset
66 ; Verify that FP operations are not performed speculatively when FP exceptions
anatofuz
parents:
diff changeset
67 ; are not being ignored.
anatofuz
parents:
diff changeset
68 ;
anatofuz
parents:
diff changeset
69 ; double f4(int n, double a) {
anatofuz
parents:
diff changeset
70 ; // Because a + 1 may overflow, this should not be simplified.
anatofuz
parents:
diff changeset
71 ; if (n > 0)
anatofuz
parents:
diff changeset
72 ; return a + 1.0;
anatofuz
parents:
diff changeset
73 ; return a;
anatofuz
parents:
diff changeset
74 ; }
anatofuz
parents:
diff changeset
75 ;
anatofuz
parents:
diff changeset
76 ;
anatofuz
parents:
diff changeset
77 ; CHECK-LABEL: @f4
anatofuz
parents:
diff changeset
78 ; CHECK-NOT: select
anatofuz
parents:
diff changeset
79 ; CHECK: br i1 %cmp
anatofuz
parents:
diff changeset
80 define double @f4(i32 %n, double %a) #0 {
anatofuz
parents:
diff changeset
81 entry:
anatofuz
parents:
diff changeset
82 %cmp = icmp sgt i32 %n, 0
anatofuz
parents:
diff changeset
83 br i1 %cmp, label %if.then, label %if.end
anatofuz
parents:
diff changeset
84
anatofuz
parents:
diff changeset
85 if.then:
anatofuz
parents:
diff changeset
86 %add = call double @llvm.experimental.constrained.fadd.f64(
anatofuz
parents:
diff changeset
87 double 1.000000e+00, double %a,
anatofuz
parents:
diff changeset
88 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
89 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
90 br label %if.end
anatofuz
parents:
diff changeset
91
anatofuz
parents:
diff changeset
92 if.end:
anatofuz
parents:
diff changeset
93 %a.0 = phi double [%add, %if.then], [ %a, %entry ]
anatofuz
parents:
diff changeset
94 ret double %a.0
anatofuz
parents:
diff changeset
95 }
anatofuz
parents:
diff changeset
96
anatofuz
parents:
diff changeset
97 ; Verify that sqrt(42.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
98 ; CHECK-LABEL: f5
anatofuz
parents:
diff changeset
99 ; CHECK: call double @llvm.experimental.constrained.sqrt
anatofuz
parents:
diff changeset
100 define double @f5() #0 {
anatofuz
parents:
diff changeset
101 entry:
anatofuz
parents:
diff changeset
102 %result = call double @llvm.experimental.constrained.sqrt.f64(double 42.0,
anatofuz
parents:
diff changeset
103 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
104 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
105 ret double %result
anatofuz
parents:
diff changeset
106 }
anatofuz
parents:
diff changeset
107
anatofuz
parents:
diff changeset
108 ; Verify that pow(42.1, 3.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
109 ; CHECK-LABEL: f6
anatofuz
parents:
diff changeset
110 ; CHECK: call double @llvm.experimental.constrained.pow
anatofuz
parents:
diff changeset
111 define double @f6() #0 {
anatofuz
parents:
diff changeset
112 entry:
anatofuz
parents:
diff changeset
113 %result = call double @llvm.experimental.constrained.pow.f64(double 42.1,
anatofuz
parents:
diff changeset
114 double 3.0,
anatofuz
parents:
diff changeset
115 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
116 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
117 ret double %result
anatofuz
parents:
diff changeset
118 }
anatofuz
parents:
diff changeset
119
anatofuz
parents:
diff changeset
120 ; Verify that powi(42.1, 3) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
121 ; CHECK-LABEL: f7
anatofuz
parents:
diff changeset
122 ; CHECK: call double @llvm.experimental.constrained.powi
anatofuz
parents:
diff changeset
123 define double @f7() #0 {
anatofuz
parents:
diff changeset
124 entry:
anatofuz
parents:
diff changeset
125 %result = call double @llvm.experimental.constrained.powi.f64(double 42.1,
anatofuz
parents:
diff changeset
126 i32 3,
anatofuz
parents:
diff changeset
127 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
128 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
129 ret double %result
anatofuz
parents:
diff changeset
130 }
anatofuz
parents:
diff changeset
131
anatofuz
parents:
diff changeset
132 ; Verify that sin(42.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
133 ; CHECK-LABEL: f8
anatofuz
parents:
diff changeset
134 ; CHECK: call double @llvm.experimental.constrained.sin
anatofuz
parents:
diff changeset
135 define double @f8() #0 {
anatofuz
parents:
diff changeset
136 entry:
anatofuz
parents:
diff changeset
137 %result = call double @llvm.experimental.constrained.sin.f64(double 42.0,
anatofuz
parents:
diff changeset
138 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
139 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
140 ret double %result
anatofuz
parents:
diff changeset
141 }
anatofuz
parents:
diff changeset
142
anatofuz
parents:
diff changeset
143 ; Verify that cos(42.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
144 ; CHECK-LABEL: f9
anatofuz
parents:
diff changeset
145 ; CHECK: call double @llvm.experimental.constrained.cos
anatofuz
parents:
diff changeset
146 define double @f9() #0 {
anatofuz
parents:
diff changeset
147 entry:
anatofuz
parents:
diff changeset
148 %result = call double @llvm.experimental.constrained.cos.f64(double 42.0,
anatofuz
parents:
diff changeset
149 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
150 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
151 ret double %result
anatofuz
parents:
diff changeset
152 }
anatofuz
parents:
diff changeset
153
anatofuz
parents:
diff changeset
154 ; Verify that exp(42.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
155 ; CHECK-LABEL: f10
anatofuz
parents:
diff changeset
156 ; CHECK: call double @llvm.experimental.constrained.exp
anatofuz
parents:
diff changeset
157 define double @f10() #0 {
anatofuz
parents:
diff changeset
158 entry:
anatofuz
parents:
diff changeset
159 %result = call double @llvm.experimental.constrained.exp.f64(double 42.0,
anatofuz
parents:
diff changeset
160 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
161 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
162 ret double %result
anatofuz
parents:
diff changeset
163 }
anatofuz
parents:
diff changeset
164
anatofuz
parents:
diff changeset
165 ; Verify that exp2(42.1) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
166 ; CHECK-LABEL: f11
anatofuz
parents:
diff changeset
167 ; CHECK: call double @llvm.experimental.constrained.exp2
anatofuz
parents:
diff changeset
168 define double @f11() #0 {
anatofuz
parents:
diff changeset
169 entry:
anatofuz
parents:
diff changeset
170 %result = call double @llvm.experimental.constrained.exp2.f64(double 42.1,
anatofuz
parents:
diff changeset
171 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
172 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
173 ret double %result
anatofuz
parents:
diff changeset
174 }
anatofuz
parents:
diff changeset
175
anatofuz
parents:
diff changeset
176 ; Verify that log(42.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
177 ; CHECK-LABEL: f12
anatofuz
parents:
diff changeset
178 ; CHECK: call double @llvm.experimental.constrained.log
anatofuz
parents:
diff changeset
179 define double @f12() #0 {
anatofuz
parents:
diff changeset
180 entry:
anatofuz
parents:
diff changeset
181 %result = call double @llvm.experimental.constrained.log.f64(double 42.0,
anatofuz
parents:
diff changeset
182 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
183 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
184 ret double %result
anatofuz
parents:
diff changeset
185 }
anatofuz
parents:
diff changeset
186
anatofuz
parents:
diff changeset
187 ; Verify that log10(42.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
188 ; CHECK-LABEL: f13
anatofuz
parents:
diff changeset
189 ; CHECK: call double @llvm.experimental.constrained.log10
anatofuz
parents:
diff changeset
190 define double @f13() #0 {
anatofuz
parents:
diff changeset
191 entry:
anatofuz
parents:
diff changeset
192 %result = call double @llvm.experimental.constrained.log10.f64(double 42.0,
anatofuz
parents:
diff changeset
193 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
194 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
195 ret double %result
anatofuz
parents:
diff changeset
196 }
anatofuz
parents:
diff changeset
197
anatofuz
parents:
diff changeset
198 ; Verify that log2(42.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
199 ; CHECK-LABEL: f14
anatofuz
parents:
diff changeset
200 ; CHECK: call double @llvm.experimental.constrained.log2
anatofuz
parents:
diff changeset
201 define double @f14() #0 {
anatofuz
parents:
diff changeset
202 entry:
anatofuz
parents:
diff changeset
203 %result = call double @llvm.experimental.constrained.log2.f64(double 42.0,
anatofuz
parents:
diff changeset
204 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
205 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
206 ret double %result
anatofuz
parents:
diff changeset
207 }
anatofuz
parents:
diff changeset
208
anatofuz
parents:
diff changeset
209 ; Verify that rint(42.1) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
210 ; CHECK-LABEL: f15
anatofuz
parents:
diff changeset
211 ; CHECK: call double @llvm.experimental.constrained.rint
anatofuz
parents:
diff changeset
212 define double @f15() #0 {
anatofuz
parents:
diff changeset
213 entry:
anatofuz
parents:
diff changeset
214 %result = call double @llvm.experimental.constrained.rint.f64(double 42.1,
anatofuz
parents:
diff changeset
215 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
216 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
217 ret double %result
anatofuz
parents:
diff changeset
218 }
anatofuz
parents:
diff changeset
219
anatofuz
parents:
diff changeset
220 ; Verify that nearbyint(42.1) isn't simplified when the rounding mode is
anatofuz
parents:
diff changeset
221 ; unknown.
anatofuz
parents:
diff changeset
222 ; CHECK-LABEL: f16
anatofuz
parents:
diff changeset
223 ; CHECK: call double @llvm.experimental.constrained.nearbyint
anatofuz
parents:
diff changeset
224 define double @f16() #0 {
anatofuz
parents:
diff changeset
225 entry:
anatofuz
parents:
diff changeset
226 %result = call double @llvm.experimental.constrained.nearbyint.f64(
anatofuz
parents:
diff changeset
227 double 42.1,
anatofuz
parents:
diff changeset
228 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
229 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
230 ret double %result
anatofuz
parents:
diff changeset
231 }
anatofuz
parents:
diff changeset
232
anatofuz
parents:
diff changeset
233 ; Verify that fma(42.1) isn't simplified when the rounding mode is
anatofuz
parents:
diff changeset
234 ; unknown.
anatofuz
parents:
diff changeset
235 ; CHECK-LABEL: f17
anatofuz
parents:
diff changeset
236 ; CHECK: call double @llvm.experimental.constrained.fma
anatofuz
parents:
diff changeset
237 define double @f17() #0 {
anatofuz
parents:
diff changeset
238 entry:
anatofuz
parents:
diff changeset
239 %result = call double @llvm.experimental.constrained.fma.f64(double 42.1, double 42.1, double 42.1,
anatofuz
parents:
diff changeset
240 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
241 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
242 ret double %result
anatofuz
parents:
diff changeset
243 }
anatofuz
parents:
diff changeset
244
anatofuz
parents:
diff changeset
245 ; Verify that fptoui(42.1) isn't simplified when the rounding mode is
anatofuz
parents:
diff changeset
246 ; unknown.
anatofuz
parents:
diff changeset
247 ; CHECK-LABEL: f18
anatofuz
parents:
diff changeset
248 ; CHECK: call zeroext i32 @llvm.experimental.constrained.fptoui
anatofuz
parents:
diff changeset
249 define zeroext i32 @f18() #0 {
anatofuz
parents:
diff changeset
250 entry:
anatofuz
parents:
diff changeset
251 %result = call zeroext i32 @llvm.experimental.constrained.fptoui.i32.f64(
anatofuz
parents:
diff changeset
252 double 42.1,
anatofuz
parents:
diff changeset
253 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
254 ret i32 %result
anatofuz
parents:
diff changeset
255 }
anatofuz
parents:
diff changeset
256
anatofuz
parents:
diff changeset
257 ; Verify that fptosi(42.1) isn't simplified when the rounding mode is
anatofuz
parents:
diff changeset
258 ; unknown.
anatofuz
parents:
diff changeset
259 ; CHECK-LABEL: f19
anatofuz
parents:
diff changeset
260 ; CHECK: call i32 @llvm.experimental.constrained.fptosi
anatofuz
parents:
diff changeset
261 define i32 @f19() #0 {
anatofuz
parents:
diff changeset
262 entry:
anatofuz
parents:
diff changeset
263 %result = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double 42.1,
anatofuz
parents:
diff changeset
264 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
265 ret i32 %result
anatofuz
parents:
diff changeset
266 }
anatofuz
parents:
diff changeset
267
anatofuz
parents:
diff changeset
268 ; Verify that fptrunc(42.1) isn't simplified when the rounding mode is
anatofuz
parents:
diff changeset
269 ; unknown.
anatofuz
parents:
diff changeset
270 ; CHECK-LABEL: f20
anatofuz
parents:
diff changeset
271 ; CHECK: call float @llvm.experimental.constrained.fptrunc
anatofuz
parents:
diff changeset
272 define float @f20() #0 {
anatofuz
parents:
diff changeset
273 entry:
anatofuz
parents:
diff changeset
274 %result = call float @llvm.experimental.constrained.fptrunc.f32.f64(
anatofuz
parents:
diff changeset
275 double 42.1,
anatofuz
parents:
diff changeset
276 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
277 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
278 ret float %result
anatofuz
parents:
diff changeset
279 }
anatofuz
parents:
diff changeset
280
anatofuz
parents:
diff changeset
281 ; Verify that fpext(42.1) isn't simplified when the rounding mode is
anatofuz
parents:
diff changeset
282 ; unknown.
anatofuz
parents:
diff changeset
283 ; CHECK-LABEL: f21
anatofuz
parents:
diff changeset
284 ; CHECK: call double @llvm.experimental.constrained.fpext
anatofuz
parents:
diff changeset
285 define double @f21() #0 {
anatofuz
parents:
diff changeset
286 entry:
anatofuz
parents:
diff changeset
287 %result = call double @llvm.experimental.constrained.fpext.f64.f32(float 42.0,
anatofuz
parents:
diff changeset
288 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
289 ret double %result
anatofuz
parents:
diff changeset
290 }
anatofuz
parents:
diff changeset
291
anatofuz
parents:
diff changeset
292 ; Verify that lrint(42.1) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
293 ; CHECK-LABEL: f22
anatofuz
parents:
diff changeset
294 ; CHECK: call i32 @llvm.experimental.constrained.lrint
anatofuz
parents:
diff changeset
295 define i32 @f22() #0 {
anatofuz
parents:
diff changeset
296 entry:
anatofuz
parents:
diff changeset
297 %result = call i32 @llvm.experimental.constrained.lrint.i32.f64(double 42.1,
anatofuz
parents:
diff changeset
298 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
299 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
300 ret i32 %result
anatofuz
parents:
diff changeset
301 }
anatofuz
parents:
diff changeset
302
anatofuz
parents:
diff changeset
303 ; Verify that lrintf(42.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
304 ; CHECK-LABEL: f23
anatofuz
parents:
diff changeset
305 ; CHECK: call i32 @llvm.experimental.constrained.lrint
anatofuz
parents:
diff changeset
306 define i32 @f23() #0 {
anatofuz
parents:
diff changeset
307 entry:
anatofuz
parents:
diff changeset
308 %result = call i32 @llvm.experimental.constrained.lrint.i32.f32(float 42.0,
anatofuz
parents:
diff changeset
309 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
310 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
311 ret i32 %result
anatofuz
parents:
diff changeset
312 }
anatofuz
parents:
diff changeset
313
anatofuz
parents:
diff changeset
314 ; Verify that llrint(42.1) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
315 ; CHECK-LABEL: f24
anatofuz
parents:
diff changeset
316 ; CHECK: call i64 @llvm.experimental.constrained.llrint
anatofuz
parents:
diff changeset
317 define i64 @f24() #0 {
anatofuz
parents:
diff changeset
318 entry:
anatofuz
parents:
diff changeset
319 %result = call i64 @llvm.experimental.constrained.llrint.i64.f64(double 42.1,
anatofuz
parents:
diff changeset
320 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
321 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
322 ret i64 %result
anatofuz
parents:
diff changeset
323 }
anatofuz
parents:
diff changeset
324
anatofuz
parents:
diff changeset
325 ; Verify that llrint(42.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
326 ; CHECK-LABEL: f25
anatofuz
parents:
diff changeset
327 ; CHECK: call i64 @llvm.experimental.constrained.llrint
anatofuz
parents:
diff changeset
328 define i64 @f25() #0 {
anatofuz
parents:
diff changeset
329 entry:
anatofuz
parents:
diff changeset
330 %result = call i64 @llvm.experimental.constrained.llrint.i64.f32(float 42.0,
anatofuz
parents:
diff changeset
331 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
332 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
333 ret i64 %result
anatofuz
parents:
diff changeset
334 }
anatofuz
parents:
diff changeset
335
anatofuz
parents:
diff changeset
336 ; Verify that lround(42.1) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
337 ; CHECK-LABEL: f26
anatofuz
parents:
diff changeset
338 ; CHECK: call i32 @llvm.experimental.constrained.lround
anatofuz
parents:
diff changeset
339 define i32 @f26() #0 {
anatofuz
parents:
diff changeset
340 entry:
anatofuz
parents:
diff changeset
341 %result = call i32 @llvm.experimental.constrained.lround.i32.f64(double 42.1,
anatofuz
parents:
diff changeset
342 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
343 ret i32 %result
anatofuz
parents:
diff changeset
344 }
anatofuz
parents:
diff changeset
345
anatofuz
parents:
diff changeset
346 ; Verify that lround(42.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
347 ; CHECK-LABEL: f27
anatofuz
parents:
diff changeset
348 ; CHECK: call i32 @llvm.experimental.constrained.lround
anatofuz
parents:
diff changeset
349 define i32 @f27() #0 {
anatofuz
parents:
diff changeset
350 entry:
anatofuz
parents:
diff changeset
351 %result = call i32 @llvm.experimental.constrained.lround.i32.f32(float 42.0,
anatofuz
parents:
diff changeset
352 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
353 ret i32 %result
anatofuz
parents:
diff changeset
354 }
anatofuz
parents:
diff changeset
355
anatofuz
parents:
diff changeset
356 ; Verify that llround(42.1) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
357 ; CHECK-LABEL: f28
anatofuz
parents:
diff changeset
358 ; CHECK: call i64 @llvm.experimental.constrained.llround
anatofuz
parents:
diff changeset
359 define i64 @f28() #0 {
anatofuz
parents:
diff changeset
360 entry:
anatofuz
parents:
diff changeset
361 %result = call i64 @llvm.experimental.constrained.llround.i64.f64(double 42.1,
anatofuz
parents:
diff changeset
362 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
363 ret i64 %result
anatofuz
parents:
diff changeset
364 }
anatofuz
parents:
diff changeset
365
anatofuz
parents:
diff changeset
366 ; Verify that llround(42.0) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
367 ; CHECK-LABEL: f29
anatofuz
parents:
diff changeset
368 ; CHECK: call i64 @llvm.experimental.constrained.llround
anatofuz
parents:
diff changeset
369 define i64 @f29() #0 {
anatofuz
parents:
diff changeset
370 entry:
anatofuz
parents:
diff changeset
371 %result = call i64 @llvm.experimental.constrained.llround.i64.f32(float 42.0,
anatofuz
parents:
diff changeset
372 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
373 ret i64 %result
anatofuz
parents:
diff changeset
374 }
anatofuz
parents:
diff changeset
375
anatofuz
parents:
diff changeset
376 ; Verify that sitofp(42) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
377 ; CHECK-LABEL: @f30
anatofuz
parents:
diff changeset
378 ; CHECK: call double @llvm.experimental.constrained.sitofp
anatofuz
parents:
diff changeset
379 define double @f30() #0 {
anatofuz
parents:
diff changeset
380 entry:
anatofuz
parents:
diff changeset
381 %result = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 42,
anatofuz
parents:
diff changeset
382 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
383 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
384 ret double %result
anatofuz
parents:
diff changeset
385 }
anatofuz
parents:
diff changeset
386
anatofuz
parents:
diff changeset
387 ; Verify that uitofp(42) isn't simplified when the rounding mode is unknown.
anatofuz
parents:
diff changeset
388 ; CHECK-LABEL: @f31
anatofuz
parents:
diff changeset
389 ; CHECK: call double @llvm.experimental.constrained.uitofp
anatofuz
parents:
diff changeset
390 define double @f31() #0 {
anatofuz
parents:
diff changeset
391 entry:
anatofuz
parents:
diff changeset
392 %result = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 42,
anatofuz
parents:
diff changeset
393 metadata !"round.dynamic",
anatofuz
parents:
diff changeset
394 metadata !"fpexcept.strict") #0
anatofuz
parents:
diff changeset
395 ret double %result
anatofuz
parents:
diff changeset
396 }
anatofuz
parents:
diff changeset
397
anatofuz
parents:
diff changeset
398 attributes #0 = { strictfp }
anatofuz
parents:
diff changeset
399
anatofuz
parents:
diff changeset
400 @llvm.fp.env = thread_local global i8 zeroinitializer, section "llvm.metadata"
anatofuz
parents:
diff changeset
401 declare double @llvm.experimental.constrained.fdiv.f64(double, double, metadata, metadata)
anatofuz
parents:
diff changeset
402 declare double @llvm.experimental.constrained.fmul.f64(double, double, metadata, metadata)
anatofuz
parents:
diff changeset
403 declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata)
anatofuz
parents:
diff changeset
404 declare double @llvm.experimental.constrained.fsub.f64(double, double, metadata, metadata)
anatofuz
parents:
diff changeset
405 declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
406 declare double @llvm.experimental.constrained.pow.f64(double, double, metadata, metadata)
anatofuz
parents:
diff changeset
407 declare double @llvm.experimental.constrained.powi.f64(double, i32, metadata, metadata)
anatofuz
parents:
diff changeset
408 declare double @llvm.experimental.constrained.sin.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
409 declare double @llvm.experimental.constrained.cos.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
410 declare double @llvm.experimental.constrained.exp.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
411 declare double @llvm.experimental.constrained.exp2.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
412 declare double @llvm.experimental.constrained.log.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
413 declare double @llvm.experimental.constrained.log10.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
414 declare double @llvm.experimental.constrained.log2.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
415 declare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
416 declare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
417 declare double @llvm.experimental.constrained.fma.f64(double, double, double, metadata, metadata)
anatofuz
parents:
diff changeset
418 declare i32 @llvm.experimental.constrained.fptosi.i32.f64(double, metadata)
anatofuz
parents:
diff changeset
419 declare i32 @llvm.experimental.constrained.fptoui.i32.f64(double, metadata)
anatofuz
parents:
diff changeset
420 declare float @llvm.experimental.constrained.fptrunc.f32.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
421 declare double @llvm.experimental.constrained.fpext.f64.f32(float, metadata)
anatofuz
parents:
diff changeset
422 declare i32 @llvm.experimental.constrained.lrint.i32.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
423 declare i32 @llvm.experimental.constrained.lrint.i32.f32(float, metadata, metadata)
anatofuz
parents:
diff changeset
424 declare i64 @llvm.experimental.constrained.llrint.i64.f64(double, metadata, metadata)
anatofuz
parents:
diff changeset
425 declare i64 @llvm.experimental.constrained.llrint.i64.f32(float, metadata, metadata)
anatofuz
parents:
diff changeset
426 declare i32 @llvm.experimental.constrained.lround.i32.f64(double, metadata)
anatofuz
parents:
diff changeset
427 declare i32 @llvm.experimental.constrained.lround.i32.f32(float, metadata)
anatofuz
parents:
diff changeset
428 declare i64 @llvm.experimental.constrained.llround.i64.f64(double, metadata)
anatofuz
parents:
diff changeset
429 declare i64 @llvm.experimental.constrained.llround.i64.f32(float, metadata)
anatofuz
parents:
diff changeset
430 declare double @llvm.experimental.constrained.sitofp.f64.i32(i32, metadata, metadata)
anatofuz
parents:
diff changeset
431 declare double @llvm.experimental.constrained.uitofp.f64.i32(i32, metadata, metadata)