mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
it more liberally. SplitVecOp_TRUNCATE has logic for recursively splitting oversize vectors that need more than one round of splitting to become legal. There are many other ISD nodes that could benefit from this logic, so factor it out and use it for FP_TO_UINT,FP_TO_SINT,SINT_TO_FP,UINT_TO_FP and FTRUNC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233681 91177308-0d34-0410-b5e6-96231b3b80d8
17 lines
696 B
LLVM
17 lines
696 B
LLVM
; RUN: llc -mtriple=aarch64 < %s | FileCheck %s
|
|
|
|
define <8 x i8> @float_to_i8(<8 x float>* %in) {
|
|
; CHECK-LABEL: float_to_i8:
|
|
; CHECK-DAG: fadd v[[LSB:[0-9]+]].4s, v0.4s, v0.4s
|
|
; CHECK-DAG: fadd v[[MSB:[0-9]+]].4s, v1.4s, v1.4s
|
|
; CHECK-DAG: fcvtzu v[[LSB2:[0-9]+]].4s, v[[LSB]].4s
|
|
; CHECK-DAG: fcvtzu v[[MSB2:[0-9]+]].4s, v[[MSB]].4s
|
|
; CHECK-DAG: xtn v[[TMP:[0-9]+]].4h, v[[LSB]].4s
|
|
; CHECK-DAG: xtn2 v[[TMP]].8h, v[[MSB]].4s
|
|
; CHECK-DAG: xtn v0.8b, v[[TMP]].8h
|
|
%l = load <8 x float>, <8 x float>* %in
|
|
%scale = fmul <8 x float> %l, <float 2.0, float 2.0, float 2.0, float 2.0, float 2.0, float 2.0, float 2.0, float 2.0>
|
|
%conv = fptoui <8 x float> %scale to <8 x i8>
|
|
ret <8 x i8> %conv
|
|
}
|