summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2015-02-05 13:23:07 +0000
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>2015-02-05 13:23:07 +0000
commitab9ae87623ac6bae1fe28a8c740063cfcd5fcdb9 (patch)
tree302157d151aa34244ce5a1755caedbc46de7d8b2 /llvm/test/CodeGen
parentcc6089d2e04339b8db4784582295b283c6b46398 (diff)
downloadbcm5719-llvm-ab9ae87623ac6bae1fe28a8c740063cfcd5fcdb9.tar.gz
bcm5719-llvm-ab9ae87623ac6bae1fe28a8c740063cfcd5fcdb9.zip
[X86][MMX] Handle i32->mmx conversion using movd
Implement a BITCAST dag combine to transform i32->mmx conversion patterns into a X86 specific node (MMX_MOVW2D) and guarantee that moves between i32 and x86mmx are better handled, i.e., don't use store-load to do the conversion.. llvm-svn: 228293
Diffstat (limited to 'llvm/test/CodeGen')
-rw-r--r--llvm/test/CodeGen/X86/bitcast-mmx.ll29
-rw-r--r--llvm/test/CodeGen/X86/vec_extract-mmx.ll5
2 files changed, 14 insertions, 20 deletions
diff --git a/llvm/test/CodeGen/X86/bitcast-mmx.ll b/llvm/test/CodeGen/X86/bitcast-mmx.ll
index 6bfe6e84adc..616b21fca04 100644
--- a/llvm/test/CodeGen/X86/bitcast-mmx.ll
+++ b/llvm/test/CodeGen/X86/bitcast-mmx.ll
@@ -22,11 +22,10 @@ entry:
define i64 @t1(i64 %x, i32 %n) {
; CHECK-LABEL: t1:
; CHECK: ## BB#0: ## %entry
-; CHECK-NEXT: movd %rdi, %mm0
-; CHECK-NEXT: movd %esi, %xmm0
-; CHECK-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
-; CHECK-NEXT: psllq -{{[0-9]+}}(%rsp), %mm0
-; CHECK-NEXT: movd %mm0, %rax
+; CHECK-NEXT: movd %esi, %mm0
+; CHECK-NEXT: movd %rdi, %mm1
+; CHECK-NEXT: psllq %mm0, %mm1
+; CHECK-NEXT: movd %mm1, %rax
; CHECK-NEXT: retq
entry:
%0 = bitcast i64 %x to x86_mmx
@@ -38,15 +37,12 @@ entry:
define i64 @t2(i64 %x, i32 %n, i32 %w) {
; CHECK-LABEL: t2:
; CHECK: ## BB#0: ## %entry
-; CHECK-NEXT: movd %edx, %xmm0
-; CHECK-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
-; CHECK-NEXT: movq -{{[0-9]+}}(%rsp), %mm0
-; CHECK-NEXT: movd %esi, %xmm0
-; CHECK-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
-; CHECK-NEXT: psllq -{{[0-9]+}}(%rsp), %mm0
-; CHECK-NEXT: movd %rdi, %mm1
-; CHECK-NEXT: por %mm0, %mm1
-; CHECK-NEXT: movd %mm1, %rax
+; CHECK-NEXT: movd %esi, %mm0
+; CHECK-NEXT: movd %edx, %mm1
+; CHECK-NEXT: psllq %mm0, %mm1
+; CHECK-NEXT: movd %rdi, %mm0
+; CHECK-NEXT: por %mm1, %mm0
+; CHECK-NEXT: movd %mm0, %rax
; CHECK-NEXT: retq
entry:
%0 = insertelement <2 x i32> undef, i32 %w, i32 0
@@ -63,9 +59,8 @@ define i64 @t3(<1 x i64>* %y, i32* %n) {
; CHECK-LABEL: t3:
; CHECK: ## BB#0: ## %entry
; CHECK-NEXT: movq (%rdi), %mm0
-; CHECK-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; CHECK-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
-; CHECK-NEXT: psllq -{{[0-9]+}}(%rsp), %mm0
+; CHECK-NEXT: movd (%rsi), %mm1
+; CHECK-NEXT: psllq %mm1, %mm0
; CHECK-NEXT: movd %mm0, %rax
; CHECK-NEXT: retq
entry:
diff --git a/llvm/test/CodeGen/X86/vec_extract-mmx.ll b/llvm/test/CodeGen/X86/vec_extract-mmx.ll
index af65a965f70..c7780b02376 100644
--- a/llvm/test/CodeGen/X86/vec_extract-mmx.ll
+++ b/llvm/test/CodeGen/X86/vec_extract-mmx.ll
@@ -23,9 +23,8 @@ define i32 @test0(<1 x i64>* %v4) {
define i32 @test1(i32* nocapture readonly %ptr) {
; CHECK-LABEL: test1:
; CHECK: ## BB#0: ## %entry
-; CHECK-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; CHECK-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
-; CHECK-NEXT: pshufw $232, -{{[0-9]+}}(%rsp), %mm0
+; CHECK-NEXT: movd (%rdi), %mm0
+; CHECK-NEXT: pshufw $232, %mm0, %mm0
; CHECK-NEXT: movd %mm0, %eax
; CHECK-NEXT: emms
; CHECK-NEXT: retq
OpenPOWER on IntegriCloud