brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.8 KiB · 29120c8 Raw
194 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=KNL3; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s --check-prefix=ALL --check-prefix=SKX4 5define <16 x float> @test_x86_fmadd_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {6; ALL-LABEL: test_x86_fmadd_ps_z:7; ALL:       ## %bb.0:8; ALL-NEXT:    vfmadd213ps {{.*#+}} zmm0 = (zmm1 * zmm0) + zmm29; ALL-NEXT:    retq10  %x = fmul contract <16 x float> %a0, %a111  %res = fadd contract <16 x float> %x, %a212  ret <16 x float> %res13}14 15define <16 x float> @test_x86_fmsub_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {16; ALL-LABEL: test_x86_fmsub_ps_z:17; ALL:       ## %bb.0:18; ALL-NEXT:    vfmsub213ps {{.*#+}} zmm0 = (zmm1 * zmm0) - zmm219; ALL-NEXT:    retq20  %x = fmul contract <16 x float> %a0, %a121  %res = fsub contract <16 x float> %x, %a222  ret <16 x float> %res23}24 25define <16 x float> @test_x86_fnmadd_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {26; ALL-LABEL: test_x86_fnmadd_ps_z:27; ALL:       ## %bb.0:28; ALL-NEXT:    vfnmadd213ps {{.*#+}} zmm0 = -(zmm1 * zmm0) + zmm229; ALL-NEXT:    retq30  %x = fmul contract <16 x float> %a0, %a131  %res = fsub contract <16 x float> %a2, %x32  ret <16 x float> %res33}34 35define <16 x float> @test_x86_fnmsub_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {36; ALL-LABEL: test_x86_fnmsub_ps_z:37; ALL:       ## %bb.0:38; ALL-NEXT:    vfnmsub213ps {{.*#+}} zmm0 = -(zmm1 * zmm0) - zmm239; ALL-NEXT:    retq40  %x = fmul contract <16 x float> %a0, %a141  %y = fsub contract <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00,42                          float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00,43                          float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00,44                          float -0.000000e+00>, %x45  %res = fsub contract <16 x float> %y, %a246  ret <16 x float> %res47}48 49define <8 x double> @test_x86_fmadd_pd_z(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {50; ALL-LABEL: test_x86_fmadd_pd_z:51; ALL:       ## %bb.0:52; ALL-NEXT:    vfmadd213pd {{.*#+}} zmm0 = (zmm1 * zmm0) + zmm253; ALL-NEXT:    retq54  %x = fmul contract <8 x double> %a0, %a155  %res = fadd contract <8 x double> %x, %a256  ret <8 x double> %res57}58 59define <8 x double> @test_x86_fmsub_pd_z(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {60; ALL-LABEL: test_x86_fmsub_pd_z:61; ALL:       ## %bb.0:62; ALL-NEXT:    vfmsub213pd {{.*#+}} zmm0 = (zmm1 * zmm0) - zmm263; ALL-NEXT:    retq64  %x = fmul contract <8 x double> %a0, %a165  %res = fsub contract <8 x double> %x, %a266  ret <8 x double> %res67}68 69define double @test_x86_fmsub_213(double %a0, double %a1, double %a2) {70; ALL-LABEL: test_x86_fmsub_213:71; ALL:       ## %bb.0:72; ALL-NEXT:    vfmsub213sd {{.*#+}} xmm0 = (xmm1 * xmm0) - xmm273; ALL-NEXT:    retq74  %x = fmul contract double %a0, %a175  %res = fsub contract double %x, %a276  ret double %res77}78 79define double @test_x86_fmsub_213_m(double %a0, double %a1, ptr %a2_ptr) {80; ALL-LABEL: test_x86_fmsub_213_m:81; ALL:       ## %bb.0:82; ALL-NEXT:    vfmsub213sd {{.*#+}} xmm0 = (xmm1 * xmm0) - mem83; ALL-NEXT:    retq84  %a2 = load double , ptr%a2_ptr85  %x = fmul contract double %a0, %a186  %res = fsub contract double %x, %a287  ret double %res88}89 90define double @test_x86_fmsub_231_m(double %a0, double %a1, ptr %a2_ptr) {91; ALL-LABEL: test_x86_fmsub_231_m:92; ALL:       ## %bb.0:93; ALL-NEXT:    vfmsub132sd {{.*#+}} xmm0 = (xmm0 * mem) - xmm194; ALL-NEXT:    retq95  %a2 = load double , ptr%a2_ptr96  %x = fmul contract double %a0, %a297  %res = fsub contract double %x, %a198  ret double %res99}100 101define <16 x float> @test231_br(<16 x float> %a1, <16 x float> %a2) nounwind {102; ALL-LABEL: test231_br:103; ALL:       ## %bb.0:104; ALL-NEXT:    vfmadd132ps {{.*#+}} zmm0 = (zmm0 * mem) + zmm1105; ALL-NEXT:    retq106  %b1 = fmul contract <16 x float> %a1, <float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000>107  %b2 = fadd contract <16 x float> %b1, %a2108  ret <16 x float> %b2109}110 111define <16 x float> @test213_br(<16 x float> %a1, <16 x float> %a2) nounwind {112; ALL-LABEL: test213_br:113; ALL:       ## %bb.0:114; ALL-NEXT:    vfmadd213ps {{.*#+}} zmm0 = (zmm1 * zmm0) + mem115; ALL-NEXT:    retq116  %b1 = fmul contract <16 x float> %a1, %a2117  %b2 = fadd contract <16 x float> %b1, <float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000>118  ret <16 x float> %b2119}120 121;mask (a*c+b , a)122define <16 x float> @test_x86_fmadd132_ps(<16 x float> %a0, <16 x float> %a1, ptr%a2_ptrt, <16 x i1> %mask) {123; KNL-LABEL: test_x86_fmadd132_ps:124; KNL:       ## %bb.0:125; KNL-NEXT:    vpmovsxbd %xmm2, %zmm2126; KNL-NEXT:    vpslld $31, %zmm2, %zmm2127; KNL-NEXT:    vptestmd %zmm2, %zmm2, %k1128; KNL-NEXT:    vfmadd132ps {{.*#+}} zmm0 {%k1} = (zmm0 * mem) + zmm1129; KNL-NEXT:    retq130;131; SKX-LABEL: test_x86_fmadd132_ps:132; SKX:       ## %bb.0:133; SKX-NEXT:    vpsllw $7, %xmm2, %xmm2134; SKX-NEXT:    vpmovb2m %xmm2, %k1135; SKX-NEXT:    vfmadd132ps {{.*#+}} zmm0 {%k1} = (zmm0 * mem) + zmm1136; SKX-NEXT:    retq137  %a2   = load <16 x float>,ptr%a2_ptrt,align 1138  %x = fmul contract <16 x float> %a0, %a2139  %y = fadd contract <16 x float> %x, %a1140  %res = select <16 x i1> %mask, <16 x float> %y, <16 x float> %a0141  ret <16 x float> %res142}143 144;mask (a*c+b , b)145define <16 x float> @test_x86_fmadd231_ps(<16 x float> %a0, <16 x float> %a1, ptr%a2_ptrt, <16 x i1> %mask) {146; KNL-LABEL: test_x86_fmadd231_ps:147; KNL:       ## %bb.0:148; KNL-NEXT:    vpmovsxbd %xmm2, %zmm2149; KNL-NEXT:    vpslld $31, %zmm2, %zmm2150; KNL-NEXT:    vptestmd %zmm2, %zmm2, %k1151; KNL-NEXT:    vfmadd231ps {{.*#+}} zmm1 {%k1} = (zmm0 * mem) + zmm1152; KNL-NEXT:    vmovaps %zmm1, %zmm0153; KNL-NEXT:    retq154;155; SKX-LABEL: test_x86_fmadd231_ps:156; SKX:       ## %bb.0:157; SKX-NEXT:    vpsllw $7, %xmm2, %xmm2158; SKX-NEXT:    vpmovb2m %xmm2, %k1159; SKX-NEXT:    vfmadd231ps {{.*#+}} zmm1 {%k1} = (zmm0 * mem) + zmm1160; SKX-NEXT:    vmovaps %zmm1, %zmm0161; SKX-NEXT:    retq162  %a2   = load <16 x float>,ptr%a2_ptrt,align 1163  %x = fmul contract <16 x float> %a0, %a2164  %y = fadd contract <16 x float> %x, %a1165  %res = select <16 x i1> %mask, <16 x float> %y, <16 x float> %a1166  ret <16 x float> %res167}168 169;mask (b*a+c , b)170define <16 x float> @test_x86_fmadd213_ps(<16 x float> %a0, <16 x float> %a1, ptr%a2_ptrt, <16 x i1> %mask) {171; KNL-LABEL: test_x86_fmadd213_ps:172; KNL:       ## %bb.0:173; KNL-NEXT:    vpmovsxbd %xmm2, %zmm2174; KNL-NEXT:    vpslld $31, %zmm2, %zmm2175; KNL-NEXT:    vptestmd %zmm2, %zmm2, %k1176; KNL-NEXT:    vfmadd213ps {{.*#+}} zmm1 {%k1} = (zmm0 * zmm1) + mem177; KNL-NEXT:    vmovaps %zmm1, %zmm0178; KNL-NEXT:    retq179;180; SKX-LABEL: test_x86_fmadd213_ps:181; SKX:       ## %bb.0:182; SKX-NEXT:    vpsllw $7, %xmm2, %xmm2183; SKX-NEXT:    vpmovb2m %xmm2, %k1184; SKX-NEXT:    vfmadd213ps {{.*#+}} zmm1 {%k1} = (zmm0 * zmm1) + mem185; SKX-NEXT:    vmovaps %zmm1, %zmm0186; SKX-NEXT:    retq187  %a2   = load <16 x float>,ptr%a2_ptrt,align 1188  %x = fmul contract <16 x float> %a1, %a0189  %y = fadd contract <16 x float> %x, %a2190  %res = select <16 x i1> %mask, <16 x float> %y, <16 x float> %a1191  ret <16 x float> %res192}193 194