57 lines · plain
1; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s2 3declare double @llvm.experimental.constrained.fma.f64(double %f1, double %f2, double %f3, metadata, metadata)4declare float @llvm.experimental.constrained.fma.f32(float %f1, float %f2, float %f3, metadata, metadata)5 6define double @f1(double %f1, double %f2, double %acc) #0 {7; CHECK-LABEL: f1:8; CHECK: wfnmadb %f0, %f0, %f2, %f49; CHECK: br %r1410 %res = call double @llvm.experimental.constrained.fma.f64 (11 double %f1, double %f2, double %acc,12 metadata !"round.dynamic",13 metadata !"fpexcept.strict") #014 %negres = fneg double %res15 ret double %negres16}17 18define double @f2(double %f1, double %f2, double %acc) #0 {19; CHECK-LABEL: f2:20; CHECK: wfnmsdb %f0, %f0, %f2, %f421; CHECK: br %r1422 %negacc = fneg double %acc23 %res = call double @llvm.experimental.constrained.fma.f64 (24 double %f1, double %f2, double %negacc,25 metadata !"round.dynamic",26 metadata !"fpexcept.strict") #027 %negres = fneg double %res28 ret double %negres29}30 31define float @f3(float %f1, float %f2, float %acc) #0 {32; CHECK-LABEL: f3:33; CHECK: wfnmasb %f0, %f0, %f2, %f434; CHECK: br %r1435 %res = call float @llvm.experimental.constrained.fma.f32 (36 float %f1, float %f2, float %acc,37 metadata !"round.dynamic",38 metadata !"fpexcept.strict") #039 %negres = fneg float %res40 ret float %negres41}42 43define float @f4(float %f1, float %f2, float %acc) #0 {44; CHECK-LABEL: f4:45; CHECK: wfnmssb %f0, %f0, %f2, %f446; CHECK: br %r1447 %negacc = fneg float %acc48 %res = call float @llvm.experimental.constrained.fma.f32 (49 float %f1, float %f2, float %negacc,50 metadata !"round.dynamic",51 metadata !"fpexcept.strict") #052 %negres = fneg float %res53 ret float %negres54}55 56attributes #0 = { strictfp }57