1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=aarch64-none-linux-gnu -march=arm64 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @fptosi_v4f64_to_v4i16(<4 x double>* %ptr) { 5*9880d681SAndroid Build Coastguard Worker; CHECK: fptosi_v4f64_to_v4i16 6*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzs v[[LHS:[0-9]+]].2d, v0.2d 7*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzs v[[RHS:[0-9]+]].2d, v1.2d 8*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn v[[MID:[0-9]+]].2s, v[[LHS]].2d 9*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn2 v[[MID]].4s, v[[RHS]].2d 10*9880d681SAndroid Build Coastguard Worker; CHECK: xtn v0.4h, v[[MID]].4s 11*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x double>, <4 x double>* %ptr 12*9880d681SAndroid Build Coastguard Worker %tmp2 = fptosi <4 x double> %tmp1 to <4 x i16> 13*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @fptosi_v4f64_to_v4i8(<8 x double>* %ptr) { 17*9880d681SAndroid Build Coastguard Worker; CHECK: fptosi_v4f64_to_v4i8 18*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzs v[[CONV0:[0-9]+]].2d, v0.2d 19*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzs v[[CONV1:[0-9]+]].2d, v1.2d 20*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzs v[[CONV2:[0-9]+]].2d, v2.2d 21*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzs v[[CONV3:[0-9]+]].2d, v3.2d 22*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn v[[NA2:[0-9]+]].2s, v[[CONV2]].2d 23*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn2 v[[NA2]].4s, v[[CONV3]].2d 24*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn v[[NA0:[0-9]+]].2s, v[[CONV0]].2d 25*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn2 v[[NA0]].4s, v[[CONV1]].2d 26*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn v[[TMP1:[0-9]+]].4h, v[[NA2]].4s 27*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn2 v[[TMP1]].8h, v[[NA0]].4s 28*9880d681SAndroid Build Coastguard Worker; CHECK: xtn v0.8b, v[[TMP1]].8h 29*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x double>, <8 x double>* %ptr 30*9880d681SAndroid Build Coastguard Worker %tmp2 = fptosi <8 x double> %tmp1 to <8 x i8> 31*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp2 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine <4 x half> @uitofp_v4i64_to_v4f16(<4 x i64>* %ptr) { 35*9880d681SAndroid Build Coastguard Worker; CHECK: uitofp_v4i64_to_v4f16 36*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ucvtf v[[LHS:[0-9]+]].2d, v0.2d 37*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ucvtf v[[RHS:[0-9]+]].2d, v1.2d 38*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v[[MID:[0-9]+]].2s, v[[LHS]].2d 39*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn2 v[[MID]].4s, v[[RHS]].2d 40*9880d681SAndroid Build Coastguard Worker; CHECK: fcvtn v0.4h, v[[MID]].4s 41*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i64>, <4 x i64>* %ptr 42*9880d681SAndroid Build Coastguard Worker %tmp2 = uitofp <4 x i64> %tmp1 to <4 x half> 43*9880d681SAndroid Build Coastguard Worker ret <4 x half> %tmp2 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @trunc_v4i64_to_v4i16(<4 x i64>* %ptr) { 47*9880d681SAndroid Build Coastguard Worker; CHECK: trunc_v4i64_to_v4i16 48*9880d681SAndroid Build Coastguard Worker; CHECK: xtn 49*9880d681SAndroid Build Coastguard Worker; CHECK: xtn2 50*9880d681SAndroid Build Coastguard Worker; CHECK: xtn 51*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i64>, <4 x i64>* %ptr 52*9880d681SAndroid Build Coastguard Worker %tmp2 = trunc <4 x i64> %tmp1 to <4 x i16> 53*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @fptoui_v4f64_to_v4i16(<4 x double>* %ptr) { 57*9880d681SAndroid Build Coastguard Worker; CHECK: fptoui_v4f64_to_v4i16 58*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzu v[[LHS:[0-9]+]].2d, v0.2d 59*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzu v[[RHS:[0-9]+]].2d, v1.2d 60*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn v[[MID:[0-9]+]].2s, v[[LHS]].2d 61*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn2 v[[MID]].4s, v[[RHS]].2d 62*9880d681SAndroid Build Coastguard Worker; CHECK: xtn v0.4h, v[[MID]].4s 63*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x double>, <4 x double>* %ptr 64*9880d681SAndroid Build Coastguard Worker %tmp2 = fptoui <4 x double> %tmp1 to <4 x i16> 65*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 66*9880d681SAndroid Build Coastguard Worker} 67