xref: /llvm-project/llvm/test/Transforms/Attributor/nofpclass-canonicalize.ll (revision d48d108bc66adb31185ee023e1eb0ccdda2065c1)
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
3
4declare float @llvm.canonicalize.f32(float)
5
6define float @ret_canonicalize(float %arg0) {
7; CHECK-LABEL: define nofpclass(snan) float @ret_canonicalize
8; CHECK-SAME: (float [[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]]
11;
12  %call = call float @llvm.canonicalize.f32(float %arg0)
13  ret float %call
14}
15
16define float @ret_canonicalize_noinf(float nofpclass(inf) %arg0) {
17; CHECK-LABEL: define nofpclass(snan inf) float @ret_canonicalize_noinf
18; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {
19; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]
20; CHECK-NEXT:    ret float [[CALL]]
21;
22  %call = call float @llvm.canonicalize.f32(float %arg0)
23  ret float %call
24}
25
26define 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(inf) [[ARG0:%.*]]) #[[ATTR2:[0-9]+]] {
29; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]
30; CHECK-NEXT:    ret float [[CALL]]
31;
32  %call = call float @llvm.canonicalize.f32(float %arg0)
33  ret float %call
34}
35
36define 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(inf) [[ARG0:%.*]]) #[[ATTR3:[0-9]+]] {
39; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]
40; CHECK-NEXT:    ret float [[CALL]]
41;
42  %call = call float @llvm.canonicalize.f32(float %arg0)
43  ret float %call
44}
45
46define 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(inf) [[ARG0:%.*]]) #[[ATTR4:[0-9]+]] {
49; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(snan inf nzero sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]
50; CHECK-NEXT:    ret float [[CALL]]
51;
52  %call = call float @llvm.canonicalize.f32(float %arg0)
53  ret float %call
54}
55
56define 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(inf) [[ARG0:%.*]]) #[[ATTR5:[0-9]+]] {
59; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]
60; CHECK-NEXT:    ret float [[CALL]]
61;
62  %call = call float @llvm.canonicalize.f32(float %arg0)
63  ret float %call
64}
65
66define 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(inf) [[ARG0:%.*]]) #[[ATTR6:[0-9]+]] {
69; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(snan inf nzero sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]
70; CHECK-NEXT:    ret float [[CALL]]
71;
72  %call = call float @llvm.canonicalize.f32(float %arg0)
73  ret float %call
74}
75
76define 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(inf) [[ARG0:%.*]]) #[[ATTR7:[0-9]+]] {
79; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]
80; CHECK-NEXT:    ret float [[CALL]]
81;
82  %call = call float @llvm.canonicalize.f32(float %arg0)
83  ret float %call
84}
85
86define 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(inf) [[ARG0:%.*]]) #[[ATTR8:[0-9]+]] {
89; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]
90; CHECK-NEXT:    ret float [[CALL]]
91;
92  %call = call float @llvm.canonicalize.f32(float %arg0)
93  ret float %call
94}
95
96define 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(inf) [[ARG0:%.*]]) #[[ATTR9:[0-9]+]] {
99; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]
100; CHECK-NEXT:    ret float [[CALL]]
101;
102  %call = call float @llvm.canonicalize.f32(float %arg0)
103  ret float %call
104}
105
106define 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]]
111;
112  %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)
113  ret float %call
114}
115
116define 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]]
121;
122  %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)
123  ret float %call
124}
125
126define 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]]
131;
132  %call = call float @llvm.canonicalize.f32(float 0.0)
133  ret float %call
134}
135
136define 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]]
141;
142  %call = call float @llvm.canonicalize.f32(float -0.0)
143  ret float %call
144}
145
146define 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]]
151;
152  %call = call float @llvm.canonicalize.f32(float 8.0)
153  ret float %call
154}
155
156define 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]]
161;
162  %call = call float @llvm.canonicalize.f32(float -8.0)
163  ret float %call
164}
165
166define 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]]
171;
172  %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)
173  ret float %call
174}
175
176define 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]]
181;
182  %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)
183  ret float %call
184}
185
186define 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]]
191;
192  %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)
193  ret float %call
194}
195
196define 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]]
201;
202  %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)
203  ret float %call
204}
205
206define 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]]
211;
212  %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)
213  ret float %call
214}
215
216define 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]]
221;
222  %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)
223  ret float %call
224}
225
226define 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]]
231;
232  %call = call float @llvm.canonicalize.f32(float 0.0)
233  ret float %call
234}
235
236define 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]]
241;
242  %call = call float @llvm.canonicalize.f32(float -0.0)
243  ret float %call
244}
245
246define 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]]
251;
252  %call = call float @llvm.canonicalize.f32(float 8.0)
253  ret float %call
254}
255
256define 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]]
261;
262  %call = call float @llvm.canonicalize.f32(float -8.0)
263  ret float %call
264}
265
266define 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]]
271;
272  %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)
273  ret float %call
274}
275
276define 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]]
281;
282  %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)
283  ret float %call
284}
285
286define 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]]
291;
292  %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)
293  ret float %call
294}
295
296define 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]]
301;
302  %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)
303  ret float %call
304}
305
306define 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]]
311;
312  %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)
313  ret float %call
314}
315
316define 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]]
321;
322  %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)
323  ret float %call
324}
325
326define 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]]
331;
332  %call = call float @llvm.canonicalize.f32(float 0.0)
333  ret float %call
334}
335
336define 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]]
341;
342  %call = call float @llvm.canonicalize.f32(float -0.0)
343  ret float %call
344}
345
346define 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]]
351;
352  %call = call float @llvm.canonicalize.f32(float 8.0)
353  ret float %call
354}
355
356define 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]]
361;
362  %call = call float @llvm.canonicalize.f32(float -8.0)
363  ret float %call
364}
365
366define 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]]
371;
372  %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)
373  ret float %call
374}
375
376define 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]]
381;
382  %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)
383  ret float %call
384}
385
386define 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]]
391;
392  %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)
393  ret float %call
394}
395
396define 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]]
401;
402  %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)
403  ret float %call
404}
405
406define 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]]
411;
412  %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)
413  ret float %call
414}
415
416define 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]]
421;
422  %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)
423  ret float %call
424}
425
426define 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]]
431;
432  %call = call float @llvm.canonicalize.f32(float 0.0)
433  ret float %call
434}
435
436define 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]]
441;
442  %call = call float @llvm.canonicalize.f32(float -0.0)
443  ret float %call
444}
445
446define 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]]
451;
452  %call = call float @llvm.canonicalize.f32(float 8.0)
453  ret float %call
454}
455
456define 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]]
461;
462  %call = call float @llvm.canonicalize.f32(float -8.0)
463  ret float %call
464}
465
466define 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]]
471;
472  %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)
473  ret float %call
474}
475
476define 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]]
481;
482  %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)
483  ret float %call
484}
485
486define 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]]
491;
492  %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)
493  ret float %call
494}
495
496define 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]]
501;
502  %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)
503  ret float %call
504}
505
506;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
507; TUNIT: {{.*}}
508