summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/fast-isel-bc.ll
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2018-03-01 22:22:31 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2018-03-01 22:22:31 +0000
commit90fd0622b63d2c7addb8b97d98e134ea63d3f037 (patch)
tree02450a7498214fb83d32a755a80ff54b3f98a58a /llvm/test/CodeGen/X86/fast-isel-bc.ll
parent05ce1d3944394be8bba20d50c8da77ff3a1b657e (diff)
downloadbcm5719-llvm-90fd0622b63d2c7addb8b97d98e134ea63d3f037.tar.gz
bcm5719-llvm-90fd0622b63d2c7addb8b97d98e134ea63d3f037.zip
[X86][MMX] Improve handling of 64-bit MMX constants
64-bit MMX constant generation usually ends up lowering into SSE instructions before being spilled/reloaded as a MMX type. This patch bitcasts the constant to a double value to allow correct loading directly to the MMX register. I've added MMX constant asm comment support to improve testing, it's better to always print the double values as hex constants as MMX is mainly an integer unit (and even with 3DNow! its just floats). Differential Revision: https://reviews.llvm.org/D43616 llvm-svn: 326497
Diffstat (limited to 'llvm/test/CodeGen/X86/fast-isel-bc.ll')
-rw-r--r--llvm/test/CodeGen/X86/fast-isel-bc.ll17
1 files changed, 2 insertions, 15 deletions
diff --git a/llvm/test/CodeGen/X86/fast-isel-bc.ll b/llvm/test/CodeGen/X86/fast-isel-bc.ll
index 3bc84c88ad8..3287f992cd0 100644
--- a/llvm/test/CodeGen/X86/fast-isel-bc.ll
+++ b/llvm/test/CodeGen/X86/fast-isel-bc.ll
@@ -7,19 +7,12 @@
declare void @func2(x86_mmx)
; This isn't spectacular, but it's MMX code at -O0...
-; For now, handling of x86_mmx parameters in fast Isel is unimplemented,
-; so we get pretty poor code. The below is preferable.
-; CHEK: movl $2, %eax
-; CHEK: movd %rax, %mm0
-; CHEK: movd %mm0, %rdi
define void @func1() nounwind {
; X86-LABEL: func1:
; X86: ## %bb.0:
; X86-NEXT: subl $12, %esp
-; X86-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
-; X86-NEXT: movsd %xmm0, (%esp)
-; X86-NEXT: movq (%esp), %mm0
+; X86-NEXT: movq LCPI0_0, %mm0 ## mm0 = 0x200000000
; X86-NEXT: calll _func2
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
@@ -27,13 +20,7 @@ define void @func1() nounwind {
; X64-LABEL: func1:
; X64: ## %bb.0:
; X64-NEXT: pushq %rax
-; X64-NEXT: movl $2, %eax
-; X64-NEXT: movl %eax, %ecx
-; X64-NEXT: movq %rcx, %xmm0
-; X64-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7]
-; X64-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
-; X64-NEXT: movq %xmm0, (%rsp)
-; X64-NEXT: movq (%rsp), %mm0
+; X64-NEXT: movq {{.*}}(%rip), %mm0 ## mm0 = 0x200000000
; X64-NEXT: movq2dq %mm0, %xmm0
; X64-NEXT: callq _func2
; X64-NEXT: popq %rax
OpenPOWER on IntegriCloud