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 Workerdefine ptx_device float @t1_f32(float %x, float %y, float %z, 4*9880d681SAndroid Build Coastguard Worker float %u, float %v) { 5*9880d681SAndroid Build Coastguard Worker; CHECK: fma.rn.f32 %f{{[0-9]+}}, %f{{[0-9]+}}, %f{{[0-9]+}}, %f{{[0-9]+}}; 6*9880d681SAndroid Build Coastguard Worker; CHECK: fma.rn.f32 %f{{[0-9]+}}, %f{{[0-9]+}}, %f{{[0-9]+}}, %f{{[0-9]+}}; 7*9880d681SAndroid Build Coastguard Worker; CHECK: ret; 8*9880d681SAndroid Build Coastguard Worker %a = fmul float %x, %y 9*9880d681SAndroid Build Coastguard Worker %b = fmul float %u, %v 10*9880d681SAndroid Build Coastguard Worker %c = fadd float %a, %b 11*9880d681SAndroid Build Coastguard Worker %d = fadd float %c, %z 12*9880d681SAndroid Build Coastguard Worker ret float %d 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine ptx_device double @t1_f64(double %x, double %y, double %z, 16*9880d681SAndroid Build Coastguard Worker double %u, double %v) { 17*9880d681SAndroid Build Coastguard Worker; CHECK: fma.rn.f64 %fd{{[0-9]+}}, %fd{{[0-9]+}}, %fd{{[0-9]+}}, %fd{{[0-9]+}}; 18*9880d681SAndroid Build Coastguard Worker; CHECK: fma.rn.f64 %fd{{[0-9]+}}, %fd{{[0-9]+}}, %fd{{[0-9]+}}, %fd{{[0-9]+}}; 19*9880d681SAndroid Build Coastguard Worker; CHECK: ret; 20*9880d681SAndroid Build Coastguard Worker %a = fmul double %x, %y 21*9880d681SAndroid Build Coastguard Worker %b = fmul double %u, %v 22*9880d681SAndroid Build Coastguard Worker %c = fadd double %a, %b 23*9880d681SAndroid Build Coastguard Worker %d = fadd double %c, %z 24*9880d681SAndroid Build Coastguard Worker ret double %d 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine double @two_choices(double %val1, double %val2) { 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: two_choices( 29*9880d681SAndroid Build Coastguard Worker; CHECK: mul.f64 30*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: mul.f64 31*9880d681SAndroid Build Coastguard Worker; CHECK: fma.rn.f64 32*9880d681SAndroid Build Coastguard Worker %1 = fmul double %val1, %val2 33*9880d681SAndroid Build Coastguard Worker %2 = fmul double %1, %1 34*9880d681SAndroid Build Coastguard Worker %3 = fadd double %1, %2 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker ret double %3 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39