xref: /llvm-project/llvm/test/Transforms/Attributor/nofpclass-fpext.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
4define double @ret_fpext_f32_to_f64(float %arg0) {
5; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_f32_to_f64
6; CHECK-SAME: (float [[ARG0:%.*]]) #[[ATTR0:[0-9]+]] {
7; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
8; CHECK-NEXT:    ret double [[EXT]]
9;
10  %ext = fpext float %arg0 to double
11  ret double %ext
12}
13
14define <2 x double> @ret_fpext_v2f32_to_v2f64(<2 x float> %arg0) {
15; CHECK-LABEL: define nofpclass(sub) <2 x double> @ret_fpext_v2f32_to_v2f64
16; CHECK-SAME: (<2 x float> [[ARG0:%.*]]) #[[ATTR0]] {
17; CHECK-NEXT:    [[EXT:%.*]] = fpext <2 x float> [[ARG0]] to <2 x double>
18; CHECK-NEXT:    ret <2 x double> [[EXT]]
19;
20  %ext = fpext <2 x float> %arg0 to <2 x double>
21  ret <2 x double> %ext
22}
23
24define double @ret_fpext_f32_to_f64_nonan(float nofpclass(nan) %arg0) {
25; CHECK-LABEL: define nofpclass(nan sub) double @ret_fpext_f32_to_f64_nonan
26; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR0]] {
27; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
28; CHECK-NEXT:    ret double [[EXT]]
29;
30  %ext = fpext float %arg0 to double
31  ret double %ext
32}
33
34define <2 x double> @ret_fpext_v2f32_to_v2f64_nonan(<2 x float> nofpclass(nan) %arg0) {
35; CHECK-LABEL: define nofpclass(nan sub) <2 x double> @ret_fpext_v2f32_to_v2f64_nonan
36; CHECK-SAME: (<2 x float> nofpclass(nan) [[ARG0:%.*]]) #[[ATTR0]] {
37; CHECK-NEXT:    [[EXT:%.*]] = fpext <2 x float> [[ARG0]] to <2 x double>
38; CHECK-NEXT:    ret <2 x double> [[EXT]]
39;
40  %ext = fpext <2 x float> %arg0 to <2 x double>
41  ret <2 x double> %ext
42}
43
44define double @ret_fpext_f32_to_f64_noqnan(float nofpclass(qnan) %arg0) {
45; CHECK-LABEL: define nofpclass(qnan sub) double @ret_fpext_f32_to_f64_noqnan
46; CHECK-SAME: (float nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR0]] {
47; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
48; CHECK-NEXT:    ret double [[EXT]]
49;
50  %ext = fpext float %arg0 to double
51  ret double %ext
52}
53
54define double @ret_fpext_f32_to_f64_nosnan(float nofpclass(snan) %arg0) {
55; CHECK-LABEL: define nofpclass(snan sub) double @ret_fpext_f32_to_f64_nosnan
56; CHECK-SAME: (float nofpclass(snan) [[ARG0:%.*]]) #[[ATTR0]] {
57; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
58; CHECK-NEXT:    ret double [[EXT]]
59;
60  %ext = fpext float %arg0 to double
61  ret double %ext
62}
63
64define double @ret_fpext_f32_to_f64_noinf(float nofpclass(inf) %arg0) {
65; CHECK-LABEL: define nofpclass(inf sub) double @ret_fpext_f32_to_f64_noinf
66; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR0]] {
67; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
68; CHECK-NEXT:    ret double [[EXT]]
69;
70  %ext = fpext float %arg0 to double
71  ret double %ext
72}
73
74define double @ret_fpext_f32_to_f64_nopinf(float nofpclass(pinf) %arg0) {
75; CHECK-LABEL: define nofpclass(pinf sub) double @ret_fpext_f32_to_f64_nopinf
76; CHECK-SAME: (float nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR0]] {
77; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
78; CHECK-NEXT:    ret double [[EXT]]
79;
80  %ext = fpext float %arg0 to double
81  ret double %ext
82}
83
84define double @ret_fpext_f32_to_f64_noninf(float nofpclass(ninf) %arg0) {
85; CHECK-LABEL: define nofpclass(ninf sub) double @ret_fpext_f32_to_f64_noninf
86; CHECK-SAME: (float nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR0]] {
87; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
88; CHECK-NEXT:    ret double [[EXT]]
89;
90  %ext = fpext float %arg0 to double
91  ret double %ext
92}
93
94define double @ret_fpext_f32_to_f64_nozero(float nofpclass(zero) %arg0) {
95; CHECK-LABEL: define nofpclass(zero sub) double @ret_fpext_f32_to_f64_nozero
96; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]]) #[[ATTR0]] {
97; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
98; CHECK-NEXT:    ret double [[EXT]]
99;
100  %ext = fpext float %arg0 to double
101  ret double %ext
102}
103
104define double @ret_fpext_f32_to_f64_nopzero(float nofpclass(pzero) %arg0) {
105; CHECK-LABEL: define nofpclass(pzero sub) double @ret_fpext_f32_to_f64_nopzero
106; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR0]] {
107; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
108; CHECK-NEXT:    ret double [[EXT]]
109;
110  %ext = fpext float %arg0 to double
111  ret double %ext
112}
113
114define double @ret_fpext_f32_to_f64_nonzero(float nofpclass(nzero) %arg0) {
115; CHECK-LABEL: define nofpclass(nzero sub) double @ret_fpext_f32_to_f64_nonzero
116; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR0]] {
117; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
118; CHECK-NEXT:    ret double [[EXT]]
119;
120  %ext = fpext float %arg0 to double
121  ret double %ext
122}
123
124define double @ret_fpext_f32_to_f64_nonan_noinf(float nofpclass(nan inf) %arg0) {
125; CHECK-LABEL: define nofpclass(nan inf sub) double @ret_fpext_f32_to_f64_nonan_noinf
126; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR0]] {
127; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
128; CHECK-NEXT:    ret double [[EXT]]
129;
130  %ext = fpext float %arg0 to double
131  ret double %ext
132}
133
134define double @ret_fpext_f32_to_f64_nosub(float nofpclass(sub) %arg0) {
135; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_f32_to_f64_nosub
136; CHECK-SAME: (float nofpclass(sub) [[ARG0:%.*]]) #[[ATTR0]] {
137; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
138; CHECK-NEXT:    ret double [[EXT]]
139;
140  %ext = fpext float %arg0 to double
141  ret double %ext
142}
143
144define double @ret_fpext_f32_to_f64_nonorm(float nofpclass(norm) %arg0) {
145; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_f32_to_f64_nonorm
146; CHECK-SAME: (float nofpclass(norm) [[ARG0:%.*]]) #[[ATTR0]] {
147; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
148; CHECK-NEXT:    ret double [[EXT]]
149;
150  %ext = fpext float %arg0 to double
151  ret double %ext
152}
153
154define double @ret_fpext_f32_to_f64_negonly_zero(float nofpclass(pinf pnorm psub pzero) %arg0) {
155; CHECK-LABEL: define nofpclass(pinf pzero sub pnorm) double @ret_fpext_f32_to_f64_negonly_zero
156; CHECK-SAME: (float nofpclass(pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR0]] {
157; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
158; CHECK-NEXT:    ret double [[EXT]]
159;
160  %ext = fpext float %arg0 to double
161  ret double %ext
162}
163
164define double @ret_fpext_f32_to_f64_negonly(float nofpclass(pinf pnorm psub) %arg0) {
165; CHECK-LABEL: define nofpclass(pinf sub pnorm) double @ret_fpext_f32_to_f64_negonly
166; CHECK-SAME: (float nofpclass(pinf psub pnorm) [[ARG0:%.*]]) #[[ATTR0]] {
167; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
168; CHECK-NEXT:    ret double [[EXT]]
169;
170  %ext = fpext float %arg0 to double
171  ret double %ext
172}
173
174define double @ret_fpext_f32_to_f64_negonly_ord(float nofpclass(pinf pnorm psub pzero nan) %arg0) {
175; CHECK-LABEL: define nofpclass(nan pinf pzero sub pnorm) double @ret_fpext_f32_to_f64_negonly_ord
176; CHECK-SAME: (float nofpclass(nan pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR0]] {
177; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
178; CHECK-NEXT:    ret double [[EXT]]
179;
180  %ext = fpext float %arg0 to double
181  ret double %ext
182}
183
184define double @ret_fpext_f32_to_f64_posonly_zero(float nofpclass(ninf nnorm nsub nzero) %arg0) {
185; CHECK-LABEL: define nofpclass(ninf nzero sub nnorm) double @ret_fpext_f32_to_f64_posonly_zero
186; CHECK-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR0]] {
187; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
188; CHECK-NEXT:    ret double [[EXT]]
189;
190  %ext = fpext float %arg0 to double
191  ret double %ext
192}
193
194define double @ret_fpext_f32_to_f64_posonly(float nofpclass(ninf nnorm nsub) %arg0) {
195; CHECK-LABEL: define nofpclass(ninf sub nnorm) double @ret_fpext_f32_to_f64_posonly
196; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]]) #[[ATTR0]] {
197; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
198; CHECK-NEXT:    ret double [[EXT]]
199;
200  %ext = fpext float %arg0 to double
201  ret double %ext
202}
203
204define double @ret_fpext_f32_to_f64_posonly_nan(float nofpclass(ninf nnorm nsub nzero nan) %arg0) {
205; CHECK-LABEL: define nofpclass(nan ninf nzero sub nnorm) double @ret_fpext_f32_to_f64_posonly_nan
206; CHECK-SAME: (float nofpclass(nan ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR0]] {
207; CHECK-NEXT:    [[EXT:%.*]] = fpext float [[ARG0]] to double
208; CHECK-NEXT:    ret double [[EXT]]
209;
210  %ext = fpext float %arg0 to double
211  ret double %ext
212}
213
214define float @ret_fpext_bf16_f32(bfloat %arg0) {
215; CHECK-LABEL: define float @ret_fpext_bf16_f32
216; CHECK-SAME: (bfloat [[ARG0:%.*]]) #[[ATTR0]] {
217; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
218; CHECK-NEXT:    ret float [[EXT]]
219;
220  %ext = fpext bfloat %arg0 to float
221  ret float %ext
222}
223
224define <2 x float> @ret_fpext_v2bf16_v2f32(<2 x bfloat> %arg0) {
225; CHECK-LABEL: define <2 x float> @ret_fpext_v2bf16_v2f32
226; CHECK-SAME: (<2 x bfloat> [[ARG0:%.*]]) #[[ATTR0]] {
227; CHECK-NEXT:    [[EXT:%.*]] = fpext <2 x bfloat> [[ARG0]] to <2 x float>
228; CHECK-NEXT:    ret <2 x float> [[EXT]]
229;
230  %ext = fpext <2 x bfloat> %arg0 to <2 x float>
231  ret <2 x float> %ext
232}
233
234define float @ret_fpext_bf16_f32_nonan(bfloat nofpclass(nan) %arg0) {
235; CHECK-LABEL: define nofpclass(nan) float @ret_fpext_bf16_f32_nonan
236; CHECK-SAME: (bfloat nofpclass(nan) [[ARG0:%.*]]) #[[ATTR0]] {
237; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
238; CHECK-NEXT:    ret float [[EXT]]
239;
240  %ext = fpext bfloat %arg0 to float
241  ret float %ext
242}
243
244define <2 x float> @ret_fpext_v2bf16_v2f32_nonan(<2 x bfloat> nofpclass(nan) %arg0) {
245; CHECK-LABEL: define nofpclass(nan) <2 x float> @ret_fpext_v2bf16_v2f32_nonan
246; CHECK-SAME: (<2 x bfloat> nofpclass(nan) [[ARG0:%.*]]) #[[ATTR0]] {
247; CHECK-NEXT:    [[EXT:%.*]] = fpext <2 x bfloat> [[ARG0]] to <2 x float>
248; CHECK-NEXT:    ret <2 x float> [[EXT]]
249;
250  %ext = fpext <2 x bfloat> %arg0 to <2 x float>
251  ret <2 x float> %ext
252}
253
254define float @ret_fpext_bf16_f32_noqnan(bfloat nofpclass(qnan) %arg0) {
255; CHECK-LABEL: define nofpclass(qnan) float @ret_fpext_bf16_f32_noqnan
256; CHECK-SAME: (bfloat nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR0]] {
257; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
258; CHECK-NEXT:    ret float [[EXT]]
259;
260  %ext = fpext bfloat %arg0 to float
261  ret float %ext
262}
263
264define float @ret_fpext_bf16_f32_nosnan(bfloat nofpclass(snan) %arg0) {
265; CHECK-LABEL: define nofpclass(snan) float @ret_fpext_bf16_f32_nosnan
266; CHECK-SAME: (bfloat nofpclass(snan) [[ARG0:%.*]]) #[[ATTR0]] {
267; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
268; CHECK-NEXT:    ret float [[EXT]]
269;
270  %ext = fpext bfloat %arg0 to float
271  ret float %ext
272}
273
274define float @ret_fpext_bf16_f32_noinf(bfloat nofpclass(inf) %arg0) {
275; CHECK-LABEL: define nofpclass(inf) float @ret_fpext_bf16_f32_noinf
276; CHECK-SAME: (bfloat nofpclass(inf) [[ARG0:%.*]]) #[[ATTR0]] {
277; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
278; CHECK-NEXT:    ret float [[EXT]]
279;
280  %ext = fpext bfloat %arg0 to float
281  ret float %ext
282}
283
284define float @ret_fpext_bf16_f32_nopinf(bfloat nofpclass(pinf) %arg0) {
285; CHECK-LABEL: define nofpclass(pinf) float @ret_fpext_bf16_f32_nopinf
286; CHECK-SAME: (bfloat nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR0]] {
287; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
288; CHECK-NEXT:    ret float [[EXT]]
289;
290  %ext = fpext bfloat %arg0 to float
291  ret float %ext
292}
293
294define float @ret_fpext_bf16_f32_noninf(bfloat nofpclass(ninf) %arg0) {
295; CHECK-LABEL: define nofpclass(ninf) float @ret_fpext_bf16_f32_noninf
296; CHECK-SAME: (bfloat nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR0]] {
297; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
298; CHECK-NEXT:    ret float [[EXT]]
299;
300  %ext = fpext bfloat %arg0 to float
301  ret float %ext
302}
303
304define float @ret_fpext_bf16_f32_nozero(bfloat nofpclass(zero) %arg0) {
305; CHECK-LABEL: define nofpclass(zero) float @ret_fpext_bf16_f32_nozero
306; CHECK-SAME: (bfloat nofpclass(zero) [[ARG0:%.*]]) #[[ATTR0]] {
307; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
308; CHECK-NEXT:    ret float [[EXT]]
309;
310  %ext = fpext bfloat %arg0 to float
311  ret float %ext
312}
313
314define float @ret_fpext_bf16_f32_nopzero(bfloat nofpclass(pzero) %arg0) {
315; CHECK-LABEL: define nofpclass(pzero) float @ret_fpext_bf16_f32_nopzero
316; CHECK-SAME: (bfloat nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR0]] {
317; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
318; CHECK-NEXT:    ret float [[EXT]]
319;
320  %ext = fpext bfloat %arg0 to float
321  ret float %ext
322}
323
324define float @ret_fpext_bf16_f32_nonzero(bfloat nofpclass(nzero) %arg0) {
325; CHECK-LABEL: define nofpclass(nzero) float @ret_fpext_bf16_f32_nonzero
326; CHECK-SAME: (bfloat nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR0]] {
327; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
328; CHECK-NEXT:    ret float [[EXT]]
329;
330  %ext = fpext bfloat %arg0 to float
331  ret float %ext
332}
333
334define float @ret_fpext_bf16_f32_nonan_noinf(bfloat nofpclass(nan inf) %arg0) {
335; CHECK-LABEL: define nofpclass(nan inf) float @ret_fpext_bf16_f32_nonan_noinf
336; CHECK-SAME: (bfloat nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR0]] {
337; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
338; CHECK-NEXT:    ret float [[EXT]]
339;
340  %ext = fpext bfloat %arg0 to float
341  ret float %ext
342}
343
344define float @ret_fpext_bf16_f32_nosub(bfloat nofpclass(sub) %arg0) {
345; CHECK-LABEL: define nofpclass(sub) float @ret_fpext_bf16_f32_nosub
346; CHECK-SAME: (bfloat nofpclass(sub) [[ARG0:%.*]]) #[[ATTR0]] {
347; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
348; CHECK-NEXT:    ret float [[EXT]]
349;
350  %ext = fpext bfloat %arg0 to float
351  ret float %ext
352}
353
354define float @ret_fpext_bf16_f32_nonorm(bfloat nofpclass(norm) %arg0) {
355; CHECK-LABEL: define nofpclass(norm) float @ret_fpext_bf16_f32_nonorm
356; CHECK-SAME: (bfloat nofpclass(norm) [[ARG0:%.*]]) #[[ATTR0]] {
357; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
358; CHECK-NEXT:    ret float [[EXT]]
359;
360  %ext = fpext bfloat %arg0 to float
361  ret float %ext
362}
363
364define double @ret_fpext_bf16_f64(bfloat %arg0) {
365; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_bf16_f64
366; CHECK-SAME: (bfloat [[ARG0:%.*]]) #[[ATTR0]] {
367; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
368; CHECK-NEXT:    ret double [[EXT]]
369;
370  %ext = fpext bfloat %arg0 to double
371  ret double %ext
372}
373
374define double @ret_fpext_bf16_f64_nonan(bfloat nofpclass(nan) %arg0) {
375; CHECK-LABEL: define nofpclass(nan sub) double @ret_fpext_bf16_f64_nonan
376; CHECK-SAME: (bfloat nofpclass(nan) [[ARG0:%.*]]) #[[ATTR0]] {
377; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
378; CHECK-NEXT:    ret double [[EXT]]
379;
380  %ext = fpext bfloat %arg0 to double
381  ret double %ext
382}
383
384define double @ret_fpext_bf16_f64_noqnan(bfloat nofpclass(qnan) %arg0) {
385; CHECK-LABEL: define nofpclass(qnan sub) double @ret_fpext_bf16_f64_noqnan
386; CHECK-SAME: (bfloat nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR0]] {
387; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
388; CHECK-NEXT:    ret double [[EXT]]
389;
390  %ext = fpext bfloat %arg0 to double
391  ret double %ext
392}
393
394define double @ret_fpext_bf16_f64_nosnan(bfloat nofpclass(snan) %arg0) {
395; CHECK-LABEL: define nofpclass(snan sub) double @ret_fpext_bf16_f64_nosnan
396; CHECK-SAME: (bfloat nofpclass(snan) [[ARG0:%.*]]) #[[ATTR0]] {
397; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
398; CHECK-NEXT:    ret double [[EXT]]
399;
400  %ext = fpext bfloat %arg0 to double
401  ret double %ext
402}
403
404define double @ret_fpext_bf16_f64_noinf(bfloat nofpclass(inf) %arg0) {
405; CHECK-LABEL: define nofpclass(inf sub) double @ret_fpext_bf16_f64_noinf
406; CHECK-SAME: (bfloat nofpclass(inf) [[ARG0:%.*]]) #[[ATTR0]] {
407; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
408; CHECK-NEXT:    ret double [[EXT]]
409;
410  %ext = fpext bfloat %arg0 to double
411  ret double %ext
412}
413
414define double @ret_fpext_bf16_f64_nopinf(bfloat nofpclass(pinf) %arg0) {
415; CHECK-LABEL: define nofpclass(pinf sub) double @ret_fpext_bf16_f64_nopinf
416; CHECK-SAME: (bfloat nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR0]] {
417; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
418; CHECK-NEXT:    ret double [[EXT]]
419;
420  %ext = fpext bfloat %arg0 to double
421  ret double %ext
422}
423
424define double @ret_fpext_bf16_f64_noninf(bfloat nofpclass(ninf) %arg0) {
425; CHECK-LABEL: define nofpclass(ninf sub) double @ret_fpext_bf16_f64_noninf
426; CHECK-SAME: (bfloat nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR0]] {
427; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
428; CHECK-NEXT:    ret double [[EXT]]
429;
430  %ext = fpext bfloat %arg0 to double
431  ret double %ext
432}
433
434define double @ret_fpext_bf16_f64_nozero(bfloat nofpclass(zero) %arg0) {
435; CHECK-LABEL: define nofpclass(zero sub) double @ret_fpext_bf16_f64_nozero
436; CHECK-SAME: (bfloat nofpclass(zero) [[ARG0:%.*]]) #[[ATTR0]] {
437; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
438; CHECK-NEXT:    ret double [[EXT]]
439;
440  %ext = fpext bfloat %arg0 to double
441  ret double %ext
442}
443
444define double @ret_fpext_bf16_f64_nopzero(bfloat nofpclass(pzero) %arg0) {
445; CHECK-LABEL: define nofpclass(pzero sub) double @ret_fpext_bf16_f64_nopzero
446; CHECK-SAME: (bfloat nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR0]] {
447; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
448; CHECK-NEXT:    ret double [[EXT]]
449;
450  %ext = fpext bfloat %arg0 to double
451  ret double %ext
452}
453
454define double @ret_fpext_bf16_f64_nonzero(bfloat nofpclass(nzero) %arg0) {
455; CHECK-LABEL: define nofpclass(nzero sub) double @ret_fpext_bf16_f64_nonzero
456; CHECK-SAME: (bfloat nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR0]] {
457; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
458; CHECK-NEXT:    ret double [[EXT]]
459;
460  %ext = fpext bfloat %arg0 to double
461  ret double %ext
462}
463
464define double @ret_fpext_bf16_f64_nonan_noinf(bfloat nofpclass(nan inf) %arg0) {
465; CHECK-LABEL: define nofpclass(nan inf sub) double @ret_fpext_bf16_f64_nonan_noinf
466; CHECK-SAME: (bfloat nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR0]] {
467; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
468; CHECK-NEXT:    ret double [[EXT]]
469;
470  %ext = fpext bfloat %arg0 to double
471  ret double %ext
472}
473
474define double @ret_fpext_bf16_f64_nosub(bfloat nofpclass(sub) %arg0) {
475; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_bf16_f64_nosub
476; CHECK-SAME: (bfloat nofpclass(sub) [[ARG0:%.*]]) #[[ATTR0]] {
477; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
478; CHECK-NEXT:    ret double [[EXT]]
479;
480  %ext = fpext bfloat %arg0 to double
481  ret double %ext
482}
483
484define double @ret_fpext_bf16_f64_nonorm(bfloat nofpclass(norm) %arg0) {
485; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_bf16_f64_nonorm
486; CHECK-SAME: (bfloat nofpclass(norm) [[ARG0:%.*]]) #[[ATTR0]] {
487; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
488; CHECK-NEXT:    ret double [[EXT]]
489;
490  %ext = fpext bfloat %arg0 to double
491  ret double %ext
492}
493
494define double @ret_fpext_bf16_f64_nonorm_psub(bfloat nofpclass(norm psub) %arg0) {
495; CHECK-LABEL: define nofpclass(sub pnorm) double @ret_fpext_bf16_f64_nonorm_psub
496; CHECK-SAME: (bfloat nofpclass(psub norm) [[ARG0:%.*]]) #[[ATTR0]] {
497; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
498; CHECK-NEXT:    ret double [[EXT]]
499;
500  %ext = fpext bfloat %arg0 to double
501  ret double %ext
502}
503
504define double @ret_fpext_bf16_f64_nonorm_nsub(bfloat nofpclass(norm nsub) %arg0) {
505; CHECK-LABEL: define nofpclass(sub nnorm) double @ret_fpext_bf16_f64_nonorm_nsub
506; CHECK-SAME: (bfloat nofpclass(nsub norm) [[ARG0:%.*]]) #[[ATTR0]] {
507; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
508; CHECK-NEXT:    ret double [[EXT]]
509;
510  %ext = fpext bfloat %arg0 to double
511  ret double %ext
512}
513
514define double @ret_fpext_bf16_f64_nonorm_sub(bfloat nofpclass(norm sub) %arg0) {
515; CHECK-LABEL: define nofpclass(sub norm) double @ret_fpext_bf16_f64_nonorm_sub
516; CHECK-SAME: (bfloat nofpclass(sub norm) [[ARG0:%.*]]) #[[ATTR0]] {
517; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to double
518; CHECK-NEXT:    ret double [[EXT]]
519;
520  %ext = fpext bfloat %arg0 to double
521  ret double %ext
522}
523;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
524; TUNIT: {{.*}}
525