1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
4 declare float @llvm.canonicalize.f32(float)
6 define float @ret_canonicalize(float %arg0) {
7 ; CHECK-LABEL: define nofpclass(snan) float @ret_canonicalize
8 ; CHECK-SAME: (float nofpclass(snan) [[ARG0:%.*]]) #[[ATTR1:[0-9]+]] {
9 ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12:[0-9]+]]
10 ; CHECK-NEXT: ret float [[CALL]]
12 %call = call float @llvm.canonicalize.f32(float %arg0)
16 define float @ret_canonicalize_noinf(float nofpclass(inf) %arg0) {
17 ; CHECK-LABEL: define nofpclass(snan inf) float @ret_canonicalize_noinf
18 ; CHECK-SAME: (float nofpclass(snan inf) [[ARG0:%.*]]) #[[ATTR1]] {
19 ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12]]
20 ; CHECK-NEXT: ret float [[CALL]]
22 %call = call float @llvm.canonicalize.f32(float %arg0)
26 define float @ret_canonicalize_dynamic_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="dynamic,dynamic" {
27 ; CHECK-LABEL: define nofpclass(snan inf) float @ret_canonicalize_dynamic_denormal
28 ; CHECK-SAME: (float nofpclass(snan inf) [[ARG0:%.*]]) #[[ATTR2:[0-9]+]] {
29 ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12]]
30 ; CHECK-NEXT: ret float [[CALL]]
32 %call = call float @llvm.canonicalize.f32(float %arg0)
36 define float @ret_canonicalize_daz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="dynamic,preserve-sign" {
37 ; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_daz_denormal
38 ; CHECK-SAME: (float nofpclass(snan inf sub) [[ARG0:%.*]]) #[[ATTR3:[0-9]+]] {
39 ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12]]
40 ; CHECK-NEXT: ret float [[CALL]]
42 %call = call float @llvm.canonicalize.f32(float %arg0)
46 define float @ret_canonicalize_dapz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="dynamic,positive-zero" {
47 ; CHECK-LABEL: define nofpclass(snan inf nzero sub) float @ret_canonicalize_dapz_denormal
48 ; CHECK-SAME: (float nofpclass(snan inf nzero sub) [[ARG0:%.*]]) #[[ATTR4:[0-9]+]] {
49 ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf nzero sub) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12]]
50 ; CHECK-NEXT: ret float [[CALL]]
52 %call = call float @llvm.canonicalize.f32(float %arg0)
56 define float @ret_canonicalize_ftpz_dapz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="positive-zero,preserve-sign" {
57 ; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_ftpz_dapz_denormal
58 ; CHECK-SAME: (float nofpclass(snan inf sub) [[ARG0:%.*]]) #[[ATTR5:[0-9]+]] {
59 ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12]]
60 ; CHECK-NEXT: ret float [[CALL]]
62 %call = call float @llvm.canonicalize.f32(float %arg0)
66 define float @ret_canonicalize_ftpz_ieee_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="positive-zero,ieee" {
67 ; CHECK-LABEL: define nofpclass(snan inf nzero sub) float @ret_canonicalize_ftpz_ieee_denormal
68 ; CHECK-SAME: (float nofpclass(snan inf nzero sub) [[ARG0:%.*]]) #[[ATTR6:[0-9]+]] {
69 ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf nzero sub) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12]]
70 ; CHECK-NEXT: ret float [[CALL]]
72 %call = call float @llvm.canonicalize.f32(float %arg0)
76 define float @ret_canonicalize_ftpz_dynamic_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="positive-zero,dynamic" {
77 ; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_ftpz_dynamic_denormal
78 ; CHECK-SAME: (float nofpclass(snan inf sub) [[ARG0:%.*]]) #[[ATTR7:[0-9]+]] {
79 ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12]]
80 ; CHECK-NEXT: ret float [[CALL]]
82 %call = call float @llvm.canonicalize.f32(float %arg0)
86 define float @ret_canonicalize_ftz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="preserve-sign,dynamic" {
87 ; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_ftz_denormal
88 ; CHECK-SAME: (float nofpclass(snan inf sub) [[ARG0:%.*]]) #[[ATTR8:[0-9]+]] {
89 ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12]]
90 ; CHECK-NEXT: ret float [[CALL]]
92 %call = call float @llvm.canonicalize.f32(float %arg0)
96 define float @ret_canonicalize_ieee_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="ieee,ieee" {
97 ; CHECK-LABEL: define nofpclass(snan inf) float @ret_canonicalize_ieee_denormal
98 ; CHECK-SAME: (float nofpclass(snan inf) [[ARG0:%.*]]) #[[ATTR9:[0-9]+]] {
99 ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12]]
100 ; CHECK-NEXT: ret float [[CALL]]
102 %call = call float @llvm.canonicalize.f32(float %arg0)
106 define float @ret_canonicalize_ieee_constant_pos_denormal() "denormal-fp-math"="ieee,ieee" {
107 ; CHECK-LABEL: define noundef nofpclass(nan inf zero nsub norm) float @ret_canonicalize_ieee_constant_pos_denormal
108 ; CHECK-SAME: () #[[ATTR9]] {
109 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero nsub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]]
110 ; CHECK-NEXT: ret float [[CALL]]
112 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)
116 define float @ret_canonicalize_ieee_constant_neg_denormal() "denormal-fp-math"="ieee,ieee" {
117 ; CHECK-LABEL: define noundef nofpclass(nan inf zero psub norm) float @ret_canonicalize_ieee_constant_neg_denormal
118 ; CHECK-SAME: () #[[ATTR9]] {
119 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero psub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]]
120 ; CHECK-NEXT: ret float [[CALL]]
122 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)
126 define float @ret_canonicalize_ieee_constant_pos_zero() "denormal-fp-math"="ieee,ieee" {
127 ; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_ieee_constant_pos_zero
128 ; CHECK-SAME: () #[[ATTR9]] {
129 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]]
130 ; CHECK-NEXT: ret float [[CALL]]
132 %call = call float @llvm.canonicalize.f32(float 0.0)
136 define float @ret_canonicalize_ieee_constant_neg_zero() "denormal-fp-math"="ieee,ieee" {
137 ; CHECK-LABEL: define noundef nofpclass(nan inf pzero sub norm) float @ret_canonicalize_ieee_constant_neg_zero
138 ; CHECK-SAME: () #[[ATTR9]] {
139 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf pzero sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]]
140 ; CHECK-NEXT: ret float [[CALL]]
142 %call = call float @llvm.canonicalize.f32(float -0.0)
146 define float @ret_canonicalize_ieee_constant_pos_normal() "denormal-fp-math"="ieee,ieee" {
147 ; CHECK-LABEL: define noundef nofpclass(nan inf zero sub nnorm) float @ret_canonicalize_ieee_constant_pos_normal
148 ; CHECK-SAME: () #[[ATTR9]] {
149 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]]
150 ; CHECK-NEXT: ret float [[CALL]]
152 %call = call float @llvm.canonicalize.f32(float 8.0)
156 define float @ret_canonicalize_ieee_constant_neg_normal() "denormal-fp-math"="ieee,ieee" {
157 ; CHECK-LABEL: define noundef nofpclass(nan inf zero sub pnorm) float @ret_canonicalize_ieee_constant_neg_normal
158 ; CHECK-SAME: () #[[ATTR9]] {
159 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]]
160 ; CHECK-NEXT: ret float [[CALL]]
162 %call = call float @llvm.canonicalize.f32(float -8.0)
166 define float @ret_canonicalize_ieee_constant_pos_inf() "denormal-fp-math"="ieee,ieee" {
167 ; CHECK-LABEL: define noundef nofpclass(nan ninf zero sub norm) float @ret_canonicalize_ieee_constant_pos_inf
168 ; CHECK-SAME: () #[[ATTR9]] {
169 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf zero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]]
170 ; CHECK-NEXT: ret float [[CALL]]
172 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)
176 define float @ret_canonicalize_ieee_constant_neg_inf() "denormal-fp-math"="ieee,ieee" {
177 ; CHECK-LABEL: define noundef nofpclass(nan pinf zero sub norm) float @ret_canonicalize_ieee_constant_neg_inf
178 ; CHECK-SAME: () #[[ATTR9]] {
179 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf zero sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]]
180 ; CHECK-NEXT: ret float [[CALL]]
182 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)
186 define float @ret_canonicalize_ieee_constant_qnan() "denormal-fp-math"="ieee,ieee" {
187 ; CHECK-LABEL: define noundef nofpclass(snan inf zero sub norm) float @ret_canonicalize_ieee_constant_qnan
188 ; CHECK-SAME: () #[[ATTR9]] {
189 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf zero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]]
190 ; CHECK-NEXT: ret float [[CALL]]
192 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)
196 define float @ret_canonicalize_ieee_constant_snan() "denormal-fp-math"="ieee,ieee" {
197 ; CHECK-LABEL: define noundef nofpclass(snan inf zero sub norm) float @ret_canonicalize_ieee_constant_snan
198 ; CHECK-SAME: () #[[ATTR9]] {
199 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf zero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]]
200 ; CHECK-NEXT: ret float [[CALL]]
202 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)
206 define float @ret_canonicalize_daz_constant_pos_denormal() "denormal-fp-math"="preserve-sign,preserve-sign" {
207 ; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_pos_denormal
208 ; CHECK-SAME: () #[[ATTR10:[0-9]+]] {
209 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]]
210 ; CHECK-NEXT: ret float [[CALL]]
212 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)
216 define float @ret_canonicalize_daz_constant_neg_denormal() "denormal-fp-math"="preserve-sign,preserve-sign" {
217 ; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_neg_denormal
218 ; CHECK-SAME: () #[[ATTR10]] {
219 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]]
220 ; CHECK-NEXT: ret float [[CALL]]
222 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)
226 define float @ret_canonicalize_daz_constant_pos_zero() "denormal-fp-math"="preserve-sign,preserve-sign" {
227 ; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_pos_zero
228 ; CHECK-SAME: () #[[ATTR10]] {
229 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]]
230 ; CHECK-NEXT: ret float [[CALL]]
232 %call = call float @llvm.canonicalize.f32(float 0.0)
236 define float @ret_canonicalize_daz_constant_neg_zero() "denormal-fp-math"="preserve-sign,preserve-sign" {
237 ; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_neg_zero
238 ; CHECK-SAME: () #[[ATTR10]] {
239 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]]
240 ; CHECK-NEXT: ret float [[CALL]]
242 %call = call float @llvm.canonicalize.f32(float -0.0)
246 define float @ret_canonicalize_daz_constant_pos_normal() "denormal-fp-math"="preserve-sign,preserve-sign" {
247 ; CHECK-LABEL: define noundef nofpclass(nan inf sub nnorm) float @ret_canonicalize_daz_constant_pos_normal
248 ; CHECK-SAME: () #[[ATTR10]] {
249 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]]
250 ; CHECK-NEXT: ret float [[CALL]]
252 %call = call float @llvm.canonicalize.f32(float 8.0)
256 define float @ret_canonicalize_daz_constant_neg_normal() "denormal-fp-math"="preserve-sign,preserve-sign" {
257 ; CHECK-LABEL: define noundef nofpclass(nan inf sub pnorm) float @ret_canonicalize_daz_constant_neg_normal
258 ; CHECK-SAME: () #[[ATTR10]] {
259 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]]
260 ; CHECK-NEXT: ret float [[CALL]]
262 %call = call float @llvm.canonicalize.f32(float -8.0)
266 define float @ret_canonicalize_daz_constant_pos_inf() "denormal-fp-math"="preserve-sign,preserve-sign" {
267 ; CHECK-LABEL: define noundef nofpclass(nan ninf sub norm) float @ret_canonicalize_daz_constant_pos_inf
268 ; CHECK-SAME: () #[[ATTR10]] {
269 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]]
270 ; CHECK-NEXT: ret float [[CALL]]
272 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)
276 define float @ret_canonicalize_daz_constant_neg_inf() "denormal-fp-math"="preserve-sign,preserve-sign" {
277 ; CHECK-LABEL: define noundef nofpclass(nan pinf sub norm) float @ret_canonicalize_daz_constant_neg_inf
278 ; CHECK-SAME: () #[[ATTR10]] {
279 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]]
280 ; CHECK-NEXT: ret float [[CALL]]
282 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)
286 define float @ret_canonicalize_daz_constant_qnan() "denormal-fp-math"="preserve-sign,preserve-sign" {
287 ; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_daz_constant_qnan
288 ; CHECK-SAME: () #[[ATTR10]] {
289 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]]
290 ; CHECK-NEXT: ret float [[CALL]]
292 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)
296 define float @ret_canonicalize_daz_constant_snan() "denormal-fp-math"="preserve-sign,preserve-sign" {
297 ; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_daz_constant_snan
298 ; CHECK-SAME: () #[[ATTR10]] {
299 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]]
300 ; CHECK-NEXT: ret float [[CALL]]
302 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)
306 define float @ret_canonicalize_dapz_constant_pos_denormal() "denormal-fp-math"="positive-zero,positive-zero" {
307 ; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_pos_denormal
308 ; CHECK-SAME: () #[[ATTR11:[0-9]+]] {
309 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]]
310 ; CHECK-NEXT: ret float [[CALL]]
312 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)
316 define float @ret_canonicalize_dapz_constant_neg_denormal() "denormal-fp-math"="positive-zero,positive-zero" {
317 ; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_neg_denormal
318 ; CHECK-SAME: () #[[ATTR11]] {
319 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]]
320 ; CHECK-NEXT: ret float [[CALL]]
322 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)
326 define float @ret_canonicalize_dapz_constant_pos_zero() "denormal-fp-math"="positive-zero,positive-zero" {
327 ; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_pos_zero
328 ; CHECK-SAME: () #[[ATTR11]] {
329 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]]
330 ; CHECK-NEXT: ret float [[CALL]]
332 %call = call float @llvm.canonicalize.f32(float 0.0)
336 define float @ret_canonicalize_dapz_constant_neg_zero() "denormal-fp-math"="positive-zero,positive-zero" {
337 ; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_neg_zero
338 ; CHECK-SAME: () #[[ATTR11]] {
339 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]]
340 ; CHECK-NEXT: ret float [[CALL]]
342 %call = call float @llvm.canonicalize.f32(float -0.0)
346 define float @ret_canonicalize_dapz_constant_pos_normal() "denormal-fp-math"="positive-zero,positive-zero" {
347 ; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub nnorm) float @ret_canonicalize_dapz_constant_pos_normal
348 ; CHECK-SAME: () #[[ATTR11]] {
349 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]]
350 ; CHECK-NEXT: ret float [[CALL]]
352 %call = call float @llvm.canonicalize.f32(float 8.0)
356 define float @ret_canonicalize_dapz_constant_neg_normal() "denormal-fp-math"="positive-zero,positive-zero" {
357 ; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub pnorm) float @ret_canonicalize_dapz_constant_neg_normal
358 ; CHECK-SAME: () #[[ATTR11]] {
359 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]]
360 ; CHECK-NEXT: ret float [[CALL]]
362 %call = call float @llvm.canonicalize.f32(float -8.0)
366 define float @ret_canonicalize_dapz_constant_pos_inf() "denormal-fp-math"="positive-zero,positive-zero" {
367 ; CHECK-LABEL: define noundef nofpclass(nan ninf nzero sub norm) float @ret_canonicalize_dapz_constant_pos_inf
368 ; CHECK-SAME: () #[[ATTR11]] {
369 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]]
370 ; CHECK-NEXT: ret float [[CALL]]
372 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)
376 define float @ret_canonicalize_dapz_constant_neg_inf() "denormal-fp-math"="positive-zero,positive-zero" {
377 ; CHECK-LABEL: define noundef nofpclass(nan pinf nzero sub norm) float @ret_canonicalize_dapz_constant_neg_inf
378 ; CHECK-SAME: () #[[ATTR11]] {
379 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]]
380 ; CHECK-NEXT: ret float [[CALL]]
382 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)
386 define float @ret_canonicalize_dapz_constant_qnan() "denormal-fp-math"="positive-zero,positive-zero" {
387 ; CHECK-LABEL: define noundef nofpclass(snan inf nzero sub norm) float @ret_canonicalize_dapz_constant_qnan
388 ; CHECK-SAME: () #[[ATTR11]] {
389 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]]
390 ; CHECK-NEXT: ret float [[CALL]]
392 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)
396 define float @ret_canonicalize_dapz_constant_snan() "denormal-fp-math"="positive-zero,positive-zero" {
397 ; CHECK-LABEL: define noundef nofpclass(snan inf nzero sub norm) float @ret_canonicalize_dapz_constant_snan
398 ; CHECK-SAME: () #[[ATTR11]] {
399 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]]
400 ; CHECK-NEXT: ret float [[CALL]]
402 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)
406 define float @ret_canonicalize_dynamic_constant_pos_denormal() "denormal-fp-math"="dynamic,dynamic" {
407 ; CHECK-LABEL: define noundef nofpclass(nan inf nsub norm) float @ret_canonicalize_dynamic_constant_pos_denormal
408 ; CHECK-SAME: () #[[ATTR2]] {
409 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nsub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]]
410 ; CHECK-NEXT: ret float [[CALL]]
412 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)
416 define float @ret_canonicalize_dynamic_constant_neg_denormal() "denormal-fp-math"="dynamic,dynamic" {
417 ; CHECK-LABEL: define noundef nofpclass(nan inf psub norm) float @ret_canonicalize_dynamic_constant_neg_denormal
418 ; CHECK-SAME: () #[[ATTR2]] {
419 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf psub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]]
420 ; CHECK-NEXT: ret float [[CALL]]
422 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)
426 define float @ret_canonicalize_dynamic_constant_pos_zero() "denormal-fp-math"="dynamic,dynamic" {
427 ; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_dynamic_constant_pos_zero
428 ; CHECK-SAME: () #[[ATTR2]] {
429 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]]
430 ; CHECK-NEXT: ret float [[CALL]]
432 %call = call float @llvm.canonicalize.f32(float 0.0)
436 define float @ret_canonicalize_dynamic_constant_neg_zero() "denormal-fp-math"="dynamic,dynamic" {
437 ; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_dynamic_constant_neg_zero
438 ; CHECK-SAME: () #[[ATTR2]] {
439 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]]
440 ; CHECK-NEXT: ret float [[CALL]]
442 %call = call float @llvm.canonicalize.f32(float -0.0)
446 define float @ret_canonicalize_dynamic_constant_pos_normal() "denormal-fp-math"="dynamic,dynamic" {
447 ; CHECK-LABEL: define noundef nofpclass(nan inf sub nnorm) float @ret_canonicalize_dynamic_constant_pos_normal
448 ; CHECK-SAME: () #[[ATTR2]] {
449 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]]
450 ; CHECK-NEXT: ret float [[CALL]]
452 %call = call float @llvm.canonicalize.f32(float 8.0)
456 define float @ret_canonicalize_dynamic_constant_neg_normal() "denormal-fp-math"="dynamic,dynamic" {
457 ; CHECK-LABEL: define noundef nofpclass(nan inf sub pnorm) float @ret_canonicalize_dynamic_constant_neg_normal
458 ; CHECK-SAME: () #[[ATTR2]] {
459 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]]
460 ; CHECK-NEXT: ret float [[CALL]]
462 %call = call float @llvm.canonicalize.f32(float -8.0)
466 define float @ret_canonicalize_dynamic_constant_pos_inf() "denormal-fp-math"="dynamic,dynamic" {
467 ; CHECK-LABEL: define noundef nofpclass(nan ninf sub norm) float @ret_canonicalize_dynamic_constant_pos_inf
468 ; CHECK-SAME: () #[[ATTR2]] {
469 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]]
470 ; CHECK-NEXT: ret float [[CALL]]
472 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)
476 define float @ret_canonicalize_dynamic_constant_neg_inf() "denormal-fp-math"="dynamic,dynamic" {
477 ; CHECK-LABEL: define noundef nofpclass(nan pinf sub norm) float @ret_canonicalize_dynamic_constant_neg_inf
478 ; CHECK-SAME: () #[[ATTR2]] {
479 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]]
480 ; CHECK-NEXT: ret float [[CALL]]
482 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)
486 define float @ret_canonicalize_dynamic_constant_qnan() "denormal-fp-math"="dynamic,dynamic" {
487 ; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_dynamic_constant_qnan
488 ; CHECK-SAME: () #[[ATTR2]] {
489 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]]
490 ; CHECK-NEXT: ret float [[CALL]]
492 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)
496 define float @ret_canonicalize_dynamic_constant_snan() "denormal-fp-math"="dynamic,dynamic" {
497 ; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_dynamic_constant_snan
498 ; CHECK-SAME: () #[[ATTR2]] {
499 ; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]]
500 ; CHECK-NEXT: ret float [[CALL]]
502 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)
506 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: