1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple aarch64-unknown-unknown -aarch64-neon-syntax=apple -asm-verbose=false -disable-post-ra -disable-fp-elim | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fadd: 6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fadd s0, s0, s1 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 11*9880d681SAndroid Build Coastguard Workerdefine half @test_fadd(half %a, half %b) #0 { 12*9880d681SAndroid Build Coastguard Worker %r = fadd half %a, %b 13*9880d681SAndroid Build Coastguard Worker ret half %r 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fsub: 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fsub s0, s0, s1 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 22*9880d681SAndroid Build Coastguard Workerdefine half @test_fsub(half %a, half %b) #0 { 23*9880d681SAndroid Build Coastguard Worker %r = fsub half %a, %b 24*9880d681SAndroid Build Coastguard Worker ret half %r 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fmul: 28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmul s0, s0, s1 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 33*9880d681SAndroid Build Coastguard Workerdefine half @test_fmul(half %a, half %b) #0 { 34*9880d681SAndroid Build Coastguard Worker %r = fmul half %a, %b 35*9880d681SAndroid Build Coastguard Worker ret half %r 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fdiv: 39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fdiv s0, s0, s1 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 44*9880d681SAndroid Build Coastguard Workerdefine half @test_fdiv(half %a, half %b) #0 { 45*9880d681SAndroid Build Coastguard Worker %r = fdiv half %a, %b 46*9880d681SAndroid Build Coastguard Worker ret half %r 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_frem: 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}fmodf 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 58*9880d681SAndroid Build Coastguard Workerdefine half @test_frem(half %a, half %b) #0 { 59*9880d681SAndroid Build Coastguard Worker %r = frem half %a, %b 60*9880d681SAndroid Build Coastguard Worker ret half %r 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store: 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: str h0, [x0] 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 66*9880d681SAndroid Build Coastguard Workerdefine void @test_store(half %a, half* %b) #0 { 67*9880d681SAndroid Build Coastguard Worker store half %a, half* %b 68*9880d681SAndroid Build Coastguard Worker ret void 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_load: 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldr h0, [x0] 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 74*9880d681SAndroid Build Coastguard Workerdefine half @test_load(half* %a) #0 { 75*9880d681SAndroid Build Coastguard Worker %r = load half, half* %a 76*9880d681SAndroid Build Coastguard Worker ret half %r 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerdeclare half @test_callee(half %a, half %b) #0 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_call: 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}test_callee 86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 88*9880d681SAndroid Build Coastguard Workerdefine half @test_call(half %a, half %b) #0 { 89*9880d681SAndroid Build Coastguard Worker %r = call half @test_callee(half %a, half %b) 90*9880d681SAndroid Build Coastguard Worker ret half %r 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_call_flipped: 94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov.16b v2, v0 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov.16b v0, v1 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov.16b v1, v2 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}test_callee 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 102*9880d681SAndroid Build Coastguard Workerdefine half @test_call_flipped(half %a, half %b) #0 { 103*9880d681SAndroid Build Coastguard Worker %r = call half @test_callee(half %b, half %a) 104*9880d681SAndroid Build Coastguard Worker ret half %r 105*9880d681SAndroid Build Coastguard Worker} 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_tailcall_flipped: 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov.16b v2, v0 109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov.16b v0, v1 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov.16b v1, v2 111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: b {{_?}}test_callee 112*9880d681SAndroid Build Coastguard Workerdefine half @test_tailcall_flipped(half %a, half %b) #0 { 113*9880d681SAndroid Build Coastguard Worker %r = tail call half @test_callee(half %b, half %a) 114*9880d681SAndroid Build Coastguard Worker ret half %r 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_select: 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 120*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cmp w0, #0 121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcsel s0, s0, s1, ne 122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 124*9880d681SAndroid Build Coastguard Workerdefine half @test_select(half %a, half %b, i1 zeroext %c) #0 { 125*9880d681SAndroid Build Coastguard Worker %r = select i1 %c, half %a, half %b 126*9880d681SAndroid Build Coastguard Worker ret half %r 127*9880d681SAndroid Build Coastguard Worker} 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_select_cc: 130*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt s3, h3 131*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt s2, h2 132*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt s1, h1 133*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt s0, h0 134*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcmp s2, s3 135*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: cset [[CC:w[0-9]+]], ne 136*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: cmp [[CC]], #0 137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcsel s0, s0, s1, ne 138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 140*9880d681SAndroid Build Coastguard Workerdefine half @test_select_cc(half %a, half %b, half %c, half %d) #0 { 141*9880d681SAndroid Build Coastguard Worker %cc = fcmp une half %c, %d 142*9880d681SAndroid Build Coastguard Worker %r = select i1 %cc, half %a, half %b 143*9880d681SAndroid Build Coastguard Worker ret half %r 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_select_cc_f32_f16: 147*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt s2, h2 148*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt s3, h3 149*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s2, s3 150*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcsel s0, s0, s1, ne 151*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 152*9880d681SAndroid Build Coastguard Workerdefine float @test_select_cc_f32_f16(float %a, float %b, half %c, half %d) #0 { 153*9880d681SAndroid Build Coastguard Worker %cc = fcmp une half %c, %d 154*9880d681SAndroid Build Coastguard Worker %r = select i1 %cc, float %a, float %b 155*9880d681SAndroid Build Coastguard Worker ret float %r 156*9880d681SAndroid Build Coastguard Worker} 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_select_cc_f16_f32: 159*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt s0, h0 160*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcvt s1, h1 161*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fcmp s2, s3 162*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: cset w8, ne 163*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cmp w8, #0 164*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcsel s0, s0, s1, ne 165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 166*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 167*9880d681SAndroid Build Coastguard Workerdefine half @test_select_cc_f16_f32(half %a, half %b, float %c, float %d) #0 { 168*9880d681SAndroid Build Coastguard Worker %cc = fcmp une float %c, %d 169*9880d681SAndroid Build Coastguard Worker %r = select i1 %cc, half %a, half %b 170*9880d681SAndroid Build Coastguard Worker ret half %r 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_une: 174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 177*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, ne 178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 179*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_une(half %a, half %b) #0 { 180*9880d681SAndroid Build Coastguard Worker %r = fcmp une half %a, %b 181*9880d681SAndroid Build Coastguard Worker ret i1 %r 182*9880d681SAndroid Build Coastguard Worker} 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_ueq: 185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 187*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 188*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: orr [[TRUE:w[0-9]+]], wzr, #0x1 189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: csel [[CC:w[0-9]+]], [[TRUE]], wzr, eq 190*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: csel w0, [[TRUE]], [[CC]], vs 191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 192*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_ueq(half %a, half %b) #0 { 193*9880d681SAndroid Build Coastguard Worker %r = fcmp ueq half %a, %b 194*9880d681SAndroid Build Coastguard Worker ret i1 %r 195*9880d681SAndroid Build Coastguard Worker} 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_ugt: 198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 201*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, hi 202*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 203*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_ugt(half %a, half %b) #0 { 204*9880d681SAndroid Build Coastguard Worker %r = fcmp ugt half %a, %b 205*9880d681SAndroid Build Coastguard Worker ret i1 %r 206*9880d681SAndroid Build Coastguard Worker} 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_uge: 209*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 210*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, pl 213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 214*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_uge(half %a, half %b) #0 { 215*9880d681SAndroid Build Coastguard Worker %r = fcmp uge half %a, %b 216*9880d681SAndroid Build Coastguard Worker ret i1 %r 217*9880d681SAndroid Build Coastguard Worker} 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_ult: 220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 221*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 222*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 223*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, lt 224*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 225*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_ult(half %a, half %b) #0 { 226*9880d681SAndroid Build Coastguard Worker %r = fcmp ult half %a, %b 227*9880d681SAndroid Build Coastguard Worker ret i1 %r 228*9880d681SAndroid Build Coastguard Worker} 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_ule: 231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 232*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 233*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, le 235*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 236*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_ule(half %a, half %b) #0 { 237*9880d681SAndroid Build Coastguard Worker %r = fcmp ule half %a, %b 238*9880d681SAndroid Build Coastguard Worker ret i1 %r 239*9880d681SAndroid Build Coastguard Worker} 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_uno: 243*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, vs 247*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 248*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_uno(half %a, half %b) #0 { 249*9880d681SAndroid Build Coastguard Worker %r = fcmp uno half %a, %b 250*9880d681SAndroid Build Coastguard Worker ret i1 %r 251*9880d681SAndroid Build Coastguard Worker} 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_one: 254*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 255*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 257*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: orr [[TRUE:w[0-9]+]], wzr, #0x1 258*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: csel [[CC:w[0-9]+]], [[TRUE]], wzr, mi 259*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: csel w0, [[TRUE]], [[CC]], gt 260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 261*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_one(half %a, half %b) #0 { 262*9880d681SAndroid Build Coastguard Worker %r = fcmp one half %a, %b 263*9880d681SAndroid Build Coastguard Worker ret i1 %r 264*9880d681SAndroid Build Coastguard Worker} 265*9880d681SAndroid Build Coastguard Worker 266*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_oeq: 267*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 269*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 270*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, eq 271*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 272*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_oeq(half %a, half %b) #0 { 273*9880d681SAndroid Build Coastguard Worker %r = fcmp oeq half %a, %b 274*9880d681SAndroid Build Coastguard Worker ret i1 %r 275*9880d681SAndroid Build Coastguard Worker} 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_ogt: 278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, gt 282*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 283*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_ogt(half %a, half %b) #0 { 284*9880d681SAndroid Build Coastguard Worker %r = fcmp ogt half %a, %b 285*9880d681SAndroid Build Coastguard Worker ret i1 %r 286*9880d681SAndroid Build Coastguard Worker} 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_oge: 289*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 290*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 291*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 292*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, ge 293*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 294*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_oge(half %a, half %b) #0 { 295*9880d681SAndroid Build Coastguard Worker %r = fcmp oge half %a, %b 296*9880d681SAndroid Build Coastguard Worker ret i1 %r 297*9880d681SAndroid Build Coastguard Worker} 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_olt: 300*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 301*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 302*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 303*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, mi 304*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 305*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_olt(half %a, half %b) #0 { 306*9880d681SAndroid Build Coastguard Worker %r = fcmp olt half %a, %b 307*9880d681SAndroid Build Coastguard Worker ret i1 %r 308*9880d681SAndroid Build Coastguard Worker} 309*9880d681SAndroid Build Coastguard Worker 310*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_ole: 311*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 312*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 313*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 314*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, ls 315*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 316*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_ole(half %a, half %b) #0 { 317*9880d681SAndroid Build Coastguard Worker %r = fcmp ole half %a, %b 318*9880d681SAndroid Build Coastguard Worker ret i1 %r 319*9880d681SAndroid Build Coastguard Worker} 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fcmp_ord: 322*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 323*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 324*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 325*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cset w0, vc 326*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 327*9880d681SAndroid Build Coastguard Workerdefine i1 @test_fcmp_ord(half %a, half %b) #0 { 328*9880d681SAndroid Build Coastguard Worker %r = fcmp ord half %a, %b 329*9880d681SAndroid Build Coastguard Worker ret i1 %r 330*9880d681SAndroid Build Coastguard Worker} 331*9880d681SAndroid Build Coastguard Worker 332*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_br_cc: 333*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 334*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 335*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcmp s0, s1 336*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: b.mi [[BRCC_ELSE:.?LBB[0-9_]+]] 337*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: str wzr, [x0] 338*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[BRCC_ELSE]]: 340*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: str wzr, [x1] 341*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 342*9880d681SAndroid Build Coastguard Workerdefine void @test_br_cc(half %a, half %b, i32* %p1, i32* %p2) #0 { 343*9880d681SAndroid Build Coastguard Worker %c = fcmp uge half %a, %b 344*9880d681SAndroid Build Coastguard Worker br i1 %c, label %then, label %else 345*9880d681SAndroid Build Coastguard Workerthen: 346*9880d681SAndroid Build Coastguard Worker store i32 0, i32* %p1 347*9880d681SAndroid Build Coastguard Worker ret void 348*9880d681SAndroid Build Coastguard Workerelse: 349*9880d681SAndroid Build Coastguard Worker store i32 0, i32* %p2 350*9880d681SAndroid Build Coastguard Worker ret void 351*9880d681SAndroid Build Coastguard Worker} 352*9880d681SAndroid Build Coastguard Worker 353*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_phi: 354*9880d681SAndroid Build Coastguard Worker; CHECK: mov x[[PTR:[0-9]+]], x0 355*9880d681SAndroid Build Coastguard Worker; CHECK: ldr h[[AB:[0-9]+]], [x[[PTR]]] 356*9880d681SAndroid Build Coastguard Worker; CHECK: [[LOOP:LBB[0-9_]+]]: 357*9880d681SAndroid Build Coastguard Worker; CHECK: mov.16b v[[R:[0-9]+]], v[[AB]] 358*9880d681SAndroid Build Coastguard Worker; CHECK: ldr h[[AB]], [x[[PTR]]] 359*9880d681SAndroid Build Coastguard Worker; CHECK: mov x0, x[[PTR]] 360*9880d681SAndroid Build Coastguard Worker; CHECK: bl {{_?}}test_dummy 361*9880d681SAndroid Build Coastguard Worker; CHECK: mov.16b v0, v[[R]] 362*9880d681SAndroid Build Coastguard Worker; CHECK: ret 363*9880d681SAndroid Build Coastguard Workerdefine half @test_phi(half* %p1) #0 { 364*9880d681SAndroid Build Coastguard Workerentry: 365*9880d681SAndroid Build Coastguard Worker %a = load half, half* %p1 366*9880d681SAndroid Build Coastguard Worker br label %loop 367*9880d681SAndroid Build Coastguard Workerloop: 368*9880d681SAndroid Build Coastguard Worker %r = phi half [%a, %entry], [%b, %loop] 369*9880d681SAndroid Build Coastguard Worker %b = load half, half* %p1 370*9880d681SAndroid Build Coastguard Worker %c = call i1 @test_dummy(half* %p1) 371*9880d681SAndroid Build Coastguard Worker br i1 %c, label %loop, label %return 372*9880d681SAndroid Build Coastguard Workerreturn: 373*9880d681SAndroid Build Coastguard Worker ret half %r 374*9880d681SAndroid Build Coastguard Worker} 375*9880d681SAndroid Build Coastguard Workerdeclare i1 @test_dummy(half* %p1) #0 376*9880d681SAndroid Build Coastguard Worker 377*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fptosi_i32: 378*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 379*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs w0, s0 380*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 381*9880d681SAndroid Build Coastguard Workerdefine i32 @test_fptosi_i32(half %a) #0 { 382*9880d681SAndroid Build Coastguard Worker %r = fptosi half %a to i32 383*9880d681SAndroid Build Coastguard Worker ret i32 %r 384*9880d681SAndroid Build Coastguard Worker} 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fptosi_i64: 387*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 388*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs x0, s0 389*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 390*9880d681SAndroid Build Coastguard Workerdefine i64 @test_fptosi_i64(half %a) #0 { 391*9880d681SAndroid Build Coastguard Worker %r = fptosi half %a to i64 392*9880d681SAndroid Build Coastguard Worker ret i64 %r 393*9880d681SAndroid Build Coastguard Worker} 394*9880d681SAndroid Build Coastguard Worker 395*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fptoui_i32: 396*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 397*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzu w0, s0 398*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 399*9880d681SAndroid Build Coastguard Workerdefine i32 @test_fptoui_i32(half %a) #0 { 400*9880d681SAndroid Build Coastguard Worker %r = fptoui half %a to i32 401*9880d681SAndroid Build Coastguard Worker ret i32 %r 402*9880d681SAndroid Build Coastguard Worker} 403*9880d681SAndroid Build Coastguard Worker 404*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fptoui_i64: 405*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 406*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzu x0, s0 407*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 408*9880d681SAndroid Build Coastguard Workerdefine i64 @test_fptoui_i64(half %a) #0 { 409*9880d681SAndroid Build Coastguard Worker %r = fptoui half %a to i64 410*9880d681SAndroid Build Coastguard Worker ret i64 %r 411*9880d681SAndroid Build Coastguard Worker} 412*9880d681SAndroid Build Coastguard Worker 413*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_uitofp_i32: 414*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ucvtf s0, w0 415*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 417*9880d681SAndroid Build Coastguard Workerdefine half @test_uitofp_i32(i32 %a) #0 { 418*9880d681SAndroid Build Coastguard Worker %r = uitofp i32 %a to half 419*9880d681SAndroid Build Coastguard Worker ret half %r 420*9880d681SAndroid Build Coastguard Worker} 421*9880d681SAndroid Build Coastguard Worker 422*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_uitofp_i64: 423*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ucvtf s0, x0 424*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 425*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 426*9880d681SAndroid Build Coastguard Workerdefine half @test_uitofp_i64(i64 %a) #0 { 427*9880d681SAndroid Build Coastguard Worker %r = uitofp i64 %a to half 428*9880d681SAndroid Build Coastguard Worker ret half %r 429*9880d681SAndroid Build Coastguard Worker} 430*9880d681SAndroid Build Coastguard Worker 431*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sitofp_i32: 432*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: scvtf s0, w0 433*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 434*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 435*9880d681SAndroid Build Coastguard Workerdefine half @test_sitofp_i32(i32 %a) #0 { 436*9880d681SAndroid Build Coastguard Worker %r = sitofp i32 %a to half 437*9880d681SAndroid Build Coastguard Worker ret half %r 438*9880d681SAndroid Build Coastguard Worker} 439*9880d681SAndroid Build Coastguard Worker 440*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sitofp_i64: 441*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: scvtf s0, x0 442*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 443*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 444*9880d681SAndroid Build Coastguard Workerdefine half @test_sitofp_i64(i64 %a) #0 { 445*9880d681SAndroid Build Coastguard Worker %r = sitofp i64 %a to half 446*9880d681SAndroid Build Coastguard Worker ret half %r 447*9880d681SAndroid Build Coastguard Worker} 448*9880d681SAndroid Build Coastguard Worker 449*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_uitofp_i32_fadd: 450*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ucvtf s1, w0 451*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h1, s1 452*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 453*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 454*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fadd s0, s0, s1 455*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 456*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 457*9880d681SAndroid Build Coastguard Workerdefine half @test_uitofp_i32_fadd(i32 %a, half %b) #0 { 458*9880d681SAndroid Build Coastguard Worker %c = uitofp i32 %a to half 459*9880d681SAndroid Build Coastguard Worker %r = fadd half %b, %c 460*9880d681SAndroid Build Coastguard Worker ret half %r 461*9880d681SAndroid Build Coastguard Worker} 462*9880d681SAndroid Build Coastguard Worker 463*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sitofp_i32_fadd: 464*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: scvtf s1, w0 465*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h1, s1 466*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 467*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 468*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fadd s0, s0, s1 469*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 470*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 471*9880d681SAndroid Build Coastguard Workerdefine half @test_sitofp_i32_fadd(i32 %a, half %b) #0 { 472*9880d681SAndroid Build Coastguard Worker %c = sitofp i32 %a to half 473*9880d681SAndroid Build Coastguard Worker %r = fadd half %b, %c 474*9880d681SAndroid Build Coastguard Worker ret half %r 475*9880d681SAndroid Build Coastguard Worker} 476*9880d681SAndroid Build Coastguard Worker 477*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fptrunc_float: 478*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 479*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 480*9880d681SAndroid Build Coastguard Worker 481*9880d681SAndroid Build Coastguard Workerdefine half @test_fptrunc_float(float %a) #0 { 482*9880d681SAndroid Build Coastguard Worker %r = fptrunc float %a to half 483*9880d681SAndroid Build Coastguard Worker ret half %r 484*9880d681SAndroid Build Coastguard Worker} 485*9880d681SAndroid Build Coastguard Worker 486*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fptrunc_double: 487*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, d0 488*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 489*9880d681SAndroid Build Coastguard Workerdefine half @test_fptrunc_double(double %a) #0 { 490*9880d681SAndroid Build Coastguard Worker %r = fptrunc double %a to half 491*9880d681SAndroid Build Coastguard Worker ret half %r 492*9880d681SAndroid Build Coastguard Worker} 493*9880d681SAndroid Build Coastguard Worker 494*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fpext_float: 495*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 496*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 497*9880d681SAndroid Build Coastguard Workerdefine float @test_fpext_float(half %a) #0 { 498*9880d681SAndroid Build Coastguard Worker %r = fpext half %a to float 499*9880d681SAndroid Build Coastguard Worker ret float %r 500*9880d681SAndroid Build Coastguard Worker} 501*9880d681SAndroid Build Coastguard Worker 502*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fpext_double: 503*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt d0, h0 504*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 505*9880d681SAndroid Build Coastguard Workerdefine double @test_fpext_double(half %a) #0 { 506*9880d681SAndroid Build Coastguard Worker %r = fpext half %a to double 507*9880d681SAndroid Build Coastguard Worker ret double %r 508*9880d681SAndroid Build Coastguard Worker} 509*9880d681SAndroid Build Coastguard Worker 510*9880d681SAndroid Build Coastguard Worker 511*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcast_halftoi16: 512*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmov w0, s0 513*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 514*9880d681SAndroid Build Coastguard Workerdefine i16 @test_bitcast_halftoi16(half %a) #0 { 515*9880d681SAndroid Build Coastguard Worker %r = bitcast half %a to i16 516*9880d681SAndroid Build Coastguard Worker ret i16 %r 517*9880d681SAndroid Build Coastguard Worker} 518*9880d681SAndroid Build Coastguard Worker 519*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcast_i16tohalf: 520*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmov s0, w0 521*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 522*9880d681SAndroid Build Coastguard Workerdefine half @test_bitcast_i16tohalf(i16 %a) #0 { 523*9880d681SAndroid Build Coastguard Worker %r = bitcast i16 %a to half 524*9880d681SAndroid Build Coastguard Worker ret half %r 525*9880d681SAndroid Build Coastguard Worker} 526*9880d681SAndroid Build Coastguard Worker 527*9880d681SAndroid Build Coastguard Worker 528*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.sqrt.f16(half %a) #0 529*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.powi.f16(half %a, i32 %b) #0 530*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.sin.f16(half %a) #0 531*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.cos.f16(half %a) #0 532*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.pow.f16(half %a, half %b) #0 533*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.exp.f16(half %a) #0 534*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.exp2.f16(half %a) #0 535*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.log.f16(half %a) #0 536*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.log10.f16(half %a) #0 537*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.log2.f16(half %a) #0 538*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.fma.f16(half %a, half %b, half %c) #0 539*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.fabs.f16(half %a) #0 540*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.minnum.f16(half %a, half %b) #0 541*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.maxnum.f16(half %a, half %b) #0 542*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.copysign.f16(half %a, half %b) #0 543*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.floor.f16(half %a) #0 544*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.ceil.f16(half %a) #0 545*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.trunc.f16(half %a) #0 546*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.rint.f16(half %a) #0 547*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.nearbyint.f16(half %a) #0 548*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.round.f16(half %a) #0 549*9880d681SAndroid Build Coastguard Workerdeclare half @llvm.fmuladd.f16(half %a, half %b, half %c) #0 550*9880d681SAndroid Build Coastguard Worker 551*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sqrt: 552*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 553*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fsqrt s0, s0 554*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 555*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 556*9880d681SAndroid Build Coastguard Workerdefine half @test_sqrt(half %a) #0 { 557*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.sqrt.f16(half %a) 558*9880d681SAndroid Build Coastguard Worker ret half %r 559*9880d681SAndroid Build Coastguard Worker} 560*9880d681SAndroid Build Coastguard Worker 561*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_powi: 562*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 563*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 564*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 565*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}__powisf2 566*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 567*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 568*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 569*9880d681SAndroid Build Coastguard Workerdefine half @test_powi(half %a, i32 %b) #0 { 570*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.powi.f16(half %a, i32 %b) 571*9880d681SAndroid Build Coastguard Worker ret half %r 572*9880d681SAndroid Build Coastguard Worker} 573*9880d681SAndroid Build Coastguard Worker 574*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sin: 575*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 576*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 577*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 578*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}sinf 579*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 580*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 581*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 582*9880d681SAndroid Build Coastguard Workerdefine half @test_sin(half %a) #0 { 583*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.sin.f16(half %a) 584*9880d681SAndroid Build Coastguard Worker ret half %r 585*9880d681SAndroid Build Coastguard Worker} 586*9880d681SAndroid Build Coastguard Worker 587*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_cos: 588*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 589*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 590*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 591*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}cosf 592*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 593*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 594*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 595*9880d681SAndroid Build Coastguard Workerdefine half @test_cos(half %a) #0 { 596*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.cos.f16(half %a) 597*9880d681SAndroid Build Coastguard Worker ret half %r 598*9880d681SAndroid Build Coastguard Worker} 599*9880d681SAndroid Build Coastguard Worker 600*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_pow: 601*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 602*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 603*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 604*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 605*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}powf 606*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 607*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 608*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 609*9880d681SAndroid Build Coastguard Workerdefine half @test_pow(half %a, half %b) #0 { 610*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.pow.f16(half %a, half %b) 611*9880d681SAndroid Build Coastguard Worker ret half %r 612*9880d681SAndroid Build Coastguard Worker} 613*9880d681SAndroid Build Coastguard Worker 614*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_exp: 615*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 616*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 617*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 618*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}expf 619*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 620*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 621*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 622*9880d681SAndroid Build Coastguard Workerdefine half @test_exp(half %a) #0 { 623*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.exp.f16(half %a) 624*9880d681SAndroid Build Coastguard Worker ret half %r 625*9880d681SAndroid Build Coastguard Worker} 626*9880d681SAndroid Build Coastguard Worker 627*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_exp2: 628*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 629*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 630*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 631*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}exp2f 632*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 633*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 634*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 635*9880d681SAndroid Build Coastguard Workerdefine half @test_exp2(half %a) #0 { 636*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.exp2.f16(half %a) 637*9880d681SAndroid Build Coastguard Worker ret half %r 638*9880d681SAndroid Build Coastguard Worker} 639*9880d681SAndroid Build Coastguard Worker 640*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_log: 641*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 642*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 643*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 644*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}logf 645*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 646*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 647*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 648*9880d681SAndroid Build Coastguard Workerdefine half @test_log(half %a) #0 { 649*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.log.f16(half %a) 650*9880d681SAndroid Build Coastguard Worker ret half %r 651*9880d681SAndroid Build Coastguard Worker} 652*9880d681SAndroid Build Coastguard Worker 653*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_log10: 654*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 655*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 656*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 657*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}log10f 658*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 659*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 660*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 661*9880d681SAndroid Build Coastguard Workerdefine half @test_log10(half %a) #0 { 662*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.log10.f16(half %a) 663*9880d681SAndroid Build Coastguard Worker ret half %r 664*9880d681SAndroid Build Coastguard Worker} 665*9880d681SAndroid Build Coastguard Worker 666*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_log2: 667*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stp x29, x30, [sp, #-16]! 668*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x29, sp 669*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 670*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl {{_?}}log2f 671*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 672*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldp x29, x30, [sp], #16 673*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 674*9880d681SAndroid Build Coastguard Workerdefine half @test_log2(half %a) #0 { 675*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.log2.f16(half %a) 676*9880d681SAndroid Build Coastguard Worker ret half %r 677*9880d681SAndroid Build Coastguard Worker} 678*9880d681SAndroid Build Coastguard Worker 679*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fma: 680*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s2, h2 681*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 682*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 683*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmadd s0, s0, s1, s2 684*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 685*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 686*9880d681SAndroid Build Coastguard Workerdefine half @test_fma(half %a, half %b, half %c) #0 { 687*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.fma.f16(half %a, half %b, half %c) 688*9880d681SAndroid Build Coastguard Worker ret half %r 689*9880d681SAndroid Build Coastguard Worker} 690*9880d681SAndroid Build Coastguard Worker 691*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fabs: 692*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 693*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fabs s0, s0 694*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 695*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 696*9880d681SAndroid Build Coastguard Workerdefine half @test_fabs(half %a) #0 { 697*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.fabs.f16(half %a) 698*9880d681SAndroid Build Coastguard Worker ret half %r 699*9880d681SAndroid Build Coastguard Worker} 700*9880d681SAndroid Build Coastguard Worker 701*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_minnum: 702*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 703*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 704*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fminnm s0, s0, s1 705*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 706*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 707*9880d681SAndroid Build Coastguard Workerdefine half @test_minnum(half %a, half %b) #0 { 708*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.minnum.f16(half %a, half %b) 709*9880d681SAndroid Build Coastguard Worker ret half %r 710*9880d681SAndroid Build Coastguard Worker} 711*9880d681SAndroid Build Coastguard Worker 712*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maxnum: 713*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 714*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 715*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmaxnm s0, s0, s1 716*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 717*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 718*9880d681SAndroid Build Coastguard Workerdefine half @test_maxnum(half %a, half %b) #0 { 719*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.maxnum.f16(half %a, half %b) 720*9880d681SAndroid Build Coastguard Worker ret half %r 721*9880d681SAndroid Build Coastguard Worker} 722*9880d681SAndroid Build Coastguard Worker 723*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_copysign: 724*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 725*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 726*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi.4s v2, #128, lsl #24 727*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bit.16b v0, v1, v2 728*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 729*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 730*9880d681SAndroid Build Coastguard Workerdefine half @test_copysign(half %a, half %b) #0 { 731*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.copysign.f16(half %a, half %b) 732*9880d681SAndroid Build Coastguard Worker ret half %r 733*9880d681SAndroid Build Coastguard Worker} 734*9880d681SAndroid Build Coastguard Worker 735*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_copysign_f32: 736*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 737*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi.4s v2, #128, lsl #24 738*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bit.16b v0, v1, v2 739*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 740*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 741*9880d681SAndroid Build Coastguard Workerdefine half @test_copysign_f32(half %a, float %b) #0 { 742*9880d681SAndroid Build Coastguard Worker %tb = fptrunc float %b to half 743*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.copysign.f16(half %a, half %tb) 744*9880d681SAndroid Build Coastguard Worker ret half %r 745*9880d681SAndroid Build Coastguard Worker} 746*9880d681SAndroid Build Coastguard Worker 747*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_copysign_f64: 748*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, d1 749*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 750*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi.4s v2, #128, lsl #24 751*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bit.16b v0, v1, v2 752*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 753*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 754*9880d681SAndroid Build Coastguard Workerdefine half @test_copysign_f64(half %a, double %b) #0 { 755*9880d681SAndroid Build Coastguard Worker %tb = fptrunc double %b to half 756*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.copysign.f16(half %a, half %tb) 757*9880d681SAndroid Build Coastguard Worker ret half %r 758*9880d681SAndroid Build Coastguard Worker} 759*9880d681SAndroid Build Coastguard Worker 760*9880d681SAndroid Build Coastguard Worker; Check that the FP promotion will use a truncating FP_ROUND, so we can fold 761*9880d681SAndroid Build Coastguard Worker; away the (fpext (fp_round <result>)) here. 762*9880d681SAndroid Build Coastguard Worker 763*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_copysign_extended: 764*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 765*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 766*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi.4s v2, #128, lsl #24 767*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bit.16b v0, v1, v2 768*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 769*9880d681SAndroid Build Coastguard Workerdefine float @test_copysign_extended(half %a, half %b) #0 { 770*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.copysign.f16(half %a, half %b) 771*9880d681SAndroid Build Coastguard Worker %xr = fpext half %r to float 772*9880d681SAndroid Build Coastguard Worker ret float %xr 773*9880d681SAndroid Build Coastguard Worker} 774*9880d681SAndroid Build Coastguard Worker 775*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_floor: 776*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt [[FLOAT32:s[0-9]+]], h0 777*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: frintm [[INT32:s[0-9]+]], [[FLOAT32]] 778*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, [[INT32]] 779*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 780*9880d681SAndroid Build Coastguard Workerdefine half @test_floor(half %a) #0 { 781*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.floor.f16(half %a) 782*9880d681SAndroid Build Coastguard Worker ret half %r 783*9880d681SAndroid Build Coastguard Worker} 784*9880d681SAndroid Build Coastguard Worker 785*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_ceil: 786*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt [[FLOAT32:s[0-9]+]], h0 787*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: frintp [[INT32:s[0-9]+]], [[FLOAT32]] 788*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, [[INT32]] 789*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 790*9880d681SAndroid Build Coastguard Workerdefine half @test_ceil(half %a) #0 { 791*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.ceil.f16(half %a) 792*9880d681SAndroid Build Coastguard Worker ret half %r 793*9880d681SAndroid Build Coastguard Worker} 794*9880d681SAndroid Build Coastguard Worker 795*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_trunc: 796*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt [[FLOAT32:s[0-9]+]], h0 797*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: frintz [[INT32:s[0-9]+]], [[FLOAT32]] 798*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, [[INT32]] 799*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 800*9880d681SAndroid Build Coastguard Workerdefine half @test_trunc(half %a) #0 { 801*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.trunc.f16(half %a) 802*9880d681SAndroid Build Coastguard Worker ret half %r 803*9880d681SAndroid Build Coastguard Worker} 804*9880d681SAndroid Build Coastguard Worker 805*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_rint: 806*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 807*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: frintx s0, s0 808*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 809*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 810*9880d681SAndroid Build Coastguard Workerdefine half @test_rint(half %a) #0 { 811*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.rint.f16(half %a) 812*9880d681SAndroid Build Coastguard Worker ret half %r 813*9880d681SAndroid Build Coastguard Worker} 814*9880d681SAndroid Build Coastguard Worker 815*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_nearbyint: 816*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 817*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: frinti s0, s0 818*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 819*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 820*9880d681SAndroid Build Coastguard Workerdefine half @test_nearbyint(half %a) #0 { 821*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.nearbyint.f16(half %a) 822*9880d681SAndroid Build Coastguard Worker ret half %r 823*9880d681SAndroid Build Coastguard Worker} 824*9880d681SAndroid Build Coastguard Worker 825*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_round: 826*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt [[FLOAT32:s[0-9]+]], h0 827*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: frinta [[INT32:s[0-9]+]], [[FLOAT32]] 828*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, [[INT32]] 829*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 830*9880d681SAndroid Build Coastguard Workerdefine half @test_round(half %a) #0 { 831*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.round.f16(half %a) 832*9880d681SAndroid Build Coastguard Worker ret half %r 833*9880d681SAndroid Build Coastguard Worker} 834*9880d681SAndroid Build Coastguard Worker 835*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fmuladd: 836*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h1 837*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 838*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmul s0, s0, s1 839*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 840*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s0, h0 841*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt s1, h2 842*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fadd s0, s0, s1 843*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvt h0, s0 844*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 845*9880d681SAndroid Build Coastguard Workerdefine half @test_fmuladd(half %a, half %b, half %c) #0 { 846*9880d681SAndroid Build Coastguard Worker %r = call half @llvm.fmuladd.f16(half %a, half %b, half %c) 847*9880d681SAndroid Build Coastguard Worker ret half %r 848*9880d681SAndroid Build Coastguard Worker} 849*9880d681SAndroid Build Coastguard Worker 850*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind } 851