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; RUN: %if ptxas %{ llc < %s -march=nvptx | %ptxas-verify %} 4; RUN: %if ptxas-11.0 %{ llc < %s -march=nvptx -mcpu=sm_80 | %ptxas-verify -arch=sm_80 %} 5 6; ---- minimum ---- 7 8; CHECK-LABEL: minimum_half 9define half @minimum_half(half %a) #0 { 10 ; CHECK-NONAN: setp 11 ; CHECK-NONAN: selp.b16 12 ; CHECK-NAN: min.NaN.f16 13 %p = fcmp ult half %a, 0.0 14 %x = select i1 %p, half %a, half 0.0 15 ret half %x 16} 17 18; CHECK-LABEL: minimum_float 19define float @minimum_float(float %a) #0 { 20 ; CHECK-NONAN: setp 21 ; CHECK-NONAN: selp.f32 22 ; CHECK-NAN: min.NaN.f32 23 %p = fcmp ult float %a, 0.0 24 %x = select i1 %p, float %a, float 0.0 25 ret float %x 26} 27 28; CHECK-LABEL: minimum_double 29define double @minimum_double(double %a) #0 { 30 ; CHECK: setp 31 ; CHECK: selp.f64 32 %p = fcmp ult double %a, 0.0 33 %x = select i1 %p, double %a, double 0.0 34 ret double %x 35} 36 37; CHECK-LABEL: minimum_v2half 38define <2 x half> @minimum_v2half(<2 x half> %a) #0 { 39 ; CHECK-NONAN-DAG: setp 40 ; CHECK-NONAN-DAG: setp 41 ; CHECK-NONAN-DAG: selp.b16 42 ; CHECK-NONAN-DAG: selp.b16 43 ; CHECK-NAN: min.NaN.f16x2 44 %p = fcmp ult <2 x half> %a, zeroinitializer 45 %x = select <2 x i1> %p, <2 x half> %a, <2 x half> zeroinitializer 46 ret <2 x half> %x 47} 48 49; ---- maximum ---- 50 51; CHECK-LABEL: maximum_half 52define half @maximum_half(half %a) #0 { 53 ; CHECK-NONAN: setp 54 ; CHECK-NONAN: selp.b16 55 ; CHECK-NAN: max.NaN.f16 56 %p = fcmp ugt half %a, 0.0 57 %x = select i1 %p, half %a, half 0.0 58 ret half %x 59} 60 61; CHECK-LABEL: maximum_float 62define float @maximum_float(float %a) #0 { 63 ; CHECK-NONAN: setp 64 ; CHECK-NONAN: selp.f32 65 ; CHECK-NAN: max.NaN.f32 66 %p = fcmp ugt float %a, 0.0 67 %x = select i1 %p, float %a, float 0.0 68 ret float %x 69} 70 71; CHECK-LABEL: maximum_double 72define double @maximum_double(double %a) #0 { 73 ; CHECK: setp 74 ; CHECK: selp.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) #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