diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2015-02-03 21:58:29 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2015-02-03 21:58:29 +0000 |
commit | 46cd4f74005b2db54399ed244f9945232d07e7be (patch) | |
tree | a9cff7138318ecdcd66015cb7f440ed1817a6946 /llvm/test/CodeGen/X86/combine-or.ll | |
parent | fe88b189905e95027a747a653bf77ed03869208b (diff) | |
download | bcm5719-llvm-46cd4f74005b2db54399ed244f9945232d07e7be.tar.gz bcm5719-llvm-46cd4f74005b2db54399ed244f9945232d07e7be.zip |
[X86][SSE] psrl(w/d/q) and psll(w/d/q) bit shifts for SSE2
Patch to match cases where shuffle masks can be reduced to bit shifts. Similar to byte shift shuffle matching from D5699.
Differential Revision: http://reviews.llvm.org/D6649
llvm-svn: 228047
Diffstat (limited to 'llvm/test/CodeGen/X86/combine-or.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/combine-or.ll | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/llvm/test/CodeGen/X86/combine-or.ll b/llvm/test/CodeGen/X86/combine-or.ll index 0eb72fa1603..2caefdb42eb 100644 --- a/llvm/test/CodeGen/X86/combine-or.ll +++ b/llvm/test/CodeGen/X86/combine-or.ll @@ -204,16 +204,14 @@ define <2 x i64> @test16(<2 x i64> %a, <2 x i64> %b) { ; shuffle instruction when the shuffle indexes are not compatible. define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) { -; CHECK-LABEL: test17:
-; CHECK: # BB#0:
-; CHECK-NEXT: xorps %xmm2, %xmm2
-; CHECK-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,0],xmm0[0,2]
-; CHECK-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2,1,3]
-; CHECK-NEXT: movq {{.*#+}} xmm0 = xmm1[0],zero
-; CHECK-NEXT: orps %xmm2, %xmm0
-; CHECK-NEXT: retq
- %shuf1 = shufflevector <4 x i32> %a, <4 x i32> zeroinitializer, <4 x i32><i32 4, i32 0, i32 4, i32 2>
- %shuf2 = shufflevector <4 x i32> %b, <4 x i32> zeroinitializer, <4 x i32><i32 0, i32 1, i32 4, i32 4>
+; CHECK-LABEL: test17: +; CHECK: # BB#0: +; CHECK-NEXT: psllq $32, %xmm0 +; CHECK-NEXT: movq {{.*#+}} xmm1 = xmm1[0],zero +; CHECK-NEXT: por %xmm1, %xmm0 +; CHECK-NEXT: retq + %shuf1 = shufflevector <4 x i32> %a, <4 x i32> zeroinitializer, <4 x i32><i32 4, i32 0, i32 4, i32 2> + %shuf2 = shufflevector <4 x i32> %b, <4 x i32> zeroinitializer, <4 x i32><i32 0, i32 1, i32 4, i32 4> %or = or <4 x i32> %shuf1, %shuf2 ret <4 x i32> %or } |