diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-01-23 13:37:07 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-01-23 13:37:07 +0000 |
commit | fd66169341d74869f780efddaf91e0ee9fc6ec23 (patch) | |
tree | 5e96c7239e13c0d8d30b039b889aafe12ce19b30 /llvm/test/CodeGen/X86/insertps-combine.ll | |
parent | 0d9dd7df601a3a693f0a339b25ad4afa12a9e7da (diff) | |
download | bcm5719-llvm-fd66169341d74869f780efddaf91e0ee9fc6ec23.tar.gz bcm5719-llvm-fd66169341d74869f780efddaf91e0ee9fc6ec23.zip |
[X86][SSE] Remove INSERTPS dependencies from unreferenced operands.
If the INSERTPS zeroes out all the referenced elements from either of the 2 input vectors (and the input is not already UNDEF), then set that input to UNDEF to reduce dependencies.
llvm-svn: 258622
Diffstat (limited to 'llvm/test/CodeGen/X86/insertps-combine.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/insertps-combine.ll | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/insertps-combine.ll b/llvm/test/CodeGen/X86/insertps-combine.ll index 78bae28762c..54b5fe444ba 100644 --- a/llvm/test/CodeGen/X86/insertps-combine.ll +++ b/llvm/test/CodeGen/X86/insertps-combine.ll @@ -98,6 +98,38 @@ define <4 x float> @shuffle_v4f32_0z6z(<4 x float> %A, <4 x float> %B) { ret <4 x float> %vecinit4 } +define <4 x float> @insertps_undef_input0(<4 x float> %a0, <4 x float> %a1) { +; SSE-LABEL: insertps_undef_input0: +; SSE: # BB#0: +; SSE-NEXT: insertps {{.*#+}} xmm0 = zero,xmm1[0],zero,zero +; SSE-NEXT: retq +; +; AVX-LABEL: insertps_undef_input0: +; AVX: # BB#0: +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = zero,xmm1[0],zero,zero +; AVX-NEXT: retq + %res0 = fadd <4 x float> %a0, <float 1.0, float 1.0, float 1.0, float 1.0> + %res1 = call <4 x float> @llvm.x86.sse41.insertps(<4 x float> %res0, <4 x float> %a1, i8 21) + %res2 = shufflevector <4 x float> %res1, <4 x float> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 7> + ret <4 x float> %res2 +} + +define <4 x float> @insertps_undef_input1(<4 x float> %a0, <4 x float> %a1) { +; SSE-LABEL: insertps_undef_input1: +; SSE: # BB#0: +; SSE-NEXT: insertps {{.*#+}} xmm0 = zero,zero,zero,xmm0[3] +; SSE-NEXT: retq +; +; AVX-LABEL: insertps_undef_input1: +; AVX: # BB#0: +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = zero,zero,zero,xmm0[3] +; AVX-NEXT: retq + %res0 = fadd <4 x float> %a1, <float 1.0, float 1.0, float 1.0, float 1.0> + %res1 = call <4 x float> @llvm.x86.sse41.insertps(<4 x float> %a0, <4 x float> %res0, i8 21) + %res2 = shufflevector <4 x float> %res1, <4 x float> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 2, i32 3> + ret <4 x float> %res2 +} + define float @extract_zero_insertps_z0z7(<4 x float> %a0, <4 x float> %a1) { ; SSE-LABEL: extract_zero_insertps_z0z7: ; SSE: # BB#0: |