brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 246cd50 Raw
105 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mattr=fma4 | FileCheck %s3 4target triple = "x86_64-unknown-unknown"5 6declare <4 x float> @llvm.x86.fma4.vfmadd.ss(<4 x float>, <4 x float>, <4 x float>)7declare <2 x double> @llvm.x86.fma4.vfmadd.sd(<2 x double>, <2 x double>, <2 x double>)8 9define void @fmadd_aab_ss(ptr %a, ptr %b) {10; CHECK-LABEL: fmadd_aab_ss:11; CHECK:       # %bb.0:12; CHECK-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero13; CHECK-NEXT:    vfmaddss {{.*#+}} xmm0 = (xmm0 * xmm0) + mem14; CHECK-NEXT:    vmovss %xmm0, (%rdi)15; CHECK-NEXT:    retq16  %a.val = load float, ptr %a17  %av0 = insertelement <4 x float> undef, float %a.val, i32 018  %av1 = insertelement <4 x float> %av0, float 0.000000e+00, i32 119  %av2 = insertelement <4 x float> %av1, float 0.000000e+00, i32 220  %av  = insertelement <4 x float> %av2, float 0.000000e+00, i32 321 22  %b.val = load float, ptr %b23  %bv0 = insertelement <4 x float> undef, float %b.val, i32 024  %bv1 = insertelement <4 x float> %bv0, float 0.000000e+00, i32 125  %bv2 = insertelement <4 x float> %bv1, float 0.000000e+00, i32 226  %bv  = insertelement <4 x float> %bv2, float 0.000000e+00, i32 327 28  %vr = call <4 x float> @llvm.x86.fma4.vfmadd.ss(<4 x float> %av, <4 x float> %av, <4 x float> %bv)29 30  %sr = extractelement <4 x float> %vr, i32 031  store float %sr, ptr %a32  ret void33}34 35define void @fmadd_aba_ss(ptr %a, ptr %b) {36; CHECK-LABEL: fmadd_aba_ss:37; CHECK:       # %bb.0:38; CHECK-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero39; CHECK-NEXT:    vfmaddss {{.*#+}} xmm0 = (xmm0 * mem) + xmm040; CHECK-NEXT:    vmovss %xmm0, (%rdi)41; CHECK-NEXT:    retq42  %a.val = load float, ptr %a43  %av0 = insertelement <4 x float> undef, float %a.val, i32 044  %av1 = insertelement <4 x float> %av0, float 0.000000e+00, i32 145  %av2 = insertelement <4 x float> %av1, float 0.000000e+00, i32 246  %av  = insertelement <4 x float> %av2, float 0.000000e+00, i32 347 48  %b.val = load float, ptr %b49  %bv0 = insertelement <4 x float> undef, float %b.val, i32 050  %bv1 = insertelement <4 x float> %bv0, float 0.000000e+00, i32 151  %bv2 = insertelement <4 x float> %bv1, float 0.000000e+00, i32 252  %bv  = insertelement <4 x float> %bv2, float 0.000000e+00, i32 353 54  %vr = call <4 x float> @llvm.x86.fma4.vfmadd.ss(<4 x float> %av, <4 x float> %bv, <4 x float> %av)55 56  %sr = extractelement <4 x float> %vr, i32 057  store float %sr, ptr %a58  ret void59}60 61define void @fmadd_aab_sd(ptr %a, ptr %b) {62; CHECK-LABEL: fmadd_aab_sd:63; CHECK:       # %bb.0:64; CHECK-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero65; CHECK-NEXT:    vfmaddsd {{.*#+}} xmm0 = (xmm0 * xmm0) + mem66; CHECK-NEXT:    vmovsd %xmm0, (%rdi)67; CHECK-NEXT:    retq68  %a.val = load double, ptr %a69  %av0 = insertelement <2 x double> undef, double %a.val, i32 070  %av  = insertelement <2 x double> %av0, double 0.000000e+00, i32 171 72  %b.val = load double, ptr %b73  %bv0 = insertelement <2 x double> undef, double %b.val, i32 074  %bv  = insertelement <2 x double> %bv0, double 0.000000e+00, i32 175 76  %vr = call <2 x double> @llvm.x86.fma4.vfmadd.sd(<2 x double> %av, <2 x double> %av, <2 x double> %bv)77 78  %sr = extractelement <2 x double> %vr, i32 079  store double %sr, ptr %a80  ret void81}82 83define void @fmadd_aba_sd(ptr %a, ptr %b) {84; CHECK-LABEL: fmadd_aba_sd:85; CHECK:       # %bb.0:86; CHECK-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero87; CHECK-NEXT:    vfmaddsd {{.*#+}} xmm0 = (xmm0 * mem) + xmm088; CHECK-NEXT:    vmovsd %xmm0, (%rdi)89; CHECK-NEXT:    retq90  %a.val = load double, ptr %a91  %av0 = insertelement <2 x double> undef, double %a.val, i32 092  %av  = insertelement <2 x double> %av0, double 0.000000e+00, i32 193 94  %b.val = load double, ptr %b95  %bv0 = insertelement <2 x double> undef, double %b.val, i32 096  %bv  = insertelement <2 x double> %bv0, double 0.000000e+00, i32 197 98  %vr = call <2 x double> @llvm.x86.fma4.vfmadd.sd(<2 x double> %av, <2 x double> %bv, <2 x double> %av)99 100  %sr = extractelement <2 x double> %vr, i32 0101  store double %sr, ptr %a102  ret void103}104 105