llvm-6502/test/CodeGen/X86/fast-isel-int-float-conversion.ll
Andrea Di Biagio da5e5688e9 [X86][FastISel] Simplify the logic in method X86SelectSIToFP.
The target-independent selection algorithm in FastISel already knows how
to select a SINT_TO_FP if the target is SSE but not AVX.

On targets that have SSE but not AVX, the tablegen'd 'fastEmit' functions
for ISD::SINT_TO_FP know how to select instruction X86::CVTSI2SSrr
(for an i32 to f32 conversion) and X86::CVTSI2SDrr (for an i32 to f64
conversion).

This patch simplifies the logic in method X86SelectSIToFP knowing that
the code would not be reachable if the subtarget doesn't have AVX.
No functional change intended.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231243 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-04 14:23:25 +00:00

46 lines
1.2 KiB
LLVM

; RUN: llc -mtriple=x86_64-unknown-unknown -mcpu=generic -mattr=+sse2 -fast-isel --fast-isel-abort=1 < %s | FileCheck %s --check-prefix=ALL --check-prefix=SSE2
; RUN: llc -mtriple=x86_64-unknown-unknown -mcpu=generic -mattr=+avx -fast-isel --fast-isel-abort=1 < %s | FileCheck %s --check-prefix=ALL --check-prefix=AVX
define double @int_to_double_rr(i32 %a) {
; ALL-LABEL: int_to_double_rr:
; SSE2: cvtsi2sdl %edi, %xmm0
; AVX: vcvtsi2sdl %edi, %xmm0, %xmm0
; ALL-NEXT: ret
entry:
%0 = sitofp i32 %a to double
ret double %0
}
define double @int_to_double_rm(i32* %a) {
; ALL-LABEL: int_to_double_rm:
; SSE2: cvtsi2sdl (%rdi), %xmm0
; AVX: vcvtsi2sdl (%rdi), %xmm0, %xmm0
; ALL-NEXT: ret
entry:
%0 = load i32, i32* %a
%1 = sitofp i32 %0 to double
ret double %1
}
define float @int_to_float_rr(i32 %a) {
; ALL-LABEL: int_to_float_rr:
; SSE2: cvtsi2ssl %edi, %xmm0
; AVX: vcvtsi2ssl %edi, %xmm0, %xmm0
; ALL-NEXT: ret
entry:
%0 = sitofp i32 %a to float
ret float %0
}
define float @int_to_float_rm(i32* %a) {
; ALL-LABEL: int_to_float_rm:
; SSE2: cvtsi2ssl (%rdi), %xmm0
; AVX: vcvtsi2ssl (%rdi), %xmm0, %xmm0
; ALL-NEXT: ret
entry:
%0 = load i32, i32* %a
%1 = sitofp i32 %0 to float
ret float %1
}