xref: /aosp_15_r20/external/llvm/test/CodeGen/NVPTX/fma-assoc.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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