summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/fast-isel-bc.ll
blob: 3bc84c88ad86a48ebb7c24e8a98c7e99bd4150bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -O0 -mtriple=i686-apple-darwin9.8 -mattr=+mmx,+sse2 | FileCheck %s --check-prefixes=X86
; RUN: llc < %s -O0 -mtriple=x86_64-apple-darwin9.8 -mattr=+mmx,+sse2 | FileCheck %s --check-prefixes=X64

; PR4684

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:    calll _func2
; X86-NEXT:    addl $12, %esp
; X86-NEXT:    retl
;
; 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:    movq2dq %mm0, %xmm0
; X64-NEXT:    callq _func2
; X64-NEXT:    popq %rax
; X64-NEXT:    retq
  %tmp0 = bitcast <2 x i32> <i32 0, i32 2> to x86_mmx
  call void @func2(x86_mmx %tmp0)
  ret void
}
OpenPOWER on IntegriCloud