mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
da5e5688e9
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
46 lines
1.2 KiB
LLVM
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
|
|
}
|