1*ecdf48f1SAlexandros Lamprineas; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*ecdf48f1SAlexandros Lamprineas; RUN: llc -float-abi hard -mattr=+bf16,+fullfp16 < %s | FileCheck %s --check-prefix=HARD 3*ecdf48f1SAlexandros Lamprineas; RUN: llc -float-abi soft -mattr=+bf16,+fullfp16 < %s | FileCheck %s --check-prefix=SOFT 4*ecdf48f1SAlexandros Lamprineas 5*ecdf48f1SAlexandros Lamprineastarget datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" 6*ecdf48f1SAlexandros Lamprineastarget triple = "armv8.6a-arm-none-eabi" 7*ecdf48f1SAlexandros Lamprineas 8*ecdf48f1SAlexandros Lamprineasdefine bfloat @load_scalar_bf(bfloat* %addr) { 9*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: load_scalar_bf: 10*ecdf48f1SAlexandros Lamprineas; HARD: @ %bb.0: @ %entry 11*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: vldr.16 s0, [r0] 12*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: bx lr 13*ecdf48f1SAlexandros Lamprineas; 14*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: load_scalar_bf: 15*ecdf48f1SAlexandros Lamprineas; SOFT: @ %bb.0: @ %entry 16*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vldr.16 s0, [r0] 17*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vmov r0, s0 18*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: bx lr 19*ecdf48f1SAlexandros Lamprineasentry: 20*ecdf48f1SAlexandros Lamprineas %0 = load bfloat, bfloat* %addr, align 2 21*ecdf48f1SAlexandros Lamprineas ret bfloat %0 22*ecdf48f1SAlexandros Lamprineas} 23*ecdf48f1SAlexandros Lamprineas 24*ecdf48f1SAlexandros Lamprineasdefine void @store_scalar_bf(bfloat %v, bfloat* %addr) { 25*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: store_scalar_bf: 26*ecdf48f1SAlexandros Lamprineas; HARD: @ %bb.0: @ %entry 27*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: vstr.16 s0, [r0] 28*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: bx lr 29*ecdf48f1SAlexandros Lamprineas; 30*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: store_scalar_bf: 31*ecdf48f1SAlexandros Lamprineas; SOFT: @ %bb.0: @ %entry 32*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vmov.f16 s0, r0 33*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vstr.16 s0, [r1] 34*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: bx lr 35*ecdf48f1SAlexandros Lamprineasentry: 36*ecdf48f1SAlexandros Lamprineas store bfloat %v, bfloat* %addr, align 2 37*ecdf48f1SAlexandros Lamprineas ret void 38*ecdf48f1SAlexandros Lamprineas} 39*ecdf48f1SAlexandros Lamprineas 40*ecdf48f1SAlexandros Lamprineasdefine <4 x bfloat> @load_vector4_bf(<4 x bfloat>* %addr) { 41*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: load_vector4_bf: 42*ecdf48f1SAlexandros Lamprineas; HARD: @ %bb.0: @ %entry 43*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: vldr d0, [r0] 44*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: bx lr 45*ecdf48f1SAlexandros Lamprineas; 46*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: load_vector4_bf: 47*ecdf48f1SAlexandros Lamprineas; SOFT: @ %bb.0: @ %entry 48*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vldr d16, [r0] 49*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vmov r0, r1, d16 50*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: bx lr 51*ecdf48f1SAlexandros Lamprineasentry: 52*ecdf48f1SAlexandros Lamprineas %0 = load <4 x bfloat>, <4 x bfloat>* %addr, align 8 53*ecdf48f1SAlexandros Lamprineas ret <4 x bfloat> %0 54*ecdf48f1SAlexandros Lamprineas} 55*ecdf48f1SAlexandros Lamprineas 56*ecdf48f1SAlexandros Lamprineasdefine void @store_vector4_bf(<4 x bfloat> %v, <4 x bfloat>* %addr) { 57*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: store_vector4_bf: 58*ecdf48f1SAlexandros Lamprineas; HARD: @ %bb.0: @ %entry 59*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: vstr d0, [r0] 60*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: bx lr 61*ecdf48f1SAlexandros Lamprineas; 62*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: store_vector4_bf: 63*ecdf48f1SAlexandros Lamprineas; SOFT: @ %bb.0: @ %entry 64*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: strd r0, r1, [r2] 65*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: bx lr 66*ecdf48f1SAlexandros Lamprineasentry: 67*ecdf48f1SAlexandros Lamprineas store <4 x bfloat> %v, <4 x bfloat>* %addr, align 8 68*ecdf48f1SAlexandros Lamprineas ret void 69*ecdf48f1SAlexandros Lamprineas} 70*ecdf48f1SAlexandros Lamprineas 71*ecdf48f1SAlexandros Lamprineasdefine <8 x bfloat> @load_vector8_bf(<8 x bfloat>* %addr) { 72*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: load_vector8_bf: 73*ecdf48f1SAlexandros Lamprineas; HARD: @ %bb.0: @ %entry 74*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: vld1.64 {d0, d1}, [r0] 75*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: bx lr 76*ecdf48f1SAlexandros Lamprineas; 77*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: load_vector8_bf: 78*ecdf48f1SAlexandros Lamprineas; SOFT: @ %bb.0: @ %entry 79*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vld1.64 {d16, d17}, [r0] 80*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vmov r0, r1, d16 81*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vmov r2, r3, d17 82*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: bx lr 83*ecdf48f1SAlexandros Lamprineasentry: 84*ecdf48f1SAlexandros Lamprineas %0 = load <8 x bfloat>, <8 x bfloat>* %addr, align 8 85*ecdf48f1SAlexandros Lamprineas ret <8 x bfloat> %0 86*ecdf48f1SAlexandros Lamprineas} 87*ecdf48f1SAlexandros Lamprineas 88*ecdf48f1SAlexandros Lamprineasdefine void @store_vector8_bf(<8 x bfloat> %v, <8 x bfloat>* %addr) { 89*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: store_vector8_bf: 90*ecdf48f1SAlexandros Lamprineas; HARD: @ %bb.0: @ %entry 91*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: vst1.64 {d0, d1}, [r0] 92*ecdf48f1SAlexandros Lamprineas; HARD-NEXT: bx lr 93*ecdf48f1SAlexandros Lamprineas; 94*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: store_vector8_bf: 95*ecdf48f1SAlexandros Lamprineas; SOFT: @ %bb.0: @ %entry 96*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vmov d17, r2, r3 97*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: ldr r12, [sp] 98*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vmov d16, r0, r1 99*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: vst1.64 {d16, d17}, [r12] 100*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT: bx lr 101*ecdf48f1SAlexandros Lamprineasentry: 102*ecdf48f1SAlexandros Lamprineas store <8 x bfloat> %v, <8 x bfloat>* %addr, align 8 103*ecdf48f1SAlexandros Lamprineas ret void 104*ecdf48f1SAlexandros Lamprineas} 105*ecdf48f1SAlexandros Lamprineas 106*ecdf48f1SAlexandros Lamprineas 107