1 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s
3 declare double @llvm.fma.f64(double %f1, double %f2, double %f3)
4 declare float @llvm.fma.f32(float %f1, float %f2, float %f3)
6 define double @f1(double %f1, double %f2, double %acc) {
8 ; CHECK: wfnmadb %f0, %f0, %f2, %f4
10 %res = call double @llvm.fma.f64 (double %f1, double %f2, double %acc)
11 %negres = fsub double -0.0, %res
15 define double @f2(double %f1, double %f2, double %acc) {
17 ; CHECK: wfnmsdb %f0, %f0, %f2, %f4
19 %negacc = fsub double -0.0, %acc
20 %res = call double @llvm.fma.f64 (double %f1, double %f2, double %negacc)
21 %negres = fsub double -0.0, %res
25 define float @f3(float %f1, float %f2, float %acc) {
27 ; CHECK: wfnmasb %f0, %f0, %f2, %f4
29 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %acc)
30 %negres = fsub float -0.0, %res
34 define float @f4(float %f1, float %f2, float %acc) {
36 ; CHECK: wfnmssb %f0, %f0, %f2, %f4
38 %negacc = fsub float -0.0, %acc
39 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc)
40 %negres = fsub float -0.0, %res