1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=nvptx -mcpu=sm_20 -fp-contract=fast | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdeclare float @dummy_f32(float, float) #0 4*9880d681SAndroid Build Coastguard Workerdeclare double @dummy_f64(double, double) #0 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine ptx_device float @t1_f32(float %x, float %y, float %z) { 7*9880d681SAndroid Build Coastguard Worker; CHECK: fma.rn.f32 %f{{[0-9]+}}, %f{{[0-9]+}}, %f{{[0-9]+}}, %f{{[0-9]+}}; 8*9880d681SAndroid Build Coastguard Worker; CHECK: ret; 9*9880d681SAndroid Build Coastguard Worker %a = fmul float %x, %y 10*9880d681SAndroid Build Coastguard Worker %b = fadd float %a, %z 11*9880d681SAndroid Build Coastguard Worker ret float %b 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine ptx_device float @t2_f32(float %x, float %y, float %z, float %w) { 15*9880d681SAndroid Build Coastguard Worker; CHECK: fma.rn.f32 %f{{[0-9]+}}, %f{{[0-9]+}}, %f{{[0-9]+}}, %f{{[0-9]+}}; 16*9880d681SAndroid Build Coastguard Worker; CHECK: fma.rn.f32 %f{{[0-9]+}}, %f{{[0-9]+}}, %f{{[0-9]+}}, %f{{[0-9]+}}; 17*9880d681SAndroid Build Coastguard Worker; CHECK: ret; 18*9880d681SAndroid Build Coastguard Worker %a = fmul float %x, %y 19*9880d681SAndroid Build Coastguard Worker %b = fadd float %a, %z 20*9880d681SAndroid Build Coastguard Worker %c = fadd float %a, %w 21*9880d681SAndroid Build Coastguard Worker %d = call float @dummy_f32(float %b, float %c) 22*9880d681SAndroid Build Coastguard Worker ret float %d 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine ptx_device double @t1_f64(double %x, double %y, double %z) { 26*9880d681SAndroid Build Coastguard Worker; CHECK: fma.rn.f64 %fd{{[0-9]+}}, %fd{{[0-9]+}}, %fd{{[0-9]+}}, %fd{{[0-9]+}}; 27*9880d681SAndroid Build Coastguard Worker; CHECK: ret; 28*9880d681SAndroid Build Coastguard Worker %a = fmul double %x, %y 29*9880d681SAndroid Build Coastguard Worker %b = fadd double %a, %z 30*9880d681SAndroid Build Coastguard Worker ret double %b 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdefine ptx_device double @t2_f64(double %x, double %y, double %z, double %w) { 34*9880d681SAndroid Build Coastguard Worker; CHECK: fma.rn.f64 %fd{{[0-9]+}}, %fd{{[0-9]+}}, %fd{{[0-9]+}}, %fd{{[0-9]+}}; 35*9880d681SAndroid Build Coastguard Worker; CHECK: fma.rn.f64 %fd{{[0-9]+}}, %fd{{[0-9]+}}, %fd{{[0-9]+}}, %fd{{[0-9]+}}; 36*9880d681SAndroid Build Coastguard Worker; CHECK: ret; 37*9880d681SAndroid Build Coastguard Worker %a = fmul double %x, %y 38*9880d681SAndroid Build Coastguard Worker %b = fadd double %a, %z 39*9880d681SAndroid Build Coastguard Worker %c = fadd double %a, %w 40*9880d681SAndroid Build Coastguard Worker %d = call double @dummy_f64(double %b, double %c) 41*9880d681SAndroid Build Coastguard Worker ret double %d 42*9880d681SAndroid Build Coastguard Worker} 43