brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 8f2cd23 Raw
79 lines · plain
1; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s2 3declare double @llvm.fma.f64(double %f1, double %f2, double %f3)4declare float @llvm.fma.f32(float %f1, float %f2, float %f3)5declare half @llvm.fma.f16(half %f1, half %f2, half %f3)6 7define double @f1(double %f1, double %f2, double %acc) {8; CHECK-LABEL: f1:9; CHECK: wfnmadb %f0, %f0, %f2, %f410; CHECK: br %r1411  %res = call double @llvm.fma.f64 (double %f1, double %f2, double %acc)12  %negres = fneg double %res13  ret double %negres14}15 16define double @f2(double %f1, double %f2, double %acc) {17; CHECK-LABEL: f2:18; CHECK: wfnmsdb %f0, %f0, %f2, %f419; CHECK: br %r1420  %negacc = fneg double %acc21  %res = call double @llvm.fma.f64 (double %f1, double %f2, double %negacc)22  %negres = fneg double %res23  ret double %negres24}25 26define half @f3_half(half %f1, half %f2, half %acc) {27; CHECK-LABEL: f3_half:28; CHECK: brasl %r14, __extendhfsf2@PLT29; CHECK: brasl %r14, __extendhfsf2@PLT30; CHECK: brasl %r14, __extendhfsf2@PLT31; CHECK: wfmasb %f0, %f0, %f8, %f1032; CHECK: brasl %r14, __truncsfhf2@PLT33; CHECK-NOT: brasl34; CHECK:      lcdfr %f0, %f035; CHECK-NEXT: lmg36; CHECK-NEXT: br %r1437  %res = call half @llvm.fma.f16 (half %f1, half %f2, half %acc)38  %negres = fneg half %res39  ret half %negres40}41 42define float @f3(float %f1, float %f2, float %acc) {43; CHECK-LABEL: f3:44; CHECK: wfnmasb %f0, %f0, %f2, %f445; CHECK: br %r1446  %res = call float @llvm.fma.f32 (float %f1, float %f2, float %acc)47  %negres = fneg float %res48  ret float %negres49}50 51define half @f4_half(half %f1, half %f2, half %acc) {52; CHECK-LABEL: f4_half:53; CHECK-NOT: brasl54; CHECK: lcdfr %f0, %f455; CHECK: brasl %r14, __extendhfsf2@PLT56; CHECK: brasl %r14, __extendhfsf2@PLT57; CHECK: brasl %r14, __extendhfsf2@PLT58; CHECK: wfmasb %f0, %f0, %f8, %f1059; CHECK: brasl %r14, __truncsfhf2@PLT60; CHECK-NOT: brasl61; CHECK:      lcdfr %f0, %f062; CHECK-NEXT: lmg63; CHECK-NEXT: br %r1464  %negacc = fneg half %acc65  %res = call half @llvm.fma.f16 (half %f1, half %f2, half %negacc)66  %negres = fneg half %res67  ret half %negres68}69 70define float @f4(float %f1, float %f2, float %acc) {71; CHECK-LABEL: f4:72; CHECK: wfnmssb %f0, %f0, %f2, %f473; CHECK: br %r1474  %negacc = fneg float %acc75  %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc)76  %negres = fneg float %res77  ret float %negres78}79