1; RUN: llc < %s -march=nvptx | FileCheck %s --check-prefixes=CHECK,CHECK-NONAN
2; RUN: llc < %s -march=nvptx -mcpu=sm_80 | FileCheck %s --check-prefixes=CHECK,CHECK-NAN
3
4; ---- minimum ----
5
6; CHECK-LABEL: minimum_half
7define half @minimum_half(half %a) #0 {
8  ; CHECK-NONAN: setp
9  ; CHECK-NONAN: selp.b16
10  ; CHECK-NAN: min.NaN.f16
11  %p = fcmp ult half %a, 0.0
12  %x = select i1 %p, half %a, half 0.0
13  ret half %x
14}
15
16; CHECK-LABEL: minimum_float
17define float @minimum_float(float %a) #0 {
18  ; CHECK-NONAN: setp
19  ; CHECK-NONAN: selp.f32
20  ; CHECK-NAN: min.NaN.f32
21  %p = fcmp ult float %a, 0.0
22  %x = select i1 %p, float %a, float 0.0
23  ret float %x
24}
25
26; CHECK-LABEL: minimum_double
27define double @minimum_double(double %a) #0 {
28  ; CHECK-NONAN: setp
29  ; CHECK-NONAN: selp.f64
30  ; CHECK-NAN: min.NaN.f64
31  %p = fcmp ult double %a, 0.0
32  %x = select i1 %p, double %a, double 0.0
33  ret double %x
34}
35
36; CHECK-LABEL: minimum_v2half
37define <2 x half> @minimum_v2half(<2 x half> %a, <2 x half> %b) #0 {
38  ; CHECK-NONAN-DAG: setp
39  ; CHECK-NONAN-DAG: setp
40  ; CHECK-NONAN-DAG: selp.b16
41  ; CHECK-NONAN-DAG: selp.b16
42  ; CHECK-NAN: min.NaN.f16x2
43  %p = fcmp ult <2 x half> %a, zeroinitializer
44  %x = select <2 x i1> %p, <2 x half> %a, <2 x half> zeroinitializer
45  ret <2 x half> %x
46}
47
48; ---- maximum ----
49
50; CHECK-LABEL: maximum_half
51define half @maximum_half(half %a) #0 {
52  ; CHECK-NONAN: setp
53  ; CHECK-NONAN: selp.b16
54  ; CHECK-NAN: max.NaN.f16
55  %p = fcmp ugt half %a, 0.0
56  %x = select i1 %p, half %a, half 0.0
57  ret half %x
58}
59
60; CHECK-LABEL: maximum_float
61define float @maximum_float(float %a) #0 {
62  ; CHECK-NONAN: setp
63  ; CHECK-NONAN: selp.f32
64  ; CHECK-NAN: max.NaN.f32
65  %p = fcmp ugt float %a, 0.0
66  %x = select i1 %p, float %a, float 0.0
67  ret float %x
68}
69
70; CHECK-LABEL: maximum_double
71define double @maximum_double(double %a) #0 {
72  ; CHECK-NONAN: setp
73  ; CHECK-NONAN: selp.f64
74  ; CHECK-NAN: max.NaN.f64
75  %p = fcmp ugt double %a, 0.0
76  %x = select i1 %p, double %a, double 0.0
77  ret double %x
78}
79
80; CHECK-LABEL: maximum_v2half
81define <2 x half> @maximum_v2half(<2 x half> %a, <2 x half> %b) #0 {
82  ; CHECK-NONAN-DAG: setp
83  ; CHECK-NONAN-DAG: setp
84  ; CHECK-NONAN-DAG: selp.b16
85  ; CHECK-NONAN-DAG: selp.b16
86  ; CHECK-NAN: max.NaN.f16x2
87  %p = fcmp ugt <2 x half> %a, zeroinitializer
88  %x = select <2 x i1> %p, <2 x half> %a, <2 x half> zeroinitializer
89  ret <2 x half> %x
90}
91
92attributes #0 = { "no-signed-zeros-fp-math"="true" }
93