mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 23:23:38 -04:00
8816e4b535
We require d/q suffixes on the memory form of these instructions to disambiguate the memory size. We don't require it on the register forms, but need to support parsing both with and without it. Previously we always printed the d/q suffix on the register forms, but it's redundant and inconsistent with gcc and objdump. After this patch we should support the d/q for parsing, but not print it when its unneeded. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@360085 91177308-0d34-0410-b5e6-96231b3b80d8
50 lines
1.6 KiB
LLVM
50 lines
1.6 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc < %s -mtriple=i686-apple-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X86
|
|
; RUN: llc < %s -mtriple=x86_64-apple-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X64
|
|
|
|
; Verify that we are using the efficient uitofp --> sitofp lowering illustrated
|
|
; by the compiler_rt implementation of __floatundisf.
|
|
; <rdar://problem/8493982>
|
|
|
|
define float @test(i64 %a) nounwind {
|
|
; X86-LABEL: test:
|
|
; X86: # %bb.0: # %entry
|
|
; X86-NEXT: pushl %ebp
|
|
; X86-NEXT: movl %esp, %ebp
|
|
; X86-NEXT: andl $-8, %esp
|
|
; X86-NEXT: subl $16, %esp
|
|
; X86-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
|
|
; X86-NEXT: movlps %xmm0, {{[0-9]+}}(%esp)
|
|
; X86-NEXT: xorl %eax, %eax
|
|
; X86-NEXT: cmpl $0, 12(%ebp)
|
|
; X86-NEXT: setns %al
|
|
; X86-NEXT: fildll {{[0-9]+}}(%esp)
|
|
; X86-NEXT: fadds {{\.LCPI.*}}(,%eax,4)
|
|
; X86-NEXT: fstps {{[0-9]+}}(%esp)
|
|
; X86-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; X86-NEXT: movss %xmm0, (%esp)
|
|
; X86-NEXT: flds (%esp)
|
|
; X86-NEXT: movl %ebp, %esp
|
|
; X86-NEXT: popl %ebp
|
|
; X86-NEXT: retl
|
|
;
|
|
; X64-LABEL: test:
|
|
; X64: # %bb.0: # %entry
|
|
; X64-NEXT: testq %rdi, %rdi
|
|
; X64-NEXT: js .LBB0_1
|
|
; X64-NEXT: # %bb.2: # %entry
|
|
; X64-NEXT: cvtsi2ss %rdi, %xmm0
|
|
; X64-NEXT: retq
|
|
; X64-NEXT: .LBB0_1:
|
|
; X64-NEXT: movq %rdi, %rax
|
|
; X64-NEXT: shrq %rax
|
|
; X64-NEXT: andl $1, %edi
|
|
; X64-NEXT: orq %rax, %rdi
|
|
; X64-NEXT: cvtsi2ss %rdi, %xmm0
|
|
; X64-NEXT: addss %xmm0, %xmm0
|
|
; X64-NEXT: retq
|
|
entry:
|
|
%b = uitofp i64 %a to float
|
|
ret float %b
|
|
}
|