diff options
author | Sanjay Patel <spatel@rotateright.com> | 2019-04-25 20:35:47 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2019-04-25 20:35:47 +0000 |
commit | 7a2718181e96e18f55333e6f2b16e78e97b306eb (patch) | |
tree | a14fc7a5e2061a7200d54dc731a38258381e5117 | |
parent | ecefce6a49b46551d2a4b3b37d360dde90a32f8d (diff) | |
download | bcm5719-llvm-7a2718181e96e18f55333e6f2b16e78e97b306eb.tar.gz bcm5719-llvm-7a2718181e96e18f55333e6f2b16e78e97b306eb.zip |
[x86] add tests for vector fdiv reciprocal estimate; NFC
llvm-svn: 359238
-rw-r--r-- | llvm/test/CodeGen/X86/fdiv-combine-vec.ll | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/fdiv-combine-vec.ll b/llvm/test/CodeGen/X86/fdiv-combine-vec.ll index 6c05712581d..6de3f31892d 100644 --- a/llvm/test/CodeGen/X86/fdiv-combine-vec.ll +++ b/llvm/test/CodeGen/X86/fdiv-combine-vec.ll @@ -105,3 +105,67 @@ define <8 x float> @splat_fdiv_v8f32(<8 x float> %x, float %y) { %r = fdiv fast <8 x float> %x, %splaty ret <8 x float> %r } + +define <4 x float> @splat_fdiv_v4f32_estimate(<4 x float> %x, float %y) #0 { +; SSE-LABEL: splat_fdiv_v4f32_estimate: +; SSE: # %bb.0: +; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0,0,0] +; SSE-NEXT: rcpps %xmm1, %xmm2 +; SSE-NEXT: mulps %xmm2, %xmm1 +; SSE-NEXT: movaps {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0] +; SSE-NEXT: subps %xmm1, %xmm3 +; SSE-NEXT: mulps %xmm2, %xmm3 +; SSE-NEXT: addps %xmm2, %xmm3 +; SSE-NEXT: mulps %xmm3, %xmm0 +; SSE-NEXT: retq +; +; AVX-LABEL: splat_fdiv_v4f32_estimate: +; AVX: # %bb.0: +; AVX-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[0,0,0,0] +; AVX-NEXT: vrcpps %xmm1, %xmm2 +; AVX-NEXT: vmulps %xmm2, %xmm1, %xmm1 +; AVX-NEXT: vmovaps {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0] +; AVX-NEXT: vsubps %xmm1, %xmm3, %xmm1 +; AVX-NEXT: vmulps %xmm1, %xmm2, %xmm1 +; AVX-NEXT: vaddps %xmm1, %xmm2, %xmm1 +; AVX-NEXT: vmulps %xmm1, %xmm0, %xmm0 +; AVX-NEXT: retq + %vy = insertelement <4 x float> undef, float %y, i32 0 + %splaty = shufflevector <4 x float> %vy, <4 x float> undef, <4 x i32> zeroinitializer + %r = fdiv arcp reassoc <4 x float> %x, %splaty + ret <4 x float> %r +} + +define <8 x float> @splat_fdiv_v8f32_estimate(<8 x float> %x, float %y) #0 { +; SSE-LABEL: splat_fdiv_v8f32_estimate: +; SSE: # %bb.0: +; SSE-NEXT: rcpss %xmm2, %xmm3 +; SSE-NEXT: mulss %xmm3, %xmm2 +; SSE-NEXT: movss {{.*#+}} xmm4 = mem[0],zero,zero,zero +; SSE-NEXT: subss %xmm2, %xmm4 +; SSE-NEXT: mulss %xmm3, %xmm4 +; SSE-NEXT: addss %xmm3, %xmm4 +; SSE-NEXT: shufps {{.*#+}} xmm4 = xmm4[0,0,0,0] +; SSE-NEXT: mulps %xmm4, %xmm0 +; SSE-NEXT: mulps %xmm4, %xmm1 +; SSE-NEXT: retq +; +; AVX-LABEL: splat_fdiv_v8f32_estimate: +; AVX: # %bb.0: +; AVX-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[0,0,0,0] +; AVX-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1 +; AVX-NEXT: vrcpps %ymm1, %ymm2 +; AVX-NEXT: vmulps %ymm2, %ymm1, %ymm1 +; AVX-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0] +; AVX-NEXT: vsubps %ymm1, %ymm3, %ymm1 +; AVX-NEXT: vmulps %ymm1, %ymm2, %ymm1 +; AVX-NEXT: vaddps %ymm1, %ymm2, %ymm1 +; AVX-NEXT: vmulps %ymm1, %ymm0, %ymm0 +; AVX-NEXT: retq + %vy = insertelement <8 x float> undef, float %y, i32 0 + %splaty = shufflevector <8 x float> %vy, <8 x float> undef, <8 x i32> zeroinitializer + %r = fdiv fast <8 x float> %x, %splaty + ret <8 x float> %r +} + +attributes #0 = { "reciprocal-estimates"="divf,vec-divf" } |