brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · b49b93b Raw
233 lines · plain
1; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -fp-contract=fast -mattr=-vsx -disable-ppc-vsx-fma-mutation=false | FileCheck %s2; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu -fp-contract=fast -mattr=+vsx -mcpu=pwr7 -disable-ppc-vsx-fma-mutation=false | FileCheck -check-prefix=CHECK-VSX %s3; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu -fp-contract=fast -mcpu=pwr8 -disable-ppc-vsx-fma-mutation=false | FileCheck -check-prefix=CHECK-P8 %s4; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unknown-linux-gnu -fp-contract=fast -mcpu=pwr8 -disable-ppc-vsx-fma-mutation=false | FileCheck -check-prefix=CHECK-P8 %s5 6declare double @dummy1(double) #07declare double @dummy2(double, double) #08declare double @dummy3(double, double, double) #09declare float @dummy4(float, float) #010 11define double @test_FMADD1(double %A, double %B, double %C) {12	%D = fmul double %A, %B		; <double> [#uses=1]13	%E = fadd double %C, %D		; <double> [#uses=1]14	ret double %E15; CHECK-LABEL: test_FMADD1:16; CHECK: fmadd17; CHECK-NEXT: blr18 19; CHECK-VSX-LABEL: test_FMADD1:20; CHECK-VSX: xsmaddmdp21; CHECK-VSX-NEXT: blr22}23 24define double @test_FMADD2(double %A, double %B, double %C) {25	%D = fmul double %A, %B		; <double> [#uses=1]26	%E = fadd double %D, %C		; <double> [#uses=1]27	ret double %E28; CHECK-LABEL: test_FMADD2:29; CHECK: fmadd30; CHECK-NEXT: blr31 32; CHECK-VSX-LABEL: test_FMADD2:33; CHECK-VSX: xsmaddmdp34; CHECK-VSX-NEXT: blr35}36 37define double @test_FMSUB1(double %A, double %B, double %C) {38	%D = fmul double %A, %B		; <double> [#uses=1]39	%E = fsub double %D, %C		; <double> [#uses=1]40	ret double %E41; CHECK-LABEL: test_FMSUB1:42; CHECK: fmsub43; CHECK-NEXT: blr44 45; CHECK-VSX-LABEL: test_FMSUB1:46; CHECK-VSX: xsmsubmdp47; CHECK-VSX-NEXT: blr48}49 50define double @test_FMSUB2(double %A, double %B, double %C, double %D) {51	%E = fmul double %A, %B 	; <double> [#uses=2]52	%F = fadd double %E, %C 	; <double> [#uses=1]53	%G = fsub double %E, %D 	; <double> [#uses=1]54	%H = call double @dummy2(double %F, double %G)      ; <double> [#uses=1]55	ret double %H56; CHECK-LABEL: test_FMSUB2:57; CHECK: fmadd58; CHECK-NEXT: fmsub59 60; CHECK-VSX-LABEL: test_FMSUB2:61; CHECK-VSX: xsmaddadp62; CHECK-VSX-NEXT: xsmsubmdp63}64 65define double @test_FNMADD1(double %A, double %B, double %C) {66	%D = fmul double %A, %B		; <double> [#uses=1]67	%E = fadd double %D, %C		; <double> [#uses=1]68	%F = fsub double -0.000000e+00, %E		; <double> [#uses=1]69	ret double %F70; CHECK-LABEL: test_FNMADD1:71; CHECK: fnmadd72; CHECK-NEXT: blr73 74; CHECK-VSX-LABEL: test_FNMADD1:75; CHECK-VSX: xsnmaddmdp76; CHECK-VSX-NEXT: blr77}78 79define double @test_FNMADD2(double %A, double %B, double %C) {80	%D = fmul double %A, %B		; <double> [#uses=1]81	%E = fadd double %C, %D		; <double> [#uses=1]82	%F = fsub double -0.000000e+00, %E		; <double> [#uses=1]83	ret double %F84; CHECK-LABEL: test_FNMADD2:85; CHECK: fnmadd86; CHECK-NEXT: blr87 88; CHECK-VSX-LABEL: test_FNMADD2:89; CHECK-VSX: xsnmaddmdp90; CHECK-VSX-NEXT: blr91}92 93define double @test_FNMSUB1(double %A, double %B, double %C) {94	%D = fmul double %A, %B		; <double> [#uses=1]95	%E = fsub double %C, %D		; <double> [#uses=1]96	ret double %E97; CHECK-LABEL: test_FNMSUB1:98; CHECK: fneg99; CHECK-NEXT: fmadd100; CHECK-NEXT: blr101 102; CHECK-VSX-LABEL: test_FNMSUB1:103; CHECK-VSX: xsnegdp104; CHECK-VSX-NEXT: xsmaddmdp105}106 107; need nsz flag to generate fnmsub since it may affect sign of zero108define double @test_FNMSUB1_NSZ(double %A, double %B, double %C) {109	%D = fmul nsz double %A, %B		; <double> [#uses=1]110	%E = fsub nsz double %C, %D		; <double> [#uses=1]111	ret double %E112; CHECK-LABEL: test_FNMSUB1_NSZ:113; CHECK: fnmsub114; CHECK-NEXT: blr115 116; CHECK-VSX-LABEL: test_FNMSUB1_NSZ:117; CHECK-VSX: xsnmsubmdp118}119 120define double @test_FNMSUB2(double %A, double %B, double %C) {121	%D = fmul double %A, %B		; <double> [#uses=1]122	%E = fsub double %D, %C		; <double> [#uses=1]123	%F = fsub double -0.000000e+00, %E		; <double> [#uses=1]124	ret double %F125; CHECK-LABEL: test_FNMSUB2:126; CHECK: fnmsub127; CHECK-NEXT: blr128 129; CHECK-VSX-LABEL: test_FNMSUB2:130; CHECK-VSX: xsnmsubmdp131; CHECK-VSX-NEXT: blr132}133 134define float @test_FNMSUBS(float %A, float %B, float %C) {135	%D = fmul float %A, %B		; <float> [#uses=1]136	%E = fsub float %D, %C		; <float> [#uses=1]137	%F = fsub float -0.000000e+00, %E		; <float> [#uses=1]138	ret float %F139; CHECK-LABEL: test_FNMSUBS:140; CHECK: fnmsubs141; CHECK-NEXT: blr142 143; CHECK-VSX-LABEL: test_FNMSUBS:144; CHECK-VSX: fnmsubs145; CHECK-VSX-NEXT: blr146}147 148define float @test_XSMADDMSP(float %A, float %B, float %C) {149	%D = fmul float %A, %B		; <float> [#uses=1]150	%E = fadd float %C, %D		; <float> [#uses=1]151	ret float %E152; CHECK-P8-LABEL: test_XSMADDMSP:153; CHECK-P8: xsmaddmsp154; CHECK-P8-NEXT: blr155}156 157define float @test_XSMSUBMSP(float %A, float %B, float %C) {158	%D = fmul float %A, %B		; <float> [#uses=1]159	%E = fsub float %D, %C		; <float> [#uses=1]160	ret float %E161; CHECK-P8-LABEL: test_XSMSUBMSP:162; CHECK-P8: xsmsubmsp163; CHECK-P8-NEXT: blr164}165 166define float @test_XSMADDASP(float %A, float %B, float %C, float %D) {167	%E = fmul float %A, %B 	; <float> [#uses=2]168	%F = fadd float %E, %C 	; <float> [#uses=1]169	%G = fsub float %E, %D 	; <float> [#uses=1]170	%H = call float @dummy4(float %F, float %G)      ; <float> [#uses=1]171	ret float %H172; CHECK-P8-LABEL: test_XSMADDASP:173; CHECK-P8: xsmaddasp174; CHECK-P8-NEXT: xsmsubmsp175}176 177define float @test_XSMSUBASP(float %A, float %B, float %C, float %D) {178	%E = fmul float %A, %B 	; <float> [#uses=2]179	%F = fsub float %E, %C 	; <float> [#uses=1]180	%G = fsub float %E, %D 	; <float> [#uses=1]181	%H = call float @dummy4(float %F, float %G)      ; <float> [#uses=1]182	ret float %H183; CHECK-P8-LABEL: test_XSMSUBASP:184; CHECK-P8: xsmsubasp185; CHECK-P8-NEXT: xsmsubmsp186}187 188define float @test_XSNMADDMSP(float %A, float %B, float %C) {189	%D = fmul float %A, %B		; <float> [#uses=1]190	%E = fadd float %D, %C		; <float> [#uses=1]191	%F = fsub float -0.000000e+00, %E		; <float> [#uses=1]192	ret float %F193; CHECK-P8-LABEL: test_XSNMADDMSP:194; CHECK-P8: xsnmaddmsp195; CHECK-P8-NEXT: blr196}197 198define float @test_XSNMSUBMSP(float %A, float %B, float %C) {199	%D = fmul float %A, %B		; <float> [#uses=1]200	%E = fsub float %D, %C		; <float> [#uses=1]201	%F = fsub float -0.000000e+00, %E		; <float> [#uses=1]202	ret float %F203; CHECK-P8-LABEL: test_XSNMSUBMSP:204; CHECK-P8: xsnmsubmsp205; CHECK-P8-NEXT: blr206}207 208define float @test_XSNMADDASP(float %A, float %B, float %C) {209	%D = fmul float %A, %B		; <float> [#uses=1]210	%E = fadd float %D, %C		; <float> [#uses=1]211	%F = fsub float -0.000000e+00, %E		; <float> [#uses=1]212	%H = call float @dummy4(float %E, float %F)      ; <float> [#uses=1]213	ret float %F214; CHECK-P8-LABEL: test_XSNMADDASP:215; CHECK-P8: xsnmaddasp216 217; CHECK-VSX-LABEL: test_XSNMADDASP:218; CHECK-VSX: fnmadds219}220 221define float @test_XSNMSUBASP(float %A, float %B, float %C) {222	%D = fmul float %A, %B		; <float> [#uses=1]223	%E = fsub float %D, %C		; <float> [#uses=1]224	%F = fsub float -0.000000e+00, %E		; <float> [#uses=1]225	%H = call float @dummy4(float %E, float %F)      ; <float> [#uses=1]226	ret float %F227; CHECK-P8-LABEL: test_XSNMSUBASP:228; CHECK-P8: xsnmsubasp229 230; CHECK-VSX-LABEL: test_XSNMSUBASP:231; CHECK-VSX: fnmsubs232}233