Mercurial > hg > CbC > CbC_llvm
diff test/CodeGen/X86/avx512-fma.ll @ 100:7d135dc70f03 LLVM 3.9
LLVM 3.9
author | Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 26 Jan 2016 22:53:40 +0900 |
parents | afa8332a0e37 |
children | 1172e4bd9c6f |
line wrap: on
line diff
--- a/test/CodeGen/X86/avx512-fma.ll Tue Oct 13 17:49:56 2015 +0900 +++ b/test/CodeGen/X86/avx512-fma.ll Tue Jan 26 22:53:40 2016 +0900 @@ -1,81 +1,93 @@ -; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f -fp-contract=fast | FileCheck %s -; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx -fp-contract=fast | FileCheck %s --check-prefix=SKX +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f -fp-contract=fast | FileCheck %s --check-prefix=ALL --check-prefix=KNL +; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx -fp-contract=fast | FileCheck %s --check-prefix=ALL --check-prefix=SKX -; CHECK-LABEL: test_x86_fmadd_ps_z -; CHECK: vfmadd213ps %zmm2, %zmm1, %zmm0 -; CHECK: ret define <16 x float> @test_x86_fmadd_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) { +; ALL-LABEL: test_x86_fmadd_ps_z: +; ALL: ## BB#0: +; ALL-NEXT: vfmadd213ps %zmm2, %zmm1, %zmm0 +; ALL-NEXT: retq %x = fmul <16 x float> %a0, %a1 %res = fadd <16 x float> %x, %a2 ret <16 x float> %res } -; CHECK-LABEL: test_x86_fmsub_ps_z -; CHECK: vfmsub213ps %zmm2, %zmm1, %zmm0 -; CHECK: ret define <16 x float> @test_x86_fmsub_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) { +; ALL-LABEL: test_x86_fmsub_ps_z: +; ALL: ## BB#0: +; ALL-NEXT: vfmsub213ps %zmm2, %zmm1, %zmm0 +; ALL-NEXT: retq %x = fmul <16 x float> %a0, %a1 %res = fsub <16 x float> %x, %a2 ret <16 x float> %res } -; CHECK-LABEL: test_x86_fnmadd_ps_z -; CHECK: vfnmadd213ps %zmm2, %zmm1, %zmm0 -; CHECK: ret define <16 x float> @test_x86_fnmadd_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) { +; ALL-LABEL: test_x86_fnmadd_ps_z: +; ALL: ## BB#0: +; ALL-NEXT: vfnmadd213ps %zmm2, %zmm1, %zmm0 +; ALL-NEXT: retq %x = fmul <16 x float> %a0, %a1 %res = fsub <16 x float> %a2, %x ret <16 x float> %res } -; CHECK-LABEL: test_x86_fnmsub_ps_z -; CHECK: vfnmsub213ps %zmm2, %zmm1, %zmm0 -; CHECK: ret define <16 x float> @test_x86_fnmsub_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) { +; ALL-LABEL: test_x86_fnmsub_ps_z: +; ALL: ## BB#0: +; ALL-NEXT: vfnmsub213ps %zmm2, %zmm1, %zmm0 +; ALL-NEXT: retq %x = fmul <16 x float> %a0, %a1 - %y = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, + %y = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, - float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, - float -0.000000e+00>, %x + float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, + float -0.000000e+00>, %x %res = fsub <16 x float> %y, %a2 ret <16 x float> %res } -; CHECK-LABEL: test_x86_fmadd_pd_z -; CHECK: vfmadd213pd %zmm2, %zmm1, %zmm0 -; CHECK: ret define <8 x double> @test_x86_fmadd_pd_z(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) { +; ALL-LABEL: test_x86_fmadd_pd_z: +; ALL: ## BB#0: +; ALL-NEXT: vfmadd213pd %zmm2, %zmm1, %zmm0 +; ALL-NEXT: retq %x = fmul <8 x double> %a0, %a1 %res = fadd <8 x double> %x, %a2 ret <8 x double> %res } -; CHECK-LABEL: test_x86_fmsub_pd_z -; CHECK: vfmsub213pd %zmm2, %zmm1, %zmm0 -; CHECK: ret define <8 x double> @test_x86_fmsub_pd_z(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) { +; ALL-LABEL: test_x86_fmsub_pd_z: +; ALL: ## BB#0: +; ALL-NEXT: vfmsub213pd %zmm2, %zmm1, %zmm0 +; ALL-NEXT: retq %x = fmul <8 x double> %a0, %a1 %res = fsub <8 x double> %x, %a2 ret <8 x double> %res } define double @test_x86_fmsub_213(double %a0, double %a1, double %a2) { -; CHECK-LABEL: test_x86_fmsub_213: -; CHECK: ## BB#0: -; CHECK-NEXT: vfmsub213sd %xmm2, %xmm0, %xmm1 -; CHECK-NEXT: vmovaps %zmm1, %zmm0 -; CHECK-NEXT: retq +; ALL-LABEL: test_x86_fmsub_213: +; ALL: ## BB#0: +; ALL-NEXT: vfmsub213sd %xmm2, %xmm0, %xmm1 +; ALL-NEXT: vmovaps %zmm1, %zmm0 +; ALL-NEXT: retq %x = fmul double %a0, %a1 %res = fsub double %x, %a2 ret double %res } define double @test_x86_fmsub_213_m(double %a0, double %a1, double * %a2_ptr) { -; CHECK-LABEL: test_x86_fmsub_213_m: -; CHECK: ## BB#0: -; CHECK-NEXT: vfmsub213sd (%rdi), %xmm0, %xmm1 -; CHECK-NEXT: vmovaps %zmm1, %zmm0 -; CHECK-NEXT: retq +; KNL-LABEL: test_x86_fmsub_213_m: +; KNL: ## BB#0: +; KNL-NEXT: vfmsub213sd (%rdi), %xmm0, %xmm1 +; KNL-NEXT: vmovaps %zmm1, %zmm0 +; KNL-NEXT: retq +; +; SKX-LABEL: test_x86_fmsub_213_m: +; SKX: ## BB#0: +; SKX-NEXT: vfmsub213sd (%rdi), %xmm1, %xmm0 +; SKX-NEXT: retq %a2 = load double , double *%a2_ptr %x = fmul double %a0, %a1 %res = fsub double %x, %a2 @@ -83,11 +95,11 @@ } define double @test_x86_fmsub_231_m(double %a0, double %a1, double * %a2_ptr) { -; CHECK-LABEL: test_x86_fmsub_231_m: -; CHECK: ## BB#0: -; CHECK-NEXT: vfmsub231sd (%rdi), %xmm0, %xmm1 -; CHECK-NEXT: vmovaps %zmm1, %zmm0 -; CHECK-NEXT: retq +; ALL-LABEL: test_x86_fmsub_231_m: +; ALL: ## BB#0: +; ALL-NEXT: vfmsub231sd (%rdi), %xmm0, %xmm1 +; ALL-NEXT: vmovaps %zmm1, %zmm0 +; ALL-NEXT: retq %a2 = load double , double *%a2_ptr %x = fmul double %a0, %a2 %res = fsub double %x, %a1 @@ -95,21 +107,21 @@ } define <16 x float> @test231_br(<16 x float> %a1, <16 x float> %a2) nounwind { -; CHECK-LABEL: test231_br: -; CHECK: ## BB#0: -; CHECK-NEXT: vfmadd231ps {{.*}}(%rip){1to16}, %zmm0, %zmm1 -; CHECK-NEXT: vmovaps %zmm1, %zmm0 -; CHECK-NEXT: retq +; ALL-LABEL: test231_br: +; ALL: ## BB#0: +; ALL-NEXT: vfmadd231ps {{.*}}(%rip){1to16}, %zmm0, %zmm1 +; ALL-NEXT: vmovaps %zmm1, %zmm0 +; ALL-NEXT: retq %b1 = fmul <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> %b2 = fadd <16 x float> %b1, %a2 ret <16 x float> %b2 } define <16 x float> @test213_br(<16 x float> %a1, <16 x float> %a2) nounwind { -; CHECK-LABEL: test213_br: -; CHECK: ## BB#0: -; CHECK-NEXT: vfmadd213ps {{.*}}(%rip){1to16}, %zmm1, %zmm0 -; CHECK-NEXT: retq +; ALL-LABEL: test213_br: +; ALL: ## BB#0: +; ALL-NEXT: vfmadd213ps {{.*}}(%rip){1to16}, %zmm1, %zmm0 +; ALL-NEXT: retq %b1 = fmul <16 x float> %a1, %a2 %b2 = fadd <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> ret <16 x float> %b2 @@ -117,16 +129,17 @@ ;mask (a*c+b , a) define <16 x float> @test_x86_fmadd132_ps(<16 x float> %a0, <16 x float> %a1, <16 x float> *%a2_ptrt, <16 x i1> %mask) { -; CHECK-LABEL: test_x86_fmadd132_ps: -; CHECK: ## BB#0: -; CHECK-NEXT: vpmovsxbd %xmm2, %zmm2 -; CHECK-NEXT: vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2 -; CHECK-NEXT: vptestmd %zmm2, %zmm2, %k1 -; CHECK-NEXT: vfmadd132ps (%rdi), %zmm1, %zmm0 {%k1} -; CHECK-NEXT: retq +; KNL-LABEL: test_x86_fmadd132_ps: +; KNL: ## BB#0: +; KNL-NEXT: vpmovsxbd %xmm2, %zmm2 +; KNL-NEXT: vpslld $31, %zmm2, %zmm2 +; KNL-NEXT: vptestmd %zmm2, %zmm2, %k1 +; KNL-NEXT: vfmadd132ps (%rdi), %zmm1, %zmm0 {%k1} +; KNL-NEXT: retq ; ; SKX-LABEL: test_x86_fmadd132_ps: ; SKX: ## BB#0: +; SKX-NEXT: vpsllw $7, %xmm2, %xmm2 ; SKX-NEXT: vpmovb2m %xmm2, %k1 ; SKX-NEXT: vfmadd132ps (%rdi), %zmm1, %zmm0 {%k1} ; SKX-NEXT: retq @@ -139,17 +152,18 @@ ;mask (a*c+b , b) define <16 x float> @test_x86_fmadd231_ps(<16 x float> %a0, <16 x float> %a1, <16 x float> *%a2_ptrt, <16 x i1> %mask) { -; CHECK-LABEL: test_x86_fmadd231_ps: -; CHECK: ## BB#0: -; CHECK-NEXT: vpmovsxbd %xmm2, %zmm2 -; CHECK-NEXT: vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2 -; CHECK-NEXT: vptestmd %zmm2, %zmm2, %k1 -; CHECK-NEXT: vfmadd231ps (%rdi), %zmm0, %zmm1 {%k1} -; CHECK-NEXT: vmovaps %zmm1, %zmm0 -; CHECK-NEXT: retq +; KNL-LABEL: test_x86_fmadd231_ps: +; KNL: ## BB#0: +; KNL-NEXT: vpmovsxbd %xmm2, %zmm2 +; KNL-NEXT: vpslld $31, %zmm2, %zmm2 +; KNL-NEXT: vptestmd %zmm2, %zmm2, %k1 +; KNL-NEXT: vfmadd231ps (%rdi), %zmm0, %zmm1 {%k1} +; KNL-NEXT: vmovaps %zmm1, %zmm0 +; KNL-NEXT: retq ; ; SKX-LABEL: test_x86_fmadd231_ps: ; SKX: ## BB#0: +; SKX-NEXT: vpsllw $7, %xmm2, %xmm2 ; SKX-NEXT: vpmovb2m %xmm2, %k1 ; SKX-NEXT: vfmadd231ps (%rdi), %zmm0, %zmm1 {%k1} ; SKX-NEXT: vmovaps %zmm1, %zmm0 @@ -163,17 +177,18 @@ ;mask (b*a+c , b) define <16 x float> @test_x86_fmadd213_ps(<16 x float> %a0, <16 x float> %a1, <16 x float> *%a2_ptrt, <16 x i1> %mask) { -; CHECK-LABEL: test_x86_fmadd213_ps: -; CHECK: ## BB#0: -; CHECK-NEXT: vpmovsxbd %xmm2, %zmm2 -; CHECK-NEXT: vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2 -; CHECK-NEXT: vptestmd %zmm2, %zmm2, %k1 -; CHECK-NEXT: vfmadd213ps (%rdi), %zmm0, %zmm1 {%k1} -; CHECK-NEXT: vmovaps %zmm1, %zmm0 -; CHECK-NEXT: retq +; KNL-LABEL: test_x86_fmadd213_ps: +; KNL: ## BB#0: +; KNL-NEXT: vpmovsxbd %xmm2, %zmm2 +; KNL-NEXT: vpslld $31, %zmm2, %zmm2 +; KNL-NEXT: vptestmd %zmm2, %zmm2, %k1 +; KNL-NEXT: vfmadd213ps (%rdi), %zmm0, %zmm1 {%k1} +; KNL-NEXT: vmovaps %zmm1, %zmm0 +; KNL-NEXT: retq ; ; SKX-LABEL: test_x86_fmadd213_ps: ; SKX: ## BB#0: +; SKX-NEXT: vpsllw $7, %xmm2, %xmm2 ; SKX-NEXT: vpmovb2m %xmm2, %k1 ; SKX-NEXT: vfmadd213ps (%rdi), %zmm0, %zmm1 {%k1} ; SKX-NEXT: vmovaps %zmm1, %zmm0