1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -asm-verbose=false -mtriple=aarch64-none-eabi | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @add_h(<8 x half> %a, <8 x half> %b) { 4*9880d681SAndroid Build Coastguard Workerentry: 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add_h: 6*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 7*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 8*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fadd 9*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 10*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 11*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fadd 12*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 13*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 14*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fadd 15*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 16*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 17*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fadd 18*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 19*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 20*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fadd 21*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 22*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 23*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fadd 24*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 25*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 26*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fadd 27*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 28*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 29*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fadd 30*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 31*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 32*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 33*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 34*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 35*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 36*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 37*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 38*9880d681SAndroid Build Coastguard Worker %0 = fadd <8 x half> %a, %b 39*9880d681SAndroid Build Coastguard Worker ret <8 x half> %0 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @sub_h(<8 x half> %a, <8 x half> %b) { 44*9880d681SAndroid Build Coastguard Workerentry: 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sub_h: 46*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 47*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 48*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsub 49*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 50*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 51*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsub 52*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 53*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 54*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsub 55*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 56*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 57*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsub 58*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 59*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 60*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsub 61*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 62*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 63*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsub 64*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 65*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 66*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsub 67*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 68*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 69*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsub 70*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 71*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 72*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 73*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 74*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 75*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 76*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 77*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 78*9880d681SAndroid Build Coastguard Worker %0 = fsub <8 x half> %a, %b 79*9880d681SAndroid Build Coastguard Worker ret <8 x half> %0 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @mul_h(<8 x half> %a, <8 x half> %b) { 84*9880d681SAndroid Build Coastguard Workerentry: 85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mul_h: 86*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 87*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 88*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fmul 89*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 90*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 91*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fmul 92*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 93*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 94*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fmul 95*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 96*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 97*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fmul 98*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 99*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 100*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fmul 101*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 102*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 103*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fmul 104*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 105*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 106*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fmul 107*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 108*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 109*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fmul 110*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 111*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 112*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 113*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 114*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 115*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 116*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 117*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 118*9880d681SAndroid Build Coastguard Worker %0 = fmul <8 x half> %a, %b 119*9880d681SAndroid Build Coastguard Worker ret <8 x half> %0 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @div_h(<8 x half> %a, <8 x half> %b) { 124*9880d681SAndroid Build Coastguard Workerentry: 125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: div_h: 126*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 127*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 128*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fdiv 129*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 130*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 131*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fdiv 132*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 133*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 134*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fdiv 135*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 136*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 137*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fdiv 138*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 139*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 140*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fdiv 141*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 142*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 143*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fdiv 144*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 145*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 146*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fdiv 147*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 148*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 149*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fdiv 150*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 151*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 152*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 153*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 154*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 155*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 156*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt 157*9880d681SAndroid Build Coastguard Worker; CHECK: fcvt 158*9880d681SAndroid Build Coastguard Worker %0 = fdiv <8 x half> %a, %b 159*9880d681SAndroid Build Coastguard Worker ret <8 x half> %0 160*9880d681SAndroid Build Coastguard Worker} 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @load_h(<8 x half>* %a) { 164*9880d681SAndroid Build Coastguard Workerentry: 165*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_h: 166*9880d681SAndroid Build Coastguard Worker; CHECK: ldr q0, [x0] 167*9880d681SAndroid Build Coastguard Worker %0 = load <8 x half>, <8 x half>* %a, align 4 168*9880d681SAndroid Build Coastguard Worker ret <8 x half> %0 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Workerdefine void @store_h(<8 x half>* %a, <8 x half> %b) { 173*9880d681SAndroid Build Coastguard Workerentry: 174*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_h: 175*9880d681SAndroid Build Coastguard Worker; CHECK: str q0, [x0] 176*9880d681SAndroid Build Coastguard Worker store <8 x half> %b, <8 x half>* %a, align 4 177*9880d681SAndroid Build Coastguard Worker ret void 178*9880d681SAndroid Build Coastguard Worker} 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @s_to_h(<8 x float> %a) { 181*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: s_to_h: 182*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v0.4h, v0.4s 183*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn [[REG:v[0-9+]]].4h, v1.4s 184*9880d681SAndroid Build Coastguard Worker; CHECK: ins v0.d[1], [[REG]].d[0] 185*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <8 x float> %a to <8 x half> 186*9880d681SAndroid Build Coastguard Worker ret <8 x half> %1 187*9880d681SAndroid Build Coastguard Worker} 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @d_to_h(<8 x double> %a) { 190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: d_to_h: 191*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: mov d{{[0-9]+}}, v{{[0-9]+}}.d[1] 192*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: mov d{{[0-9]+}}, v{{[0-9]+}}.d[1] 193*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: mov d{{[0-9]+}}, v{{[0-9]+}}.d[1] 194*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: mov d{{[0-9]+}}, v{{[0-9]+}}.d[1] 195*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt h 196*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt h 197*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt h 198*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt h 199*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt h 200*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt h 201*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt h 202*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt h 203*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v{{[0-9]+}}.h 204*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v{{[0-9]+}}.h 205*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v{{[0-9]+}}.h 206*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v{{[0-9]+}}.h 207*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v{{[0-9]+}}.h 208*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v{{[0-9]+}}.h 209*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v{{[0-9]+}}.h 210*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v{{[0-9]+}}.h 211*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <8 x double> %a to <8 x half> 212*9880d681SAndroid Build Coastguard Worker ret <8 x half> %1 213*9880d681SAndroid Build Coastguard Worker} 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @h_to_s(<8 x half> %a) { 216*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: h_to_s: 217*9880d681SAndroid Build Coastguard Worker; CHECK: fcvtl2 v1.4s, v0.8h 218*9880d681SAndroid Build Coastguard Worker; CHECK: fcvtl v0.4s, v0.4h 219*9880d681SAndroid Build Coastguard Worker %1 = fpext <8 x half> %a to <8 x float> 220*9880d681SAndroid Build Coastguard Worker ret <8 x float> %1 221*9880d681SAndroid Build Coastguard Worker} 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @h_to_d(<8 x half> %a) { 224*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: h_to_d: 225*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt d 226*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt d 227*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt d 228*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt d 229*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt d 230*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt d 231*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt d 232*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt d 233*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins 234*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins 235*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins 236*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins 237*9880d681SAndroid Build Coastguard Worker %1 = fpext <8 x half> %a to <8 x double> 238*9880d681SAndroid Build Coastguard Worker ret <8 x double> %1 239*9880d681SAndroid Build Coastguard Worker} 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @bitcast_i_to_h(float, <8 x i16> %a) { 243*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitcast_i_to_h: 244*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b 245*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i16> %a to <8 x half> 246*9880d681SAndroid Build Coastguard Worker ret <8 x half> %2 247*9880d681SAndroid Build Coastguard Worker} 248*9880d681SAndroid Build Coastguard Worker 249*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @bitcast_h_to_i(float, <8 x half> %a) { 250*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitcast_h_to_i: 251*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b 252*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x half> %a to <8 x i16> 253*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 254*9880d681SAndroid Build Coastguard Worker} 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Worker 257*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @sitofp_i8(<8 x i8> %a) #0 { 258*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sitofp_i8: 259*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sshll v[[REG1:[0-9]+]].8h, v0.8b, #0 260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sshll2 [[LO:v[0-9]+\.4s]], v[[REG1]].8h, #0 261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sshll [[HI:v[0-9]+\.4s]], v[[REG1]].4h, #0 262*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: scvtf [[HIF:v[0-9]+\.4s]], [[HI]] 263*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: scvtf [[LOF:v[0-9]+\.4s]], [[LO]] 264*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v[[LOREG:[0-9]+]].4h, [[LOF]] 265*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v0.4h, [[HIF]] 266*9880d681SAndroid Build Coastguard Worker; CHECK: ins v0.d[1], v[[LOREG]].d[0] 267*9880d681SAndroid Build Coastguard Worker %1 = sitofp <8 x i8> %a to <8 x half> 268*9880d681SAndroid Build Coastguard Worker ret <8 x half> %1 269*9880d681SAndroid Build Coastguard Worker} 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Worker 272*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @sitofp_i16(<8 x i16> %a) #0 { 273*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sitofp_i16: 274*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sshll2 [[LO:v[0-9]+\.4s]], v0.8h, #0 275*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sshll [[HI:v[0-9]+\.4s]], v0.4h, #0 276*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: scvtf [[HIF:v[0-9]+\.4s]], [[HI]] 277*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: scvtf [[LOF:v[0-9]+\.4s]], [[LO]] 278*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v[[LOREG:[0-9]+]].4h, [[LOF]] 279*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v0.4h, [[HIF]] 280*9880d681SAndroid Build Coastguard Worker; CHECK: ins v0.d[1], v[[LOREG]].d[0] 281*9880d681SAndroid Build Coastguard Worker %1 = sitofp <8 x i16> %a to <8 x half> 282*9880d681SAndroid Build Coastguard Worker ret <8 x half> %1 283*9880d681SAndroid Build Coastguard Worker} 284*9880d681SAndroid Build Coastguard Worker 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @sitofp_i32(<8 x i32> %a) #0 { 287*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sitofp_i32: 288*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: scvtf [[OP1:v[0-9]+\.4s]], v0.4s 289*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: scvtf [[OP2:v[0-9]+\.4s]], v1.4s 290*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v[[REG:[0-9]+]].4h, [[OP2]] 291*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v0.4h, [[OP1]] 292*9880d681SAndroid Build Coastguard Worker; CHECK: ins v0.d[1], v[[REG]].d[0] 293*9880d681SAndroid Build Coastguard Worker %1 = sitofp <8 x i32> %a to <8 x half> 294*9880d681SAndroid Build Coastguard Worker ret <8 x half> %1 295*9880d681SAndroid Build Coastguard Worker} 296*9880d681SAndroid Build Coastguard Worker 297*9880d681SAndroid Build Coastguard Worker 298*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @sitofp_i64(<8 x i64> %a) #0 { 299*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sitofp_i64: 300*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: scvtf [[OP1:v[0-9]+\.2d]], v0.2d 301*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: scvtf [[OP2:v[0-9]+\.2d]], v1.2d 302*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn [[OP3:v[0-9]+]].2s, [[OP1]] 303*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn2 [[OP3]].4s, [[OP2]] 304*9880d681SAndroid Build Coastguard Worker; CHECK: fcvtn v0.4h, [[OP3]].4s 305*9880d681SAndroid Build Coastguard Worker %1 = sitofp <8 x i64> %a to <8 x half> 306*9880d681SAndroid Build Coastguard Worker ret <8 x half> %1 307*9880d681SAndroid Build Coastguard Worker} 308*9880d681SAndroid Build Coastguard Worker 309*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @uitofp_i8(<8 x i8> %a) #0 { 310*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uitofp_i8: 311*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ushll v[[REG1:[0-9]+]].8h, v0.8b, #0 312*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ushll2 [[LO:v[0-9]+\.4s]], v[[REG1]].8h, #0 313*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ushll [[HI:v[0-9]+\.4s]], v[[REG1]].4h, #0 314*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ucvtf [[HIF:v[0-9]+\.4s]], [[HI]] 315*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ucvtf [[LOF:v[0-9]+\.4s]], [[LO]] 316*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v[[LOREG:[0-9]+]].4h, [[LOF]] 317*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v0.4h, [[HIF]] 318*9880d681SAndroid Build Coastguard Worker; CHECK: ins v0.d[1], v[[LOREG]].d[0] 319*9880d681SAndroid Build Coastguard Worker %1 = uitofp <8 x i8> %a to <8 x half> 320*9880d681SAndroid Build Coastguard Worker ret <8 x half> %1 321*9880d681SAndroid Build Coastguard Worker} 322*9880d681SAndroid Build Coastguard Worker 323*9880d681SAndroid Build Coastguard Worker 324*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @uitofp_i16(<8 x i16> %a) #0 { 325*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uitofp_i16: 326*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ushll2 [[LO:v[0-9]+\.4s]], v0.8h, #0 327*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ushll [[HI:v[0-9]+\.4s]], v0.4h, #0 328*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ucvtf [[HIF:v[0-9]+\.4s]], [[HI]] 329*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ucvtf [[LOF:v[0-9]+\.4s]], [[LO]] 330*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v[[LOREG:[0-9]+]].4h, [[LOF]] 331*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v0.4h, [[HIF]] 332*9880d681SAndroid Build Coastguard Worker; CHECK: ins v0.d[1], v[[LOREG]].d[0] 333*9880d681SAndroid Build Coastguard Worker %1 = uitofp <8 x i16> %a to <8 x half> 334*9880d681SAndroid Build Coastguard Worker ret <8 x half> %1 335*9880d681SAndroid Build Coastguard Worker} 336*9880d681SAndroid Build Coastguard Worker 337*9880d681SAndroid Build Coastguard Worker 338*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @uitofp_i32(<8 x i32> %a) #0 { 339*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uitofp_i32: 340*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ucvtf [[OP1:v[0-9]+\.4s]], v0.4s 341*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ucvtf [[OP2:v[0-9]+\.4s]], v1.4s 342*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v[[REG:[0-9]+]].4h, [[OP2]] 343*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn v0.4h, [[OP1]] 344*9880d681SAndroid Build Coastguard Worker; CHECK: ins v0.d[1], v[[REG]].d[0] 345*9880d681SAndroid Build Coastguard Worker %1 = uitofp <8 x i32> %a to <8 x half> 346*9880d681SAndroid Build Coastguard Worker ret <8 x half> %1 347*9880d681SAndroid Build Coastguard Worker} 348*9880d681SAndroid Build Coastguard Worker 349*9880d681SAndroid Build Coastguard Worker 350*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @uitofp_i64(<8 x i64> %a) #0 { 351*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uitofp_i64: 352*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ucvtf [[OP1:v[0-9]+\.2d]], v0.2d 353*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ucvtf [[OP2:v[0-9]+\.2d]], v1.2d 354*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn [[OP3:v[0-9]+]].2s, [[OP1]] 355*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtn2 [[OP3]].4s, [[OP2]] 356*9880d681SAndroid Build Coastguard Worker; CHECK: fcvtn v0.4h, [[OP3]].4s 357*9880d681SAndroid Build Coastguard Worker %1 = uitofp <8 x i64> %a to <8 x half> 358*9880d681SAndroid Build Coastguard Worker ret <8 x half> %1 359*9880d681SAndroid Build Coastguard Worker} 360*9880d681SAndroid Build Coastguard Worker 361*9880d681SAndroid Build Coastguard Workerdefine void @test_insert_at_zero(half %a, <8 x half>* %b) #0 { 362*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_insert_at_zero: 363*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: str q0, [x0] 364*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 365*9880d681SAndroid Build Coastguard Worker %1 = insertelement <8 x half> undef, half %a, i64 0 366*9880d681SAndroid Build Coastguard Worker store <8 x half> %1, <8 x half>* %b, align 4 367*9880d681SAndroid Build Coastguard Worker ret void 368*9880d681SAndroid Build Coastguard Worker} 369*9880d681SAndroid Build Coastguard Worker 370*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @fptosi_i8(<8 x half> %a) #0 { 371*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fptosi_i8: 372*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtl [[LO:v[0-9]+\.4s]], v0.4h 373*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtl2 [[HI:v[0-9]+\.4s]], v0.8h 374*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzs [[LOF32:v[0-9]+\.4s]], [[LO]] 375*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn [[I16:v[0-9]+]].4h, [[LOF32]] 376*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzs [[HIF32:v[0-9]+\.4s]], [[HI]] 377*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn2 [[I16]].8h, [[HIF32]] 378*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xtn v0.8b, [[I16]].8h 379*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 380*9880d681SAndroid Build Coastguard Worker %1 = fptosi<8 x half> %a to <8 x i8> 381*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %1 382*9880d681SAndroid Build Coastguard Worker} 383*9880d681SAndroid Build Coastguard Worker 384*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @fptosi_i16(<8 x half> %a) #0 { 385*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fptosi_i16: 386*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtl [[LO:v[0-9]+\.4s]], v0.4h 387*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtl2 [[HI:v[0-9]+\.4s]], v0.8h 388*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzs [[LOF32:v[0-9]+\.4s]], [[LO]] 389*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn [[I16:v[0-9]+]].4h, [[LOF32]] 390*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzs [[HIF32:v[0-9]+\.4s]], [[HI]] 391*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xtn2 [[I16]].8h, [[HIF32]] 392*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 393*9880d681SAndroid Build Coastguard Worker %1 = fptosi<8 x half> %a to <8 x i16> 394*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %1 395*9880d681SAndroid Build Coastguard Worker} 396*9880d681SAndroid Build Coastguard Worker 397*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @fptoui_i8(<8 x half> %a) #0 { 398*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fptoui_i8: 399*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtl [[LO:v[0-9]+\.4s]], v0.4h 400*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtl2 [[HI:v[0-9]+\.4s]], v0.8h 401*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzu [[LOF32:v[0-9]+\.4s]], [[LO]] 402*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn [[I16:v[0-9]+]].4h, [[LOF32]] 403*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzu [[HIF32:v[0-9]+\.4s]], [[HI]] 404*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn2 [[I16]].8h, [[HIF32]] 405*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xtn v0.8b, [[I16]].8h 406*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 407*9880d681SAndroid Build Coastguard Worker %1 = fptoui<8 x half> %a to <8 x i8> 408*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %1 409*9880d681SAndroid Build Coastguard Worker} 410*9880d681SAndroid Build Coastguard Worker 411*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @fptoui_i16(<8 x half> %a) #0 { 412*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fptoui_i16: 413*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtl [[LO:v[0-9]+\.4s]], v0.4h 414*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtl2 [[HI:v[0-9]+\.4s]], v0.8h 415*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzu [[LOF32:v[0-9]+\.4s]], [[LO]] 416*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xtn [[I16:v[0-9]+]].4h, [[LOF32]] 417*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvtzu [[HIF32:v[0-9]+\.4s]], [[HI]] 418*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xtn2 [[I16]].8h, [[HIF32]] 419*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 420*9880d681SAndroid Build Coastguard Worker %1 = fptoui<8 x half> %a to <8 x i16> 421*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %1 422*9880d681SAndroid Build Coastguard Worker} 423*9880d681SAndroid Build Coastguard Worker 424*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 425*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_une(<8 x half> %a, <8 x half> %b) #0 { 426*9880d681SAndroid Build Coastguard Worker %1 = fcmp une <8 x half> %a, %b 427*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 428*9880d681SAndroid Build Coastguard Worker} 429*9880d681SAndroid Build Coastguard Worker 430*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 16 csel tests. Skipped. 431*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_ueq(<8 x half> %a, <8 x half> %b) #0 { 432*9880d681SAndroid Build Coastguard Worker %1 = fcmp ueq <8 x half> %a, %b 433*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 434*9880d681SAndroid Build Coastguard Worker} 435*9880d681SAndroid Build Coastguard Worker 436*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 437*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_ugt(<8 x half> %a, <8 x half> %b) #0 { 438*9880d681SAndroid Build Coastguard Worker %1 = fcmp ugt <8 x half> %a, %b 439*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 440*9880d681SAndroid Build Coastguard Worker} 441*9880d681SAndroid Build Coastguard Worker 442*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 443*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_uge(<8 x half> %a, <8 x half> %b) #0 { 444*9880d681SAndroid Build Coastguard Worker %1 = fcmp uge <8 x half> %a, %b 445*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 446*9880d681SAndroid Build Coastguard Worker} 447*9880d681SAndroid Build Coastguard Worker 448*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 449*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_ult(<8 x half> %a, <8 x half> %b) #0 { 450*9880d681SAndroid Build Coastguard Worker %1 = fcmp ult <8 x half> %a, %b 451*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 452*9880d681SAndroid Build Coastguard Worker} 453*9880d681SAndroid Build Coastguard Worker 454*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 455*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_ule(<8 x half> %a, <8 x half> %b) #0 { 456*9880d681SAndroid Build Coastguard Worker %1 = fcmp ule <8 x half> %a, %b 457*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 458*9880d681SAndroid Build Coastguard Worker} 459*9880d681SAndroid Build Coastguard Worker 460*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 461*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_uno(<8 x half> %a, <8 x half> %b) #0 { 462*9880d681SAndroid Build Coastguard Worker %1 = fcmp uno <8 x half> %a, %b 463*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 464*9880d681SAndroid Build Coastguard Worker} 465*9880d681SAndroid Build Coastguard Worker 466*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 467*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_one(<8 x half> %a, <8 x half> %b) #0 { 468*9880d681SAndroid Build Coastguard Worker %1 = fcmp one <8 x half> %a, %b 469*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 470*9880d681SAndroid Build Coastguard Worker} 471*9880d681SAndroid Build Coastguard Worker 472*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 473*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_oeq(<8 x half> %a, <8 x half> %b) #0 { 474*9880d681SAndroid Build Coastguard Worker %1 = fcmp oeq <8 x half> %a, %b 475*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 476*9880d681SAndroid Build Coastguard Worker} 477*9880d681SAndroid Build Coastguard Worker 478*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 479*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_ogt(<8 x half> %a, <8 x half> %b) #0 { 480*9880d681SAndroid Build Coastguard Worker %1 = fcmp ogt <8 x half> %a, %b 481*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 482*9880d681SAndroid Build Coastguard Worker} 483*9880d681SAndroid Build Coastguard Worker 484*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 485*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_oge(<8 x half> %a, <8 x half> %b) #0 { 486*9880d681SAndroid Build Coastguard Worker %1 = fcmp oge <8 x half> %a, %b 487*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 488*9880d681SAndroid Build Coastguard Worker} 489*9880d681SAndroid Build Coastguard Worker 490*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 491*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_olt(<8 x half> %a, <8 x half> %b) #0 { 492*9880d681SAndroid Build Coastguard Worker %1 = fcmp olt <8 x half> %a, %b 493*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 494*9880d681SAndroid Build Coastguard Worker} 495*9880d681SAndroid Build Coastguard Worker 496*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 497*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_ole(<8 x half> %a, <8 x half> %b) #0 { 498*9880d681SAndroid Build Coastguard Worker %1 = fcmp ole <8 x half> %a, %b 499*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 500*9880d681SAndroid Build Coastguard Worker} 501*9880d681SAndroid Build Coastguard Worker 502*9880d681SAndroid Build Coastguard Worker; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests. Skipped. 503*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_fcmp_ord(<8 x half> %a, <8 x half> %b) #0 { 504*9880d681SAndroid Build Coastguard Worker %1 = fcmp ord <8 x half> %a, %b 505*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %1 506*9880d681SAndroid Build Coastguard Worker} 507*9880d681SAndroid Build Coastguard Worker 508*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind } 509