diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2015-02-05 13:23:07 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2015-02-05 13:23:07 +0000 |
commit | ab9ae87623ac6bae1fe28a8c740063cfcd5fcdb9 (patch) | |
tree | 302157d151aa34244ce5a1755caedbc46de7d8b2 /llvm/test/CodeGen | |
parent | cc6089d2e04339b8db4784582295b283c6b46398 (diff) | |
download | bcm5719-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.ll | 29 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/vec_extract-mmx.ll | 5 |
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 |