564 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mcpu=bdver2 -mtriple=x86_64-pc-win32 | FileCheck %s --check-prefix=FMA43 4attributes #0 = { nounwind }5 6declare <4 x float> @llvm.x86.fma4.vfmadd.ss(<4 x float>, <4 x float>, <4 x float>) nounwind readnone7define <4 x float> @test_x86_fmadd_baa_ss(<4 x float> %a, <4 x float> %b) #0 {8; FMA4-LABEL: test_x86_fmadd_baa_ss:9; FMA4: # %bb.0:10; FMA4-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero11; FMA4-NEXT: vfmaddss {{.*#+}} xmm0 = (xmm0 * mem) + xmm012; FMA4-NEXT: retq13 %res = call <4 x float> @llvm.x86.fma4.vfmadd.ss(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind14 ret <4 x float> %res15}16 17define <4 x float> @test_x86_fmadd_aba_ss(<4 x float> %a, <4 x float> %b) #0 {18; FMA4-LABEL: test_x86_fmadd_aba_ss:19; FMA4: # %bb.0:20; FMA4-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero21; FMA4-NEXT: vfmaddss {{.*#+}} xmm0 = (xmm0 * mem) + xmm022; FMA4-NEXT: retq23 %res = call <4 x float> @llvm.x86.fma4.vfmadd.ss(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind24 ret <4 x float> %res25}26 27define <4 x float> @test_x86_fmadd_bba_ss(<4 x float> %a, <4 x float> %b) #0 {28; FMA4-LABEL: test_x86_fmadd_bba_ss:29; FMA4: # %bb.0:30; FMA4-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero31; FMA4-NEXT: vfmaddss {{.*#+}} xmm0 = (xmm0 * xmm0) + mem32; FMA4-NEXT: retq33 %res = call <4 x float> @llvm.x86.fma4.vfmadd.ss(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind34 ret <4 x float> %res35}36 37declare <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone38define <4 x float> @test_x86_fmadd_baa_ps(<4 x float> %a, <4 x float> %b) #0 {39; FMA4-LABEL: test_x86_fmadd_baa_ps:40; FMA4: # %bb.0:41; FMA4-NEXT: vmovaps (%rcx), %xmm042; FMA4-NEXT: vfmaddps {{.*#+}} xmm0 = (xmm0 * mem) + xmm043; FMA4-NEXT: retq44 %res = call <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind45 ret <4 x float> %res46}47 48define <4 x float> @test_x86_fmadd_aba_ps(<4 x float> %a, <4 x float> %b) #0 {49; FMA4-LABEL: test_x86_fmadd_aba_ps:50; FMA4: # %bb.0:51; FMA4-NEXT: vmovaps (%rcx), %xmm052; FMA4-NEXT: vfmaddps {{.*#+}} xmm0 = (xmm0 * mem) + xmm053; FMA4-NEXT: retq54 %res = call <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind55 ret <4 x float> %res56}57 58define <4 x float> @test_x86_fmadd_bba_ps(<4 x float> %a, <4 x float> %b) #0 {59; FMA4-LABEL: test_x86_fmadd_bba_ps:60; FMA4: # %bb.0:61; FMA4-NEXT: vmovaps (%rdx), %xmm062; FMA4-NEXT: vfmaddps {{.*#+}} xmm0 = (xmm0 * xmm0) + mem63; FMA4-NEXT: retq64 %res = call <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind65 ret <4 x float> %res66}67 68declare <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone69define <8 x float> @test_x86_fmadd_baa_ps_y(<8 x float> %a, <8 x float> %b) #0 {70; FMA4-LABEL: test_x86_fmadd_baa_ps_y:71; FMA4: # %bb.0:72; FMA4-NEXT: vmovaps (%rcx), %ymm073; FMA4-NEXT: vfmaddps {{.*#+}} ymm0 = (ymm0 * mem) + ymm074; FMA4-NEXT: retq75 %res = call <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float> %b, <8 x float> %a, <8 x float> %a) nounwind76 ret <8 x float> %res77}78 79define <8 x float> @test_x86_fmadd_aba_ps_y(<8 x float> %a, <8 x float> %b) #0 {80; FMA4-LABEL: test_x86_fmadd_aba_ps_y:81; FMA4: # %bb.0:82; FMA4-NEXT: vmovaps (%rcx), %ymm083; FMA4-NEXT: vfmaddps {{.*#+}} ymm0 = (ymm0 * mem) + ymm084; FMA4-NEXT: retq85 %res = call <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %a) nounwind86 ret <8 x float> %res87}88 89define <8 x float> @test_x86_fmadd_bba_ps_y(<8 x float> %a, <8 x float> %b) #0 {90; FMA4-LABEL: test_x86_fmadd_bba_ps_y:91; FMA4: # %bb.0:92; FMA4-NEXT: vmovaps (%rdx), %ymm093; FMA4-NEXT: vfmaddps {{.*#+}} ymm0 = (ymm0 * ymm0) + mem94; FMA4-NEXT: retq95 %res = call <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float> %b, <8 x float> %b, <8 x float> %a) nounwind96 ret <8 x float> %res97}98 99declare <2 x double> @llvm.x86.fma4.vfmadd.sd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone100define <2 x double> @test_x86_fmadd_baa_sd(<2 x double> %a, <2 x double> %b) #0 {101; FMA4-LABEL: test_x86_fmadd_baa_sd:102; FMA4: # %bb.0:103; FMA4-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero104; FMA4-NEXT: vfmaddsd {{.*#+}} xmm0 = (xmm0 * mem) + xmm0105; FMA4-NEXT: retq106 %res = call <2 x double> @llvm.x86.fma4.vfmadd.sd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind107 ret <2 x double> %res108}109 110define <2 x double> @test_x86_fmadd_aba_sd(<2 x double> %a, <2 x double> %b) #0 {111; FMA4-LABEL: test_x86_fmadd_aba_sd:112; FMA4: # %bb.0:113; FMA4-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero114; FMA4-NEXT: vfmaddsd {{.*#+}} xmm0 = (xmm0 * mem) + xmm0115; FMA4-NEXT: retq116 %res = call <2 x double> @llvm.x86.fma4.vfmadd.sd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind117 ret <2 x double> %res118}119 120define <2 x double> @test_x86_fmadd_bba_sd(<2 x double> %a, <2 x double> %b) #0 {121; FMA4-LABEL: test_x86_fmadd_bba_sd:122; FMA4: # %bb.0:123; FMA4-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero124; FMA4-NEXT: vfmaddsd {{.*#+}} xmm0 = (xmm0 * xmm0) + mem125; FMA4-NEXT: retq126 %res = call <2 x double> @llvm.x86.fma4.vfmadd.sd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind127 ret <2 x double> %res128}129 130declare <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone131define <2 x double> @test_x86_fmadd_baa_pd(<2 x double> %a, <2 x double> %b) #0 {132; FMA4-LABEL: test_x86_fmadd_baa_pd:133; FMA4: # %bb.0:134; FMA4-NEXT: vmovapd (%rcx), %xmm0135; FMA4-NEXT: vfmaddpd {{.*#+}} xmm0 = (xmm0 * mem) + xmm0136; FMA4-NEXT: retq137 %res = call <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind138 ret <2 x double> %res139}140 141define <2 x double> @test_x86_fmadd_aba_pd(<2 x double> %a, <2 x double> %b) #0 {142; FMA4-LABEL: test_x86_fmadd_aba_pd:143; FMA4: # %bb.0:144; FMA4-NEXT: vmovapd (%rcx), %xmm0145; FMA4-NEXT: vfmaddpd {{.*#+}} xmm0 = (xmm0 * mem) + xmm0146; FMA4-NEXT: retq147 %res = call <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind148 ret <2 x double> %res149}150 151define <2 x double> @test_x86_fmadd_bba_pd(<2 x double> %a, <2 x double> %b) #0 {152; FMA4-LABEL: test_x86_fmadd_bba_pd:153; FMA4: # %bb.0:154; FMA4-NEXT: vmovapd (%rdx), %xmm0155; FMA4-NEXT: vfmaddpd {{.*#+}} xmm0 = (xmm0 * xmm0) + mem156; FMA4-NEXT: retq157 %res = call <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind158 ret <2 x double> %res159}160 161declare <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone162define <4 x double> @test_x86_fmadd_baa_pd_y(<4 x double> %a, <4 x double> %b) #0 {163; FMA4-LABEL: test_x86_fmadd_baa_pd_y:164; FMA4: # %bb.0:165; FMA4-NEXT: vmovapd (%rcx), %ymm0166; FMA4-NEXT: vfmaddpd {{.*#+}} ymm0 = (ymm0 * mem) + ymm0167; FMA4-NEXT: retq168 %res = call <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double> %b, <4 x double> %a, <4 x double> %a) nounwind169 ret <4 x double> %res170}171 172define <4 x double> @test_x86_fmadd_aba_pd_y(<4 x double> %a, <4 x double> %b) #0 {173; FMA4-LABEL: test_x86_fmadd_aba_pd_y:174; FMA4: # %bb.0:175; FMA4-NEXT: vmovapd (%rcx), %ymm0176; FMA4-NEXT: vfmaddpd {{.*#+}} ymm0 = (ymm0 * mem) + ymm0177; FMA4-NEXT: retq178 %res = call <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %a) nounwind179 ret <4 x double> %res180}181 182define <4 x double> @test_x86_fmadd_bba_pd_y(<4 x double> %a, <4 x double> %b) #0 {183; FMA4-LABEL: test_x86_fmadd_bba_pd_y:184; FMA4: # %bb.0:185; FMA4-NEXT: vmovapd (%rdx), %ymm0186; FMA4-NEXT: vfmaddpd {{.*#+}} ymm0 = (ymm0 * ymm0) + mem187; FMA4-NEXT: retq188 %res = call <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double> %b, <4 x double> %b, <4 x double> %a) nounwind189 ret <4 x double> %res190}191 192declare <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone193define <4 x float> @test_x86_fnmadd_baa_ps(<4 x float> %a, <4 x float> %b) #0 {194; FMA4-LABEL: test_x86_fnmadd_baa_ps:195; FMA4: # %bb.0:196; FMA4-NEXT: vmovaps (%rcx), %xmm0197; FMA4-NEXT: vfnmaddps {{.*#+}} xmm0 = -(xmm0 * mem) + xmm0198; FMA4-NEXT: retq199 %res = call <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind200 ret <4 x float> %res201}202 203define <4 x float> @test_x86_fnmadd_aba_ps(<4 x float> %a, <4 x float> %b) #0 {204; FMA4-LABEL: test_x86_fnmadd_aba_ps:205; FMA4: # %bb.0:206; FMA4-NEXT: vmovaps (%rcx), %xmm0207; FMA4-NEXT: vfnmaddps {{.*#+}} xmm0 = -(xmm0 * mem) + xmm0208; FMA4-NEXT: retq209 %res = call <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind210 ret <4 x float> %res211}212 213define <4 x float> @test_x86_fnmadd_bba_ps(<4 x float> %a, <4 x float> %b) #0 {214; FMA4-LABEL: test_x86_fnmadd_bba_ps:215; FMA4: # %bb.0:216; FMA4-NEXT: vmovaps (%rdx), %xmm0217; FMA4-NEXT: vfnmaddps {{.*#+}} xmm0 = -(xmm0 * xmm0) + mem218; FMA4-NEXT: retq219 %res = call <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind220 ret <4 x float> %res221}222 223declare <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone224define <8 x float> @test_x86_fnmadd_baa_ps_y(<8 x float> %a, <8 x float> %b) #0 {225; FMA4-LABEL: test_x86_fnmadd_baa_ps_y:226; FMA4: # %bb.0:227; FMA4-NEXT: vmovaps (%rcx), %ymm0228; FMA4-NEXT: vfnmaddps {{.*#+}} ymm0 = -(ymm0 * mem) + ymm0229; FMA4-NEXT: retq230 %res = call <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float> %b, <8 x float> %a, <8 x float> %a) nounwind231 ret <8 x float> %res232}233 234define <8 x float> @test_x86_fnmadd_aba_ps_y(<8 x float> %a, <8 x float> %b) #0 {235; FMA4-LABEL: test_x86_fnmadd_aba_ps_y:236; FMA4: # %bb.0:237; FMA4-NEXT: vmovaps (%rcx), %ymm0238; FMA4-NEXT: vfnmaddps {{.*#+}} ymm0 = -(ymm0 * mem) + ymm0239; FMA4-NEXT: retq240 %res = call <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %a) nounwind241 ret <8 x float> %res242}243 244define <8 x float> @test_x86_fnmadd_bba_ps_y(<8 x float> %a, <8 x float> %b) #0 {245; FMA4-LABEL: test_x86_fnmadd_bba_ps_y:246; FMA4: # %bb.0:247; FMA4-NEXT: vmovaps (%rdx), %ymm0248; FMA4-NEXT: vfnmaddps {{.*#+}} ymm0 = -(ymm0 * ymm0) + mem249; FMA4-NEXT: retq250 %res = call <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float> %b, <8 x float> %b, <8 x float> %a) nounwind251 ret <8 x float> %res252}253 254declare <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone255define <2 x double> @test_x86_fnmadd_baa_pd(<2 x double> %a, <2 x double> %b) #0 {256; FMA4-LABEL: test_x86_fnmadd_baa_pd:257; FMA4: # %bb.0:258; FMA4-NEXT: vmovapd (%rcx), %xmm0259; FMA4-NEXT: vfnmaddpd {{.*#+}} xmm0 = -(xmm0 * mem) + xmm0260; FMA4-NEXT: retq261 %res = call <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind262 ret <2 x double> %res263}264 265define <2 x double> @test_x86_fnmadd_aba_pd(<2 x double> %a, <2 x double> %b) #0 {266; FMA4-LABEL: test_x86_fnmadd_aba_pd:267; FMA4: # %bb.0:268; FMA4-NEXT: vmovapd (%rcx), %xmm0269; FMA4-NEXT: vfnmaddpd {{.*#+}} xmm0 = -(xmm0 * mem) + xmm0270; FMA4-NEXT: retq271 %res = call <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind272 ret <2 x double> %res273}274 275define <2 x double> @test_x86_fnmadd_bba_pd(<2 x double> %a, <2 x double> %b) #0 {276; FMA4-LABEL: test_x86_fnmadd_bba_pd:277; FMA4: # %bb.0:278; FMA4-NEXT: vmovapd (%rdx), %xmm0279; FMA4-NEXT: vfnmaddpd {{.*#+}} xmm0 = -(xmm0 * xmm0) + mem280; FMA4-NEXT: retq281 %res = call <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind282 ret <2 x double> %res283}284 285declare <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone286define <4 x double> @test_x86_fnmadd_baa_pd_y(<4 x double> %a, <4 x double> %b) #0 {287; FMA4-LABEL: test_x86_fnmadd_baa_pd_y:288; FMA4: # %bb.0:289; FMA4-NEXT: vmovapd (%rcx), %ymm0290; FMA4-NEXT: vfnmaddpd {{.*#+}} ymm0 = -(ymm0 * mem) + ymm0291; FMA4-NEXT: retq292 %res = call <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double> %b, <4 x double> %a, <4 x double> %a) nounwind293 ret <4 x double> %res294}295 296define <4 x double> @test_x86_fnmadd_aba_pd_y(<4 x double> %a, <4 x double> %b) #0 {297; FMA4-LABEL: test_x86_fnmadd_aba_pd_y:298; FMA4: # %bb.0:299; FMA4-NEXT: vmovapd (%rcx), %ymm0300; FMA4-NEXT: vfnmaddpd {{.*#+}} ymm0 = -(ymm0 * mem) + ymm0301; FMA4-NEXT: retq302 %res = call <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %a) nounwind303 ret <4 x double> %res304}305 306define <4 x double> @test_x86_fnmadd_bba_pd_y(<4 x double> %a, <4 x double> %b) #0 {307; FMA4-LABEL: test_x86_fnmadd_bba_pd_y:308; FMA4: # %bb.0:309; FMA4-NEXT: vmovapd (%rdx), %ymm0310; FMA4-NEXT: vfnmaddpd {{.*#+}} ymm0 = -(ymm0 * ymm0) + mem311; FMA4-NEXT: retq312 %res = call <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double> %b, <4 x double> %b, <4 x double> %a) nounwind313 ret <4 x double> %res314}315 316declare <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone317define <4 x float> @test_x86_fmsub_baa_ps(<4 x float> %a, <4 x float> %b) #0 {318; FMA4-LABEL: test_x86_fmsub_baa_ps:319; FMA4: # %bb.0:320; FMA4-NEXT: vmovaps (%rcx), %xmm0321; FMA4-NEXT: vfmsubps {{.*#+}} xmm0 = (xmm0 * mem) - xmm0322; FMA4-NEXT: retq323 %res = call <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind324 ret <4 x float> %res325}326 327define <4 x float> @test_x86_fmsub_aba_ps(<4 x float> %a, <4 x float> %b) #0 {328; FMA4-LABEL: test_x86_fmsub_aba_ps:329; FMA4: # %bb.0:330; FMA4-NEXT: vmovaps (%rcx), %xmm0331; FMA4-NEXT: vfmsubps {{.*#+}} xmm0 = (xmm0 * mem) - xmm0332; FMA4-NEXT: retq333 %res = call <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind334 ret <4 x float> %res335}336 337define <4 x float> @test_x86_fmsub_bba_ps(<4 x float> %a, <4 x float> %b) #0 {338; FMA4-LABEL: test_x86_fmsub_bba_ps:339; FMA4: # %bb.0:340; FMA4-NEXT: vmovaps (%rdx), %xmm0341; FMA4-NEXT: vfmsubps {{.*#+}} xmm0 = (xmm0 * xmm0) - mem342; FMA4-NEXT: retq343 %res = call <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind344 ret <4 x float> %res345}346 347declare <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone348define <8 x float> @test_x86_fmsub_baa_ps_y(<8 x float> %a, <8 x float> %b) #0 {349; FMA4-LABEL: test_x86_fmsub_baa_ps_y:350; FMA4: # %bb.0:351; FMA4-NEXT: vmovaps (%rcx), %ymm0352; FMA4-NEXT: vfmsubps {{.*#+}} ymm0 = (ymm0 * mem) - ymm0353; FMA4-NEXT: retq354 %res = call <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float> %b, <8 x float> %a, <8 x float> %a) nounwind355 ret <8 x float> %res356}357 358define <8 x float> @test_x86_fmsub_aba_ps_y(<8 x float> %a, <8 x float> %b) #0 {359; FMA4-LABEL: test_x86_fmsub_aba_ps_y:360; FMA4: # %bb.0:361; FMA4-NEXT: vmovaps (%rcx), %ymm0362; FMA4-NEXT: vfmsubps {{.*#+}} ymm0 = (ymm0 * mem) - ymm0363; FMA4-NEXT: retq364 %res = call <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %a) nounwind365 ret <8 x float> %res366}367 368define <8 x float> @test_x86_fmsub_bba_ps_y(<8 x float> %a, <8 x float> %b) #0 {369; FMA4-LABEL: test_x86_fmsub_bba_ps_y:370; FMA4: # %bb.0:371; FMA4-NEXT: vmovaps (%rdx), %ymm0372; FMA4-NEXT: vfmsubps {{.*#+}} ymm0 = (ymm0 * ymm0) - mem373; FMA4-NEXT: retq374 %res = call <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float> %b, <8 x float> %b, <8 x float> %a) nounwind375 ret <8 x float> %res376}377 378declare <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone379define <2 x double> @test_x86_fmsub_baa_pd(<2 x double> %a, <2 x double> %b) #0 {380; FMA4-LABEL: test_x86_fmsub_baa_pd:381; FMA4: # %bb.0:382; FMA4-NEXT: vmovapd (%rcx), %xmm0383; FMA4-NEXT: vfmsubpd {{.*#+}} xmm0 = (xmm0 * mem) - xmm0384; FMA4-NEXT: retq385 %res = call <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind386 ret <2 x double> %res387}388 389define <2 x double> @test_x86_fmsub_aba_pd(<2 x double> %a, <2 x double> %b) #0 {390; FMA4-LABEL: test_x86_fmsub_aba_pd:391; FMA4: # %bb.0:392; FMA4-NEXT: vmovapd (%rcx), %xmm0393; FMA4-NEXT: vfmsubpd {{.*#+}} xmm0 = (xmm0 * mem) - xmm0394; FMA4-NEXT: retq395 %res = call <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind396 ret <2 x double> %res397}398 399define <2 x double> @test_x86_fmsub_bba_pd(<2 x double> %a, <2 x double> %b) #0 {400; FMA4-LABEL: test_x86_fmsub_bba_pd:401; FMA4: # %bb.0:402; FMA4-NEXT: vmovapd (%rdx), %xmm0403; FMA4-NEXT: vfmsubpd {{.*#+}} xmm0 = (xmm0 * xmm0) - mem404; FMA4-NEXT: retq405 %res = call <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind406 ret <2 x double> %res407}408 409declare <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone410define <4 x double> @test_x86_fmsub_baa_pd_y(<4 x double> %a, <4 x double> %b) #0 {411; FMA4-LABEL: test_x86_fmsub_baa_pd_y:412; FMA4: # %bb.0:413; FMA4-NEXT: vmovapd (%rcx), %ymm0414; FMA4-NEXT: vfmsubpd {{.*#+}} ymm0 = (ymm0 * mem) - ymm0415; FMA4-NEXT: retq416 %res = call <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double> %b, <4 x double> %a, <4 x double> %a) nounwind417 ret <4 x double> %res418}419 420define <4 x double> @test_x86_fmsub_aba_pd_y(<4 x double> %a, <4 x double> %b) #0 {421; FMA4-LABEL: test_x86_fmsub_aba_pd_y:422; FMA4: # %bb.0:423; FMA4-NEXT: vmovapd (%rcx), %ymm0424; FMA4-NEXT: vfmsubpd {{.*#+}} ymm0 = (ymm0 * mem) - ymm0425; FMA4-NEXT: retq426 %res = call <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %a) nounwind427 ret <4 x double> %res428}429 430define <4 x double> @test_x86_fmsub_bba_pd_y(<4 x double> %a, <4 x double> %b) #0 {431; FMA4-LABEL: test_x86_fmsub_bba_pd_y:432; FMA4: # %bb.0:433; FMA4-NEXT: vmovapd (%rdx), %ymm0434; FMA4-NEXT: vfmsubpd {{.*#+}} ymm0 = (ymm0 * ymm0) - mem435; FMA4-NEXT: retq436 %res = call <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double> %b, <4 x double> %b, <4 x double> %a) nounwind437 ret <4 x double> %res438}439 440declare <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone441define <4 x float> @test_x86_fnmsub_baa_ps(<4 x float> %a, <4 x float> %b) #0 {442; FMA4-LABEL: test_x86_fnmsub_baa_ps:443; FMA4: # %bb.0:444; FMA4-NEXT: vmovaps (%rcx), %xmm0445; FMA4-NEXT: vfnmsubps {{.*#+}} xmm0 = -(xmm0 * mem) - xmm0446; FMA4-NEXT: retq447 %res = call <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind448 ret <4 x float> %res449}450 451define <4 x float> @test_x86_fnmsub_aba_ps(<4 x float> %a, <4 x float> %b) #0 {452; FMA4-LABEL: test_x86_fnmsub_aba_ps:453; FMA4: # %bb.0:454; FMA4-NEXT: vmovaps (%rcx), %xmm0455; FMA4-NEXT: vfnmsubps {{.*#+}} xmm0 = -(xmm0 * mem) - xmm0456; FMA4-NEXT: retq457 %res = call <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind458 ret <4 x float> %res459}460 461define <4 x float> @test_x86_fnmsub_bba_ps(<4 x float> %a, <4 x float> %b) #0 {462; FMA4-LABEL: test_x86_fnmsub_bba_ps:463; FMA4: # %bb.0:464; FMA4-NEXT: vmovaps (%rdx), %xmm0465; FMA4-NEXT: vfnmsubps {{.*#+}} xmm0 = -(xmm0 * xmm0) - mem466; FMA4-NEXT: retq467 %res = call <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind468 ret <4 x float> %res469}470 471declare <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone472define <8 x float> @test_x86_fnmsub_baa_ps_y(<8 x float> %a, <8 x float> %b) #0 {473; FMA4-LABEL: test_x86_fnmsub_baa_ps_y:474; FMA4: # %bb.0:475; FMA4-NEXT: vmovaps (%rcx), %ymm0476; FMA4-NEXT: vfnmsubps {{.*#+}} ymm0 = -(ymm0 * mem) - ymm0477; FMA4-NEXT: retq478 %res = call <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float> %b, <8 x float> %a, <8 x float> %a) nounwind479 ret <8 x float> %res480}481 482define <8 x float> @test_x86_fnmsub_aba_ps_y(<8 x float> %a, <8 x float> %b) #0 {483; FMA4-LABEL: test_x86_fnmsub_aba_ps_y:484; FMA4: # %bb.0:485; FMA4-NEXT: vmovaps (%rcx), %ymm0486; FMA4-NEXT: vfnmsubps {{.*#+}} ymm0 = -(ymm0 * mem) - ymm0487; FMA4-NEXT: retq488 %res = call <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %a) nounwind489 ret <8 x float> %res490}491 492define <8 x float> @test_x86_fnmsub_bba_ps_y(<8 x float> %a, <8 x float> %b) #0 {493; FMA4-LABEL: test_x86_fnmsub_bba_ps_y:494; FMA4: # %bb.0:495; FMA4-NEXT: vmovaps (%rdx), %ymm0496; FMA4-NEXT: vfnmsubps {{.*#+}} ymm0 = -(ymm0 * ymm0) - mem497; FMA4-NEXT: retq498 %res = call <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float> %b, <8 x float> %b, <8 x float> %a) nounwind499 ret <8 x float> %res500}501 502declare <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone503define <2 x double> @test_x86_fnmsub_baa_pd(<2 x double> %a, <2 x double> %b) #0 {504; FMA4-LABEL: test_x86_fnmsub_baa_pd:505; FMA4: # %bb.0:506; FMA4-NEXT: vmovapd (%rcx), %xmm0507; FMA4-NEXT: vfnmsubpd {{.*#+}} xmm0 = -(xmm0 * mem) - xmm0508; FMA4-NEXT: retq509 %res = call <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind510 ret <2 x double> %res511}512 513define <2 x double> @test_x86_fnmsub_aba_pd(<2 x double> %a, <2 x double> %b) #0 {514; FMA4-LABEL: test_x86_fnmsub_aba_pd:515; FMA4: # %bb.0:516; FMA4-NEXT: vmovapd (%rcx), %xmm0517; FMA4-NEXT: vfnmsubpd {{.*#+}} xmm0 = -(xmm0 * mem) - xmm0518; FMA4-NEXT: retq519 %res = call <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind520 ret <2 x double> %res521}522 523define <2 x double> @test_x86_fnmsub_bba_pd(<2 x double> %a, <2 x double> %b) #0 {524; FMA4-LABEL: test_x86_fnmsub_bba_pd:525; FMA4: # %bb.0:526; FMA4-NEXT: vmovapd (%rdx), %xmm0527; FMA4-NEXT: vfnmsubpd {{.*#+}} xmm0 = -(xmm0 * xmm0) - mem528; FMA4-NEXT: retq529 %res = call <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind530 ret <2 x double> %res531}532 533declare <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone534define <4 x double> @test_x86_fnmsub_baa_pd_y(<4 x double> %a, <4 x double> %b) #0 {535; FMA4-LABEL: test_x86_fnmsub_baa_pd_y:536; FMA4: # %bb.0:537; FMA4-NEXT: vmovapd (%rcx), %ymm0538; FMA4-NEXT: vfnmsubpd {{.*#+}} ymm0 = -(ymm0 * mem) - ymm0539; FMA4-NEXT: retq540 %res = call <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double> %b, <4 x double> %a, <4 x double> %a) nounwind541 ret <4 x double> %res542}543 544define <4 x double> @test_x86_fnmsub_aba_pd_y(<4 x double> %a, <4 x double> %b) #0 {545; FMA4-LABEL: test_x86_fnmsub_aba_pd_y:546; FMA4: # %bb.0:547; FMA4-NEXT: vmovapd (%rcx), %ymm0548; FMA4-NEXT: vfnmsubpd {{.*#+}} ymm0 = -(ymm0 * mem) - ymm0549; FMA4-NEXT: retq550 %res = call <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %a) nounwind551 ret <4 x double> %res552}553 554define <4 x double> @test_x86_fnmsub_bba_pd_y(<4 x double> %a, <4 x double> %b) #0 {555; FMA4-LABEL: test_x86_fnmsub_bba_pd_y:556; FMA4: # %bb.0:557; FMA4-NEXT: vmovapd (%rdx), %ymm0558; FMA4-NEXT: vfnmsubpd {{.*#+}} ymm0 = -(ymm0 * ymm0) - mem559; FMA4-NEXT: retq560 %res = call <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double> %b, <4 x double> %b, <4 x double> %a) nounwind561 ret <4 x double> %res562}563 564