xref: /llvm-project/llvm/test/Transforms/Inline/AMDGPU/inline-denormal-fp-math.ll (revision 19293b82c180660de9636ebe8caa01fe797fb388)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -mtriple=amdgcn-amd-amdhsa -S -passes=inline < %s | FileCheck %s
3; RUN: opt -mtriple=amdgcn-amd-amdhsa -S -passes='cgscc(inline)' < %s | FileCheck %s
4
5define i32 @func_default() {
6; CHECK-LABEL: @func_default(
7; CHECK-NEXT:    ret i32 0
8;
9  ret i32 0
10}
11
12define i32 @func_ieee_ieee() #0 {
13; CHECK-LABEL: @func_ieee_ieee(
14; CHECK-NEXT:    ret i32 1
15;
16  ret i32 1
17}
18
19define i32 @func_psz_psz() #1 {
20; CHECK-LABEL: @func_psz_psz(
21; CHECK-NEXT:    ret i32 2
22;
23  ret i32 2
24}
25
26define i32 @func_psz_ieee() #2 {
27; CHECK-LABEL: @func_psz_ieee(
28; CHECK-NEXT:    ret i32 3
29;
30  ret i32 3
31}
32
33define i32 @func_ieee_psz() #3 {
34; CHECK-LABEL: @func_ieee_psz(
35; CHECK-NEXT:    ret i32 4
36;
37  ret i32 4
38}
39
40define i32 @func_dynamic_dynamic() #4 {
41; CHECK-LABEL: @func_dynamic_dynamic(
42; CHECK-NEXT:    ret i32 5
43;
44  ret i32 5
45}
46
47define i32 @func_dynamic_ieee() #5 {
48; CHECK-LABEL: @func_dynamic_ieee(
49; CHECK-NEXT:    ret i32 6
50;
51  ret i32 6
52}
53
54define i32 @func_ieee_dynamic() #6 {
55; CHECK-LABEL: @func_ieee_dynamic(
56; CHECK-NEXT:    ret i32 7
57;
58  ret i32 7
59}
60
61define i32 @func_psz_dynamic() #7 {
62; CHECK-LABEL: @func_psz_dynamic(
63; CHECK-NEXT:    ret i32 8
64;
65  ret i32 8
66}
67
68define i32 @func_dynamic_psz() #8 {
69; CHECK-LABEL: @func_dynamic_psz(
70; CHECK-NEXT:    ret i32 9
71;
72  ret i32 9
73}
74
75define i32 @call_default_from_psz_psz() #1 {
76; CHECK-LABEL: @call_default_from_psz_psz(
77; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_default()
78; CHECK-NEXT:    ret i32 [[CALL]]
79;
80  %call = call i32 @func_default()
81  ret i32 %call
82}
83
84define i32 @call_ieee_ieee_from_ieee_ieee() #0 {
85; CHECK-LABEL: @call_ieee_ieee_from_ieee_ieee(
86; CHECK-NEXT:    ret i32 1
87;
88  %call = call i32 @func_ieee_ieee()
89  ret i32 %call
90}
91
92define i32 @call_ieee_ieee_from_psz_psz() #1 {
93; CHECK-LABEL: @call_ieee_ieee_from_psz_psz(
94; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_ieee()
95; CHECK-NEXT:    ret i32 [[CALL]]
96;
97  %call = call i32 @func_ieee_ieee()
98  ret i32 %call
99}
100
101define i32 @call_psz_psz_from_ieee_ieee() #0 {
102; CHECK-LABEL: @call_psz_psz_from_ieee_ieee(
103; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_psz()
104; CHECK-NEXT:    ret i32 [[CALL]]
105;
106  %call = call i32 @func_psz_psz()
107  ret i32 %call
108}
109
110define i32 @call_psz_psz_from_psz_psz() #1 {
111; CHECK-LABEL: @call_psz_psz_from_psz_psz(
112; CHECK-NEXT:    ret i32 2
113;
114  %call = call i32 @func_psz_psz()
115  ret i32 %call
116}
117
118define i32 @call_psz_ieee_from_psz_psz() #1 {
119; CHECK-LABEL: @call_psz_ieee_from_psz_psz(
120; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_ieee()
121; CHECK-NEXT:    ret i32 [[CALL]]
122;
123  %call = call i32 @func_psz_ieee()
124  ret i32 %call
125}
126
127define i32 @call_ieee_psz_from_psz_psz() #1 {
128; CHECK-LABEL: @call_ieee_psz_from_psz_psz(
129; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_psz()
130; CHECK-NEXT:    ret i32 [[CALL]]
131;
132  %call = call i32 @func_ieee_psz()
133  ret i32 %call
134}
135
136define i32 @call_psz_ieee_from_ieee_ieee() #0 {
137; CHECK-LABEL: @call_psz_ieee_from_ieee_ieee(
138; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_ieee()
139; CHECK-NEXT:    ret i32 [[CALL]]
140;
141  %call = call i32 @func_psz_ieee()
142  ret i32 %call
143}
144
145define i32 @call_ieee_psz_from_ieee_ieee() #0 {
146; CHECK-LABEL: @call_ieee_psz_from_ieee_ieee(
147; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_psz()
148; CHECK-NEXT:    ret i32 [[CALL]]
149;
150  %call = call i32 @func_ieee_psz()
151  ret i32 %call
152}
153
154define i32 @call_ieee_ieee_from_psz_ieee() #2 {
155; CHECK-LABEL: @call_ieee_ieee_from_psz_ieee(
156; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_ieee()
157; CHECK-NEXT:    ret i32 [[CALL]]
158;
159  %call = call i32 @func_ieee_ieee()
160  ret i32 %call
161}
162
163define i32 @call_psz_ieee_from_psz_ieee() #2 {
164; CHECK-LABEL: @call_psz_ieee_from_psz_ieee(
165; CHECK-NEXT:    ret i32 3
166;
167  %call = call i32 @func_psz_ieee()
168  ret i32 %call
169}
170
171define i32 @call_ieee_psz_from_psz_ieee() #2 {
172; CHECK-LABEL: @call_ieee_psz_from_psz_ieee(
173; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_psz()
174; CHECK-NEXT:    ret i32 [[CALL]]
175;
176  %call = call i32 @func_ieee_psz()
177  ret i32 %call
178}
179
180define i32 @call_psz_psz_from_psz_ieee() #2 {
181; CHECK-LABEL: @call_psz_psz_from_psz_ieee(
182; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_psz()
183; CHECK-NEXT:    ret i32 [[CALL]]
184;
185  %call = call i32 @func_psz_psz()
186  ret i32 %call
187}
188
189define i32 @call_ieee_ieee_from_ieee_psz() #3 {
190; CHECK-LABEL: @call_ieee_ieee_from_ieee_psz(
191; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_ieee()
192; CHECK-NEXT:    ret i32 [[CALL]]
193;
194  %call = call i32 @func_ieee_ieee()
195  ret i32 %call
196}
197
198define i32 @call_psz_ieee_from_ieee_psz() #3 {
199; CHECK-LABEL: @call_psz_ieee_from_ieee_psz(
200; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_ieee()
201; CHECK-NEXT:    ret i32 [[CALL]]
202;
203  %call = call i32 @func_psz_ieee()
204  ret i32 %call
205}
206
207define i32 @call_ieee_psz_from_ieee_psz() #3 {
208; CHECK-LABEL: @call_ieee_psz_from_ieee_psz(
209; CHECK-NEXT:    ret i32 4
210;
211  %call = call i32 @func_ieee_psz()
212  ret i32 %call
213}
214
215define i32 @call_psz_psz_from_ieee_psz() #3 {
216; CHECK-LABEL: @call_psz_psz_from_ieee_psz(
217; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_psz()
218; CHECK-NEXT:    ret i32 [[CALL]]
219;
220  %call = call i32 @func_psz_psz()
221  ret i32 %call
222}
223
224define i32 @call_dynamic_dynamic_from_ieee_ieee() #0 {
225; CHECK-LABEL: @call_dynamic_dynamic_from_ieee_ieee(
226; CHECK-NEXT:    ret i32 5
227;
228  %call = call i32 @func_dynamic_dynamic()
229  ret i32 %call
230}
231
232define i32 @call_dynamic_ieee_from_ieee_ieee() #0 {
233; CHECK-LABEL: @call_dynamic_ieee_from_ieee_ieee(
234; CHECK-NEXT:    ret i32 6
235;
236  %call = call i32 @func_dynamic_ieee()
237  ret i32 %call
238}
239
240define i32 @call_ieee_dynamic_from_ieee_ieee() #0 {
241; CHECK-LABEL: @call_ieee_dynamic_from_ieee_ieee(
242; CHECK-NEXT:    ret i32 7
243;
244  %call = call i32 @func_ieee_dynamic()
245  ret i32 %call
246}
247
248define i32 @call_dynamic_psz_from_ieee_ieee() #0 {
249; CHECK-LABEL: @call_dynamic_psz_from_ieee_ieee(
250; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_psz()
251; CHECK-NEXT:    ret i32 [[CALL]]
252;
253  %call = call i32 @func_dynamic_psz()
254  ret i32 %call
255}
256
257define i32 @call_psz_dynamic_from_ieee_ieee() #0 {
258; CHECK-LABEL: @call_psz_dynamic_from_ieee_ieee(
259; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_dynamic()
260; CHECK-NEXT:    ret i32 [[CALL]]
261;
262  %call = call i32 @func_psz_dynamic()
263  ret i32 %call
264}
265
266define i32 @call_dynamic_dynamic_from_psz_psz() #1 {
267; CHECK-LABEL: @call_dynamic_dynamic_from_psz_psz(
268; CHECK-NEXT:    ret i32 5
269;
270  %call = call i32 @func_dynamic_dynamic()
271  ret i32 %call
272}
273
274define i32 @call_ieee_dynamic_from_psz_psz() #1 {
275; CHECK-LABEL: @call_ieee_dynamic_from_psz_psz(
276; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_dynamic()
277; CHECK-NEXT:    ret i32 [[CALL]]
278;
279  %call = call i32 @func_ieee_dynamic()
280  ret i32 %call
281}
282
283define i32 @call_dynamic_ieee_from_psz_psz() #1 {
284; CHECK-LABEL: @call_dynamic_ieee_from_psz_psz(
285; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_ieee()
286; CHECK-NEXT:    ret i32 [[CALL]]
287;
288  %call = call i32 @func_dynamic_ieee()
289  ret i32 %call
290}
291
292define i32 @call_psz_dynamic_from_psz_psz() #1 {
293; CHECK-LABEL: @call_psz_dynamic_from_psz_psz(
294; CHECK-NEXT:    ret i32 8
295;
296  %call = call i32 @func_psz_dynamic()
297  ret i32 %call
298}
299
300define i32 @call_dynamic_psz_from_psz_psz() #1 {
301; CHECK-LABEL: @call_dynamic_psz_from_psz_psz(
302; CHECK-NEXT:    ret i32 9
303;
304  %call = call i32 @func_dynamic_psz()
305  ret i32 %call
306}
307
308define i32 @call_dynamic_dynamic_from_psz_ieee() #2 {
309; CHECK-LABEL: @call_dynamic_dynamic_from_psz_ieee(
310; CHECK-NEXT:    ret i32 5
311;
312  %call = call i32 @func_dynamic_dynamic()
313  ret i32 %call
314}
315
316define i32 @call_dynamic_ieee_from_psz_ieee() #2 {
317; CHECK-LABEL: @call_dynamic_ieee_from_psz_ieee(
318; CHECK-NEXT:    ret i32 6
319;
320  %call = call i32 @func_dynamic_ieee()
321  ret i32 %call
322}
323
324define i32 @call_ieee_dynamic_from_psz_ieee() #2 {
325; CHECK-LABEL: @call_ieee_dynamic_from_psz_ieee(
326; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_dynamic()
327; CHECK-NEXT:    ret i32 [[CALL]]
328;
329  %call = call i32 @func_ieee_dynamic()
330  ret i32 %call
331}
332
333define i32 @call_dynamic_psz_from_psz_ieee() #2 {
334; CHECK-LABEL: @call_dynamic_psz_from_psz_ieee(
335; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_psz()
336; CHECK-NEXT:    ret i32 [[CALL]]
337;
338  %call = call i32 @func_dynamic_psz()
339  ret i32 %call
340}
341
342define i32 @call_psz_dynamic_from_psz_ieee() #2 {
343; CHECK-LABEL: @call_psz_dynamic_from_psz_ieee(
344; CHECK-NEXT:    ret i32 8
345;
346  %call = call i32 @func_psz_dynamic()
347  ret i32 %call
348}
349
350define i32 @call_dynamic_dynamic_from_ieee_psz() #3 {
351; CHECK-LABEL: @call_dynamic_dynamic_from_ieee_psz(
352; CHECK-NEXT:    ret i32 5
353;
354  %call = call i32 @func_dynamic_dynamic()
355  ret i32 %call
356}
357
358define i32 @call_ieee_dynamic_from_ieee_psz() #3 {
359; CHECK-LABEL: @call_ieee_dynamic_from_ieee_psz(
360; CHECK-NEXT:    ret i32 7
361;
362  %call = call i32 @func_ieee_dynamic()
363  ret i32 %call
364}
365
366define i32 @call_dynamic_ieee_from_ieee_psz() #3 {
367; CHECK-LABEL: @call_dynamic_ieee_from_ieee_psz(
368; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_ieee()
369; CHECK-NEXT:    ret i32 [[CALL]]
370;
371  %call = call i32 @func_dynamic_ieee()
372  ret i32 %call
373}
374
375define i32 @call_dynamic_psz_from_ieee_psz() #3 {
376; CHECK-LABEL: @call_dynamic_psz_from_ieee_psz(
377; CHECK-NEXT:    ret i32 9
378;
379  %call = call i32 @func_dynamic_psz()
380  ret i32 %call
381}
382
383define i32 @call_psz_dynamic_from_ieee_psz() #3 {
384; CHECK-LABEL: @call_psz_dynamic_from_ieee_psz(
385; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_dynamic()
386; CHECK-NEXT:    ret i32 [[CALL]]
387;
388  %call = call i32 @func_psz_dynamic()
389  ret i32 %call
390}
391
392define i32 @call_dynamic_dynamic_from_dynamic_dynamic() #4 {
393; CHECK-LABEL: @call_dynamic_dynamic_from_dynamic_dynamic(
394; CHECK-NEXT:    ret i32 5
395;
396  %call = call i32 @func_dynamic_dynamic()
397  ret i32 %call
398}
399
400define i32 @call_ieee_ieee_from_dynamic_dynamic() #4 {
401; CHECK-LABEL: @call_ieee_ieee_from_dynamic_dynamic(
402; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_ieee()
403; CHECK-NEXT:    ret i32 [[CALL]]
404;
405  %call = call i32 @func_ieee_ieee()
406  ret i32 %call
407}
408
409define i32 @call_ieee_dynamic_from_dynamic_dynamic() #4 {
410; CHECK-LABEL: @call_ieee_dynamic_from_dynamic_dynamic(
411; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_dynamic()
412; CHECK-NEXT:    ret i32 [[CALL]]
413;
414  %call = call i32 @func_ieee_dynamic()
415  ret i32 %call
416}
417
418define i32 @call_dynamic_ieee_from_dynamic_dynamic() #4 {
419; CHECK-LABEL: @call_dynamic_ieee_from_dynamic_dynamic(
420; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_ieee()
421; CHECK-NEXT:    ret i32 [[CALL]]
422;
423  %call = call i32 @func_dynamic_ieee()
424  ret i32 %call
425}
426
427define i32 @call_psz_dynamic_from_dynamic_dynamic() #4 {
428; CHECK-LABEL: @call_psz_dynamic_from_dynamic_dynamic(
429; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_dynamic()
430; CHECK-NEXT:    ret i32 [[CALL]]
431;
432  %call = call i32 @func_psz_dynamic()
433  ret i32 %call
434}
435
436define i32 @call_dynamic_psz_from_dynamic_dynamic() #4 {
437; CHECK-LABEL: @call_dynamic_psz_from_dynamic_dynamic(
438; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_psz()
439; CHECK-NEXT:    ret i32 [[CALL]]
440;
441  %call = call i32 @func_dynamic_psz()
442  ret i32 %call
443}
444
445define i32 @call_psz_psz_from_dynamic_dynamic() #4 {
446; CHECK-LABEL: @call_psz_psz_from_dynamic_dynamic(
447; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_psz()
448; CHECK-NEXT:    ret i32 [[CALL]]
449;
450  %call = call i32 @func_psz_psz()
451  ret i32 %call
452}
453
454define i32 @call_psz_ieee_from_dynamic_dynamic() #4 {
455; CHECK-LABEL: @call_psz_ieee_from_dynamic_dynamic(
456; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_ieee()
457; CHECK-NEXT:    ret i32 [[CALL]]
458;
459  %call = call i32 @func_psz_ieee()
460  ret i32 %call
461}
462
463define i32 @call_ieee_psz_from_dynamic_dynamic() #4 {
464; CHECK-LABEL: @call_ieee_psz_from_dynamic_dynamic(
465; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_psz()
466; CHECK-NEXT:    ret i32 [[CALL]]
467;
468  %call = call i32 @func_ieee_psz()
469  ret i32 %call
470}
471
472define i32 @call_ieee_ieee_from_dynamic_ieee() #5 {
473; CHECK-LABEL: @call_ieee_ieee_from_dynamic_ieee(
474; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_ieee()
475; CHECK-NEXT:    ret i32 [[CALL]]
476;
477  %call = call i32 @func_ieee_ieee()
478  ret i32 %call
479}
480
481define i32 @call_ieee_dynamic_from_dynamic_ieee() #5 {
482; CHECK-LABEL: @call_ieee_dynamic_from_dynamic_ieee(
483; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_dynamic()
484; CHECK-NEXT:    ret i32 [[CALL]]
485;
486  %call = call i32 @func_ieee_dynamic()
487  ret i32 %call
488}
489
490define i32 @call_dynamic_ieee_from_dynamic_ieee() #5 {
491; CHECK-LABEL: @call_dynamic_ieee_from_dynamic_ieee(
492; CHECK-NEXT:    ret i32 6
493;
494  %call = call i32 @func_dynamic_ieee()
495  ret i32 %call
496}
497
498define i32 @call_psz_dynamic_from_dynamic_ieee() #5 {
499; CHECK-LABEL: @call_psz_dynamic_from_dynamic_ieee(
500; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_dynamic()
501; CHECK-NEXT:    ret i32 [[CALL]]
502;
503  %call = call i32 @func_psz_dynamic()
504  ret i32 %call
505}
506
507define i32 @call_dynamic_psz_from_dynamic_ieee() #5 {
508; CHECK-LABEL: @call_dynamic_psz_from_dynamic_ieee(
509; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_psz()
510; CHECK-NEXT:    ret i32 [[CALL]]
511;
512  %call = call i32 @func_dynamic_psz()
513  ret i32 %call
514}
515
516define i32 @call_psz_psz_from_dynamic_ieee() #5 {
517; CHECK-LABEL: @call_psz_psz_from_dynamic_ieee(
518; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_psz()
519; CHECK-NEXT:    ret i32 [[CALL]]
520;
521  %call = call i32 @func_psz_psz()
522  ret i32 %call
523}
524
525define i32 @call_psz_ieee_from_dynamic_ieee() #5 {
526; CHECK-LABEL: @call_psz_ieee_from_dynamic_ieee(
527; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_ieee()
528; CHECK-NEXT:    ret i32 [[CALL]]
529;
530  %call = call i32 @func_psz_ieee()
531  ret i32 %call
532}
533
534define i32 @call_ieee_psz_from_dynamic_ieee() #5 {
535; CHECK-LABEL: @call_ieee_psz_from_dynamic_ieee(
536; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_psz()
537; CHECK-NEXT:    ret i32 [[CALL]]
538;
539  %call = call i32 @func_ieee_psz()
540  ret i32 %call
541}
542
543define i32 @call_ieee_ieee_from_ieee_dynamic() #6 {
544; CHECK-LABEL: @call_ieee_ieee_from_ieee_dynamic(
545; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_ieee()
546; CHECK-NEXT:    ret i32 [[CALL]]
547;
548  %call = call i32 @func_ieee_ieee()
549  ret i32 %call
550}
551
552define i32 @call_ieee_dynamic_from_ieee_dynamic() #6 {
553; CHECK-LABEL: @call_ieee_dynamic_from_ieee_dynamic(
554; CHECK-NEXT:    ret i32 7
555;
556  %call = call i32 @func_ieee_dynamic()
557  ret i32 %call
558}
559
560define i32 @call_dynamic_ieee_from_ieee_dynamic() #6 {
561; CHECK-LABEL: @call_dynamic_ieee_from_ieee_dynamic(
562; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_ieee()
563; CHECK-NEXT:    ret i32 [[CALL]]
564;
565  %call = call i32 @func_dynamic_ieee()
566  ret i32 %call
567}
568
569define i32 @call_dynamic_dynamic_from_ieee_dynamic() #6 {
570; CHECK-LABEL: @call_dynamic_dynamic_from_ieee_dynamic(
571; CHECK-NEXT:    ret i32 5
572;
573  %call = call i32 @func_dynamic_dynamic()
574  ret i32 %call
575}
576
577define i32 @call_dynamic_psz_from_ieee_dynamic() #6 {
578; CHECK-LABEL: @call_dynamic_psz_from_ieee_dynamic(
579; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_psz()
580; CHECK-NEXT:    ret i32 [[CALL]]
581;
582  %call = call i32 @func_dynamic_psz()
583  ret i32 %call
584}
585
586define i32 @call_psz_dynamic_from_ieee_dynamic() #6 {
587; CHECK-LABEL: @call_psz_dynamic_from_ieee_dynamic(
588; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_dynamic()
589; CHECK-NEXT:    ret i32 [[CALL]]
590;
591  %call = call i32 @func_psz_dynamic()
592  ret i32 %call
593}
594
595define i32 @call_psz_psz_from_ieee_dynamic() #6 {
596; CHECK-LABEL: @call_psz_psz_from_ieee_dynamic(
597; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_psz()
598; CHECK-NEXT:    ret i32 [[CALL]]
599;
600  %call = call i32 @func_psz_psz()
601  ret i32 %call
602}
603
604define i32 @call_psz_ieee_from_ieee_dynamic() #6 {
605; CHECK-LABEL: @call_psz_ieee_from_ieee_dynamic(
606; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_ieee()
607; CHECK-NEXT:    ret i32 [[CALL]]
608;
609  %call = call i32 @func_psz_ieee()
610  ret i32 %call
611}
612
613define i32 @call_ieee_psz_from_ieee_dynamic() #6 {
614; CHECK-LABEL: @call_ieee_psz_from_ieee_dynamic(
615; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_psz()
616; CHECK-NEXT:    ret i32 [[CALL]]
617;
618  %call = call i32 @func_ieee_psz()
619  ret i32 %call
620}
621
622define i32 @call_ieee_ieee_from_psz_dynamic() #7 {
623; CHECK-LABEL: @call_ieee_ieee_from_psz_dynamic(
624; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_ieee()
625; CHECK-NEXT:    ret i32 [[CALL]]
626;
627  %call = call i32 @func_ieee_ieee()
628  ret i32 %call
629}
630
631define i32 @call_ieee_dynamic_from_psz_dynamic() #7 {
632; CHECK-LABEL: @call_ieee_dynamic_from_psz_dynamic(
633; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_dynamic()
634; CHECK-NEXT:    ret i32 [[CALL]]
635;
636  %call = call i32 @func_ieee_dynamic()
637  ret i32 %call
638}
639
640define i32 @call_dynamic_ieee_from_psz_dynamic() #7 {
641; CHECK-LABEL: @call_dynamic_ieee_from_psz_dynamic(
642; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_ieee()
643; CHECK-NEXT:    ret i32 [[CALL]]
644;
645  %call = call i32 @func_dynamic_ieee()
646  ret i32 %call
647}
648
649define i32 @call_dynamic_psz_from_psz_dynamic() #7 {
650; CHECK-LABEL: @call_dynamic_psz_from_psz_dynamic(
651; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_psz()
652; CHECK-NEXT:    ret i32 [[CALL]]
653;
654  %call = call i32 @func_dynamic_psz()
655  ret i32 %call
656}
657
658define i32 @call_psz_dynamic_from_psz_dynamic() #7 {
659; CHECK-LABEL: @call_psz_dynamic_from_psz_dynamic(
660; CHECK-NEXT:    ret i32 8
661;
662  %call = call i32 @func_psz_dynamic()
663  ret i32 %call
664}
665
666define i32 @call_dynamic_dynamic_from_psz_dynamic() #7 {
667; CHECK-LABEL: @call_dynamic_dynamic_from_psz_dynamic(
668; CHECK-NEXT:    ret i32 5
669;
670  %call = call i32 @func_dynamic_dynamic()
671  ret i32 %call
672}
673
674define i32 @call_psz_ieee_from_psz_dynamic() #7 {
675; CHECK-LABEL: @call_psz_ieee_from_psz_dynamic(
676; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_ieee()
677; CHECK-NEXT:    ret i32 [[CALL]]
678;
679  %call = call i32 @func_psz_ieee()
680  ret i32 %call
681}
682
683define i32 @call_ieee_psz_from_psz_dynamic() #7 {
684; CHECK-LABEL: @call_ieee_psz_from_psz_dynamic(
685; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_psz()
686; CHECK-NEXT:    ret i32 [[CALL]]
687;
688  %call = call i32 @func_ieee_psz()
689  ret i32 %call
690}
691
692define i32 @call_psz_psz_from_psz_dynamic() #7 {
693; CHECK-LABEL: @call_psz_psz_from_psz_dynamic(
694; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_psz()
695; CHECK-NEXT:    ret i32 [[CALL]]
696;
697  %call = call i32 @func_psz_psz()
698  ret i32 %call
699}
700
701define i32 @call_ieee_ieee_from_dynamic_psz() #8 {
702; CHECK-LABEL: @call_ieee_ieee_from_dynamic_psz(
703; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_ieee()
704; CHECK-NEXT:    ret i32 [[CALL]]
705;
706  %call = call i32 @func_ieee_ieee()
707  ret i32 %call
708}
709
710define i32 @call_ieee_psz_from_dynamic_psz() #8 {
711; CHECK-LABEL: @call_ieee_psz_from_dynamic_psz(
712; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_psz()
713; CHECK-NEXT:    ret i32 [[CALL]]
714;
715  %call = call i32 @func_ieee_psz()
716  ret i32 %call
717}
718
719define i32 @call_psz_ieee_from_dynamic_psz() #8 {
720; CHECK-LABEL: @call_psz_ieee_from_dynamic_psz(
721; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_ieee()
722; CHECK-NEXT:    ret i32 [[CALL]]
723;
724  %call = call i32 @func_psz_ieee()
725  ret i32 %call
726}
727
728define i32 @call_dynamic_dynamic_from_dynamic_psz() #8 {
729; CHECK-LABEL: @call_dynamic_dynamic_from_dynamic_psz(
730; CHECK-NEXT:    ret i32 5
731;
732  %call = call i32 @func_dynamic_dynamic()
733  ret i32 %call
734}
735
736define i32 @call_dynamic_psz_from_dynamic_psz() #8 {
737; CHECK-LABEL: @call_dynamic_psz_from_dynamic_psz(
738; CHECK-NEXT:    ret i32 9
739;
740  %call = call i32 @func_dynamic_psz()
741  ret i32 %call
742}
743
744define i32 @call_psz_dynamic_from_dynamic_psz() #8 {
745; CHECK-LABEL: @call_psz_dynamic_from_dynamic_psz(
746; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_dynamic()
747; CHECK-NEXT:    ret i32 [[CALL]]
748;
749  %call = call i32 @func_psz_dynamic()
750  ret i32 %call
751}
752
753define i32 @call_dynamic_ieee_from_dynamic_psz() #8 {
754; CHECK-LABEL: @call_dynamic_ieee_from_dynamic_psz(
755; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_dynamic_ieee()
756; CHECK-NEXT:    ret i32 [[CALL]]
757;
758  %call = call i32 @func_dynamic_ieee()
759  ret i32 %call
760}
761
762define i32 @call_ieee_dynamic_from_dynamic_psz() #8 {
763; CHECK-LABEL: @call_ieee_dynamic_from_dynamic_psz(
764; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_ieee_dynamic()
765; CHECK-NEXT:    ret i32 [[CALL]]
766;
767  %call = call i32 @func_ieee_dynamic()
768  ret i32 %call
769}
770
771define i32 @call_psz_psz_from_dynamic_psz() #8 {
772; CHECK-LABEL: @call_psz_psz_from_dynamic_psz(
773; CHECK-NEXT:    [[CALL:%.*]] = call i32 @func_psz_psz()
774; CHECK-NEXT:    ret i32 [[CALL]]
775;
776  %call = call i32 @func_psz_psz()
777  ret i32 %call
778}
779
780; --------------------------------------------------------------------
781; denormal-fp-math-f32
782; --------------------------------------------------------------------
783
784define i32 @func_dynamic_dynamic_f32() #9 {
785; CHECK-LABEL: @func_dynamic_dynamic_f32(
786; CHECK-NEXT:    ret i32 10
787;
788  ret i32 10
789}
790
791define i32 @func_psz_psz_f32() #10 {
792; CHECK-LABEL: @func_psz_psz_f32(
793; CHECK-NEXT:    ret i32 11
794;
795  ret i32 11
796}
797
798define i32 @func_dynamic_dynamic_psz_psz_f32() #12 {
799; CHECK-LABEL: @func_dynamic_dynamic_psz_psz_f32(
800; CHECK-NEXT:    ret i32 12
801;
802  ret i32 12
803}
804
805define i32 @call_dynamic_dynamic_f32_from_psz_psz_f32() #10 {
806; CHECK-LABEL: @call_dynamic_dynamic_f32_from_psz_psz_f32(
807; CHECK-NEXT:    ret i32 10
808;
809  %result = call i32 @func_dynamic_dynamic_f32()
810  ret i32 %result
811}
812
813define i32 @call_psz_psz_from_psz_psz_f32() #10 {
814; CHECK-LABEL: @call_psz_psz_from_psz_psz_f32(
815; CHECK-NEXT:    ret i32 10
816;
817  %result = call i32 @func_dynamic_dynamic_f32()
818  ret i32 %result
819}
820
821define i32 @call_psz_psz_from_ieee_ieee_f32() #11 {
822; CHECK-LABEL: @call_psz_psz_from_ieee_ieee_f32(
823; CHECK-NEXT:    [[RESULT:%.*]] = call i32 @func_psz_psz_f32()
824; CHECK-NEXT:    ret i32 [[RESULT]]
825;
826  %result = call i32 @func_psz_psz_f32()
827  ret i32 %result
828}
829
830define i32 @call_dynamic_dynamic_from_psz_psz_f32() #10 {
831; CHECK-LABEL: @call_dynamic_dynamic_from_psz_psz_f32(
832; CHECK-NEXT:    ret i32 5
833;
834  %result = call i32 @func_dynamic_dynamic()
835  ret i32 %result
836}
837
838define i32 @call_dynamic_dynamic_f32_from_psz_psz() #1 {
839; CHECK-LABEL: @call_dynamic_dynamic_f32_from_psz_psz(
840; CHECK-NEXT:    [[RESULT:%.*]] = call i32 @func_dynamic_dynamic_f32()
841; CHECK-NEXT:    ret i32 [[RESULT]]
842;
843  %result = call i32 @func_dynamic_dynamic_f32()
844  ret i32 %result
845}
846
847define i32 @call_psz_psz_f32_from_psz_psz() #1 {
848; CHECK-LABEL: @call_psz_psz_f32_from_psz_psz(
849; CHECK-NEXT:    [[RESULT:%.*]] = call i32 @func_psz_psz_f32()
850; CHECK-NEXT:    ret i32 [[RESULT]]
851;
852  %result = call i32 @func_psz_psz_f32()
853  ret i32 %result
854}
855
856define i32 @call_dynamic_dynamic_psz_psz_f32_from_psz_psz() #1 {
857; CHECK-LABEL: @call_dynamic_dynamic_psz_psz_f32_from_psz_psz(
858; CHECK-NEXT:    ret i32 12
859;
860  %result = call i32 @func_dynamic_dynamic_psz_psz_f32()
861  ret i32 %result
862}
863
864attributes #0 = { "denormal-fp-math"="ieee,ieee" }
865attributes #1 = { "denormal-fp-math"="preserve-sign,preserve-sign" }
866attributes #2 = { "denormal-fp-math"="preserve-sign,ieee" }
867attributes #3 = { "denormal-fp-math"="ieee,preserve-sign" }
868attributes #4 = { "denormal-fp-math"="dynamic,dynamic" }
869attributes #5 = { "denormal-fp-math"="dynamic,ieee" }
870attributes #6 = { "denormal-fp-math"="ieee,dynamic" }
871attributes #7 = { "denormal-fp-math"="preserve-sign,dynamic" }
872attributes #8 = { "denormal-fp-math"="dynamic,preserve-sign" }
873attributes #9 = { "denormal-fp-math-f32"="dynamic,dynamic" }
874attributes #10 = { "denormal-fp-math-f32"="preserve-sign,preserve-sign" }
875attributes #11 = { "denormal-fp-math-f32"="ieee,ieee" "denormal-fp-math"="preserve-sign,preserve-sign" }
876attributes #12 = { "denormal-fp-math"="dynamic,dynamic" "denormal-fp-math-f32"="preserve-sign,preserve-sign" }
877