xref: /llvm-project/llvm/test/Assembler/fp-intrinsics-attr.ll (revision 875afa939df0bd3ede101447618e6d3bfc4692b3)
1; RUN: llvm-as < %s | llvm-dis | FileCheck %s
2
3; Test to verify that constrained intrinsics all have the strictfp attribute.
4; Ordering is from Intrinsics.td.
5
6define void @func(double %a, double %b, double %c, i32 %i) strictfp {
7; CHECK-LABEL: define void @func
8; CHECK-SAME: (double [[A:%.*]], double [[B:%.*]], double [[C:%.*]], i32 [[I:%.*]]) #[[ATTR0:[0-9]+]] {
9
10  %add = call double @llvm.experimental.constrained.fadd.f64(
11                                               double %a, double %b,
12                                               metadata !"round.dynamic",
13                                               metadata !"fpexcept.strict")
14
15  %sub = call double @llvm.experimental.constrained.fsub.f64(
16                                               double %a, double %b,
17                                               metadata !"round.dynamic",
18                                               metadata !"fpexcept.strict")
19
20  %mul = call double @llvm.experimental.constrained.fmul.f64(
21                                               double %a, double %b,
22                                               metadata !"round.dynamic",
23                                               metadata !"fpexcept.strict")
24
25  %div = call double @llvm.experimental.constrained.fdiv.f64(
26                                               double %a, double %b,
27                                               metadata !"round.dynamic",
28                                               metadata !"fpexcept.strict")
29
30  %rem = call double @llvm.experimental.constrained.frem.f64(
31                                               double %a, double %b,
32                                               metadata !"round.dynamic",
33                                               metadata !"fpexcept.strict")
34
35  %fma = call double @llvm.experimental.constrained.fma.f64(
36                                               double %a, double %b, double %c,
37                                               metadata !"round.dynamic",
38                                               metadata !"fpexcept.strict")
39
40  %fmuladd = call double @llvm.experimental.constrained.fmuladd.f64(
41                                               double %a, double %b, double %c,
42                                               metadata !"round.dynamic",
43                                               metadata !"fpexcept.strict")
44
45  %si = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %a,
46                                               metadata !"fpexcept.strict")
47
48  %ui = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %a,
49                                               metadata !"fpexcept.strict")
50
51  %sfp = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %i,
52                                               metadata !"round.dynamic",
53                                               metadata !"fpexcept.strict")
54
55  %ufp = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %i,
56                                               metadata !"round.dynamic",
57                                               metadata !"fpexcept.strict")
58
59  %fptrunc = call float @llvm.experimental.constrained.fptrunc.f32.f64(
60                                               double %a,
61                                               metadata !"round.dynamic",
62                                               metadata !"fpexcept.strict")
63
64  %ext = call double @llvm.experimental.constrained.fpext.f64.f32(
65                                               float %fptrunc,
66                                               metadata !"fpexcept.strict")
67
68  %sqrt = call double @llvm.experimental.constrained.sqrt.f64(
69                                               double %a,
70                                               metadata !"round.dynamic",
71                                               metadata !"fpexcept.strict")
72
73  %powi = call double @llvm.experimental.constrained.powi.f64(
74                                               double %a, i32 %i,
75                                               metadata !"round.dynamic",
76                                               metadata !"fpexcept.strict")
77
78  %sin = call double @llvm.experimental.constrained.sin.f64(
79                                               double %a,
80                                               metadata !"round.dynamic",
81                                               metadata !"fpexcept.strict")
82
83  %cos = call double @llvm.experimental.constrained.cos.f64(
84                                               double %a,
85                                               metadata !"round.dynamic",
86                                               metadata !"fpexcept.strict")
87
88  %tan = call double @llvm.experimental.constrained.tan.f64(
89                                               double %a,
90                                               metadata !"round.dynamic",
91                                               metadata !"fpexcept.strict")
92
93  %acos = call double @llvm.experimental.constrained.acos.f64(
94                                               double %a,
95                                               metadata !"round.dynamic",
96                                               metadata !"fpexcept.strict")
97
98  %asin = call double @llvm.experimental.constrained.asin.f64(
99                                               double %a,
100                                               metadata !"round.dynamic",
101                                               metadata !"fpexcept.strict")
102
103  %atan = call double @llvm.experimental.constrained.atan.f64(
104                                               double %a,
105                                               metadata !"round.dynamic",
106                                               metadata !"fpexcept.strict")
107
108  %atan2 = call double @llvm.experimental.constrained.atan2.f64(
109                                               double %a, double %b,
110                                               metadata !"round.dynamic",
111                                               metadata !"fpexcept.strict")
112
113  %cosh = call double @llvm.experimental.constrained.cosh.f64(
114                                               double %a,
115                                               metadata !"round.dynamic",
116                                               metadata !"fpexcept.strict")
117
118  %sinh = call double @llvm.experimental.constrained.sinh.f64(
119                                               double %a,
120                                               metadata !"round.dynamic",
121                                               metadata !"fpexcept.strict")
122
123  %tanh = call double @llvm.experimental.constrained.tanh.f64(
124                                               double %a,
125                                               metadata !"round.dynamic",
126                                               metadata !"fpexcept.strict")
127
128  %pow = call double @llvm.experimental.constrained.pow.f64(
129                                               double %a, double %b,
130                                               metadata !"round.dynamic",
131                                               metadata !"fpexcept.strict")
132
133  %log = call double @llvm.experimental.constrained.log.f64(
134                                               double %a,
135                                               metadata !"round.dynamic",
136                                               metadata !"fpexcept.strict")
137
138  %log10 = call double @llvm.experimental.constrained.log10.f64(
139                                               double %a,
140                                               metadata !"round.dynamic",
141                                               metadata !"fpexcept.strict")
142
143  %log2 = call double @llvm.experimental.constrained.log2.f64(
144                                               double %a,
145                                               metadata !"round.dynamic",
146                                               metadata !"fpexcept.strict")
147
148  %exp = call double @llvm.experimental.constrained.exp.f64(
149                                               double %a,
150                                               metadata !"round.dynamic",
151                                               metadata !"fpexcept.strict")
152
153  %exp2 = call double @llvm.experimental.constrained.exp2.f64(
154                                               double %a,
155                                               metadata !"round.dynamic",
156                                               metadata !"fpexcept.strict")
157
158  %rint = call double @llvm.experimental.constrained.rint.f64(
159                                               double %a,
160                                               metadata !"round.dynamic",
161                                               metadata !"fpexcept.strict")
162
163  %neari = call double @llvm.experimental.constrained.nearbyint.f64(
164                                               double %a,
165                                               metadata !"round.dynamic",
166                                               metadata !"fpexcept.strict")
167
168  %x32 = call i32 @llvm.experimental.constrained.lrint.i32.f64(
169                                               double %a,
170                                               metadata !"round.dynamic",
171                                               metadata !"fpexcept.strict")
172
173  %x64 = call i64 @llvm.experimental.constrained.llrint.i64.f64(
174                                               double %a,
175                                               metadata !"round.dynamic",
176                                               metadata !"fpexcept.strict")
177
178  %maxnum = call double @llvm.experimental.constrained.maxnum.f64(
179                                               double %a, double %b,
180                                               metadata !"fpexcept.strict")
181
182  %minnum = call double @llvm.experimental.constrained.minnum.f64(
183                                               double %a, double %b,
184                                               metadata !"fpexcept.strict")
185
186  %maxmum = call double @llvm.experimental.constrained.maximum.f64(
187                                               double %a, double %b,
188                                               metadata !"fpexcept.strict")
189
190  %minmum = call double @llvm.experimental.constrained.minimum.f64(
191                                               double %a, double %b,
192                                               metadata !"fpexcept.strict")
193
194  %ceil = call double @llvm.experimental.constrained.ceil.f64(
195                                               double %a,
196                                               metadata !"fpexcept.strict")
197
198  %floor = call double @llvm.experimental.constrained.floor.f64(
199                                               double %a,
200                                               metadata !"fpexcept.strict")
201
202  %y32 = call i32 @llvm.experimental.constrained.lround.i32.f64(
203                                               double %a,
204                                               metadata !"fpexcept.strict")
205
206  %y64 = call i64 @llvm.experimental.constrained.llround.i64.f64(
207                                               double %a,
208                                               metadata !"fpexcept.strict")
209
210  %round = call double @llvm.experimental.constrained.round.f64(
211                                               double %a,
212                                               metadata !"fpexcept.strict")
213
214  %roundev = call double @llvm.experimental.constrained.roundeven.f64(
215                                               double %a,
216                                               metadata !"fpexcept.strict")
217
218  %trunc = call double @llvm.experimental.constrained.trunc.f64(
219                                               double %a,
220                                               metadata !"fpexcept.strict")
221
222  %q1 = call i1 @llvm.experimental.constrained.fcmp.f64(
223                                               double %a, double %b,
224                                               metadata !"oeq",
225                                               metadata !"fpexcept.strict")
226
227  %s1 = call i1 @llvm.experimental.constrained.fcmps.f64(
228                                               double %a, double %b,
229                                               metadata !"oeq",
230                                               metadata !"fpexcept.strict")
231
232; CHECK: ret void
233  ret void
234}
235
236declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata)
237; CHECK: @llvm.experimental.constrained.fadd.f64({{.*}}) #[[ATTR1:[0-9]+]]
238
239declare double @llvm.experimental.constrained.fsub.f64(double, double, metadata, metadata)
240; CHECK: @llvm.experimental.constrained.fsub.f64({{.*}}) #[[ATTR1]]
241
242declare double @llvm.experimental.constrained.fmul.f64(double, double, metadata, metadata)
243; CHECK: @llvm.experimental.constrained.fmul.f64({{.*}}) #[[ATTR1]]
244
245declare double @llvm.experimental.constrained.fdiv.f64(double, double, metadata, metadata)
246; CHECK: @llvm.experimental.constrained.fdiv.f64({{.*}}) #[[ATTR1]]
247
248declare double @llvm.experimental.constrained.frem.f64(double, double, metadata, metadata)
249; CHECK: @llvm.experimental.constrained.frem.f64({{.*}}) #[[ATTR1]]
250
251declare double @llvm.experimental.constrained.fma.f64(double, double, double, metadata, metadata)
252; CHECK: @llvm.experimental.constrained.fma.f64({{.*}}) #[[ATTR1]]
253
254declare double @llvm.experimental.constrained.fmuladd.f64(double, double, double, metadata, metadata)
255; CHECK: @llvm.experimental.constrained.fmuladd.f64({{.*}}) #[[ATTR1]]
256
257declare i32 @llvm.experimental.constrained.fptosi.i32.f64(double, metadata)
258; CHECK: @llvm.experimental.constrained.fptosi.i32.f64({{.*}}) #[[ATTR1]]
259
260declare i32 @llvm.experimental.constrained.fptoui.i32.f64(double, metadata)
261; CHECK: @llvm.experimental.constrained.fptoui.i32.f64({{.*}}) #[[ATTR1]]
262
263declare double @llvm.experimental.constrained.sitofp.f64.i32(i32, metadata, metadata)
264; CHECK: @llvm.experimental.constrained.sitofp.f64.i32({{.*}}) #[[ATTR1]]
265
266declare double @llvm.experimental.constrained.uitofp.f64.i32(i32, metadata, metadata)
267; CHECK: @llvm.experimental.constrained.uitofp.f64.i32({{.*}}) #[[ATTR1]]
268
269declare float @llvm.experimental.constrained.fptrunc.f32.f64(double, metadata, metadata)
270; CHECK: @llvm.experimental.constrained.fptrunc.f32.f64({{.*}}) #[[ATTR1]]
271
272declare double @llvm.experimental.constrained.fpext.f64.f32(float, metadata)
273; CHECK: @llvm.experimental.constrained.fpext.f64.f32({{.*}}) #[[ATTR1]]
274
275declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadata)
276; CHECK: @llvm.experimental.constrained.sqrt.f64({{.*}}) #[[ATTR1]]
277
278declare double @llvm.experimental.constrained.powi.f64(double, i32, metadata, metadata)
279; CHECK: @llvm.experimental.constrained.powi.f64({{.*}}) #[[ATTR1]]
280
281declare double @llvm.experimental.constrained.sin.f64(double, metadata, metadata)
282; CHECK: @llvm.experimental.constrained.sin.f64({{.*}}) #[[ATTR1]]
283
284declare double @llvm.experimental.constrained.cos.f64(double, metadata, metadata)
285; CHECK: @llvm.experimental.constrained.cos.f64({{.*}}) #[[ATTR1]]
286
287declare double @llvm.experimental.constrained.tan.f64(double, metadata, metadata)
288; CHECK: @llvm.experimental.constrained.tan.f64({{.*}}) #[[ATTR1]]
289
290declare double @llvm.experimental.constrained.asin.f64(double, metadata, metadata)
291; CHECK: @llvm.experimental.constrained.asin.f64({{.*}}) #[[ATTR1]]
292
293declare double @llvm.experimental.constrained.acos.f64(double, metadata, metadata)
294; CHECK: @llvm.experimental.constrained.acos.f64({{.*}}) #[[ATTR1]]
295
296declare double @llvm.experimental.constrained.atan.f64(double, metadata, metadata)
297; CHECK: @llvm.experimental.constrained.atan.f64({{.*}}) #[[ATTR1]]
298
299declare double @llvm.experimental.constrained.atan2.f64(double, double, metadata, metadata)
300; CHECK: @llvm.experimental.constrained.atan2.f64({{.*}}) #[[ATTR1]]
301
302declare double @llvm.experimental.constrained.sinh.f64(double, metadata, metadata)
303; CHECK: @llvm.experimental.constrained.sinh.f64({{.*}}) #[[ATTR1]]
304
305declare double @llvm.experimental.constrained.cosh.f64(double, metadata, metadata)
306; CHECK: @llvm.experimental.constrained.cosh.f64({{.*}}) #[[ATTR1]]
307
308declare double @llvm.experimental.constrained.tanh.f64(double, metadata, metadata)
309; CHECK: @llvm.experimental.constrained.tanh.f64({{.*}}) #[[ATTR1]]
310
311declare double @llvm.experimental.constrained.pow.f64(double, double, metadata, metadata)
312; CHECK: @llvm.experimental.constrained.pow.f64({{.*}}) #[[ATTR1]]
313
314declare double @llvm.experimental.constrained.log.f64(double, metadata, metadata)
315; CHECK: @llvm.experimental.constrained.log.f64({{.*}}) #[[ATTR1]]
316
317declare double @llvm.experimental.constrained.log10.f64(double, metadata, metadata)
318; CHECK: @llvm.experimental.constrained.log10.f64({{.*}}) #[[ATTR1]]
319
320declare double @llvm.experimental.constrained.log2.f64(double, metadata, metadata)
321; CHECK: @llvm.experimental.constrained.log2.f64({{.*}}) #[[ATTR1]]
322
323declare double @llvm.experimental.constrained.exp.f64(double, metadata, metadata)
324; CHECK: @llvm.experimental.constrained.exp.f64({{.*}}) #[[ATTR1]]
325
326declare double @llvm.experimental.constrained.exp2.f64(double, metadata, metadata)
327; CHECK: @llvm.experimental.constrained.exp2.f64({{.*}}) #[[ATTR1]]
328
329declare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata)
330; CHECK: @llvm.experimental.constrained.rint.f64({{.*}}) #[[ATTR1]]
331
332declare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata)
333; CHECK: @llvm.experimental.constrained.nearbyint.f64({{.*}}) #[[ATTR1]]
334
335declare i32 @llvm.experimental.constrained.lrint.i32.f64(double, metadata, metadata)
336; CHECK: @llvm.experimental.constrained.lrint.i32.f64({{.*}}) #[[ATTR1]]
337
338declare i64 @llvm.experimental.constrained.llrint.i64.f64(double, metadata, metadata)
339; CHECK: @llvm.experimental.constrained.llrint.i64.f64({{.*}}) #[[ATTR1]]
340
341declare double @llvm.experimental.constrained.maxnum.f64(double, double, metadata)
342; CHECK: @llvm.experimental.constrained.maxnum.f64({{.*}}) #[[ATTR1]]
343
344declare double @llvm.experimental.constrained.minnum.f64(double, double, metadata)
345; CHECK: @llvm.experimental.constrained.minnum.f64({{.*}}) #[[ATTR1]]
346
347declare double @llvm.experimental.constrained.maximum.f64(double, double, metadata)
348; CHECK: @llvm.experimental.constrained.maximum.f64({{.*}}) #[[ATTR1]]
349
350declare double @llvm.experimental.constrained.minimum.f64(double, double, metadata)
351; CHECK: @llvm.experimental.constrained.minimum.f64({{.*}}) #[[ATTR1]]
352
353declare double @llvm.experimental.constrained.ceil.f64(double, metadata)
354; CHECK: @llvm.experimental.constrained.ceil.f64({{.*}}) #[[ATTR1]]
355
356declare double @llvm.experimental.constrained.floor.f64(double, metadata)
357; CHECK: @llvm.experimental.constrained.floor.f64({{.*}}) #[[ATTR1]]
358
359declare i32 @llvm.experimental.constrained.lround.i32.f64(double, metadata)
360; CHECK: @llvm.experimental.constrained.lround.i32.f64({{.*}}) #[[ATTR1]]
361
362declare i64 @llvm.experimental.constrained.llround.i64.f64(double, metadata)
363; CHECK: @llvm.experimental.constrained.llround.i64.f64({{.*}}) #[[ATTR1]]
364
365declare double @llvm.experimental.constrained.round.f64(double, metadata)
366; CHECK: @llvm.experimental.constrained.round.f64({{.*}}) #[[ATTR1]]
367
368declare double @llvm.experimental.constrained.roundeven.f64(double, metadata)
369; CHECK: @llvm.experimental.constrained.roundeven.f64({{.*}}) #[[ATTR1]]
370
371declare double @llvm.experimental.constrained.trunc.f64(double, metadata)
372; CHECK: @llvm.experimental.constrained.trunc.f64({{.*}}) #[[ATTR1]]
373
374declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)
375; CHECK: @llvm.experimental.constrained.fcmp.f64({{.*}}) #[[ATTR1]]
376
377declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)
378; CHECK: @llvm.experimental.constrained.fcmps.f64({{.*}}) #[[ATTR1]]
379
380; CHECK: attributes #[[ATTR0]] = {{{.*}} strictfp {{.*}}}
381; CHECK: attributes #[[ATTR1]] = { {{.*}} strictfp {{.*}} }
382
383