xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/fma.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i386-apple-darwin10  -mattr=+fma,-fma4  | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA-INST
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i386-apple-darwin10  -mattr=-fma,-fma4  | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA-CALL
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -mattr=+fma,-fma4 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA-INST
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin10  -mattr=-fma,-fma4 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA-CALL
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin10  -mattr=+avx512f,-fma,-fma4 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA-INST
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86 -mcpu=bdver2 -mattr=-fma4  | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA-INST
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86 -mcpu=bdver2 -mattr=-fma,-fma4 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA-CALL
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f32:
10*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-INST: vfmadd213ss
11*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-CALL: fmaf
12*9880d681SAndroid Build Coastguard Workerdefine float @test_f32(float %a, float %b, float %c) #0 {
13*9880d681SAndroid Build Coastguard Workerentry:
14*9880d681SAndroid Build Coastguard Worker  %call = call float @llvm.fma.f32(float %a, float %b, float %c)
15*9880d681SAndroid Build Coastguard Worker  ret float %call
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f64:
19*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-INST: vfmadd213sd
20*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-CALL: fma
21*9880d681SAndroid Build Coastguard Workerdefine double @test_f64(double %a, double %b, double %c) #0 {
22*9880d681SAndroid Build Coastguard Workerentry:
23*9880d681SAndroid Build Coastguard Worker  %call = call double @llvm.fma.f64(double %a, double %b, double %c)
24*9880d681SAndroid Build Coastguard Worker  ret double %call
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f80:
28*9880d681SAndroid Build Coastguard Worker; CHECK: fmal
29*9880d681SAndroid Build Coastguard Workerdefine x86_fp80 @test_f80(x86_fp80 %a, x86_fp80 %b, x86_fp80 %c) #0 {
30*9880d681SAndroid Build Coastguard Workerentry:
31*9880d681SAndroid Build Coastguard Worker  %call = call x86_fp80 @llvm.fma.f80(x86_fp80 %a, x86_fp80 %b, x86_fp80 %c)
32*9880d681SAndroid Build Coastguard Worker  ret x86_fp80 %call
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f32_cst:
36*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vfmadd
37*9880d681SAndroid Build Coastguard Workerdefine float @test_f32_cst() #0 {
38*9880d681SAndroid Build Coastguard Workerentry:
39*9880d681SAndroid Build Coastguard Worker  %call = call float @llvm.fma.f32(float 3.0, float 3.0, float 3.0)
40*9880d681SAndroid Build Coastguard Worker  ret float %call
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.fma.f32(float, float, float)
44*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.fma.f64(double, double, double)
45*9880d681SAndroid Build Coastguard Workerdeclare x86_fp80 @llvm.fma.f80(x86_fp80, x86_fp80, x86_fp80)
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind }
48