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