brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.1 KiB · 65d273d Raw
356 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --extra_scrub2; RUN: llc -mattr=+sve,+bf16            < %s | FileCheck %s3; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s4 5target triple = "aarch64-unknown-linux-gnu"6 7;8; FCEIL9;10 11define <vscale x 2 x bfloat> @frintp_nxv2bf16(<vscale x 2 x bfloat> %a) {12; CHECK-LABEL: frintp_nxv2bf16:13; CHECK:       // %bb.0:14; CHECK-NEXT:    lsl z0.s, z0.s, #1615; CHECK-NEXT:    ptrue p0.d16; CHECK-NEXT:    frintp z0.s, p0/m, z0.s17; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s18; CHECK-NEXT:    ret19  %res = call <vscale x 2 x bfloat> @llvm.ceil.nxv2bf16(<vscale x 2 x bfloat> %a)20  ret <vscale x 2 x bfloat> %res21}22 23define <vscale x 4 x bfloat> @frintp_nxv4bf16(<vscale x 4 x bfloat> %a) {24; CHECK-LABEL: frintp_nxv4bf16:25; CHECK:       // %bb.0:26; CHECK-NEXT:    lsl z0.s, z0.s, #1627; CHECK-NEXT:    ptrue p0.s28; CHECK-NEXT:    frintp z0.s, p0/m, z0.s29; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s30; CHECK-NEXT:    ret31  %res = call <vscale x 4 x bfloat> @llvm.ceil.nxv4bf16(<vscale x 4 x bfloat> %a)32  ret <vscale x 4 x bfloat> %res33}34 35define <vscale x 8 x bfloat> @frintp_nxv8bf16(<vscale x 8 x bfloat> %a) {36; CHECK-LABEL: frintp_nxv8bf16:37; CHECK:       // %bb.0:38; CHECK-NEXT:    uunpkhi z1.s, z0.h39; CHECK-NEXT:    uunpklo z0.s, z0.h40; CHECK-NEXT:    ptrue p0.s41; CHECK-NEXT:    lsl z1.s, z1.s, #1642; CHECK-NEXT:    lsl z0.s, z0.s, #1643; CHECK-NEXT:    frintp z1.s, p0/m, z1.s44; CHECK-NEXT:    frintp z0.s, p0/m, z0.s45; CHECK-NEXT:    bfcvt z1.h, p0/m, z1.s46; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s47; CHECK-NEXT:    uzp1 z0.h, z0.h, z1.h48; CHECK-NEXT:    ret49  %res = call <vscale x 8 x bfloat> @llvm.ceil.nxv8bf16(<vscale x 8 x bfloat> %a)50  ret <vscale x 8 x bfloat> %res51}52 53;54; FFLOOR55;56 57define <vscale x 2 x bfloat> @frintm_nxv2bf16(<vscale x 2 x bfloat> %a) {58; CHECK-LABEL: frintm_nxv2bf16:59; CHECK:       // %bb.0:60; CHECK-NEXT:    lsl z0.s, z0.s, #1661; CHECK-NEXT:    ptrue p0.d62; CHECK-NEXT:    frintm z0.s, p0/m, z0.s63; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s64; CHECK-NEXT:    ret65  %res = call <vscale x 2 x bfloat> @llvm.floor.nxv2bf16(<vscale x 2 x bfloat> %a)66  ret <vscale x 2 x bfloat> %res67}68 69define <vscale x 4 x bfloat> @frintm_nxv4bf16(<vscale x 4 x bfloat> %a) {70; CHECK-LABEL: frintm_nxv4bf16:71; CHECK:       // %bb.0:72; CHECK-NEXT:    lsl z0.s, z0.s, #1673; CHECK-NEXT:    ptrue p0.s74; CHECK-NEXT:    frintm z0.s, p0/m, z0.s75; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s76; CHECK-NEXT:    ret77  %res = call <vscale x 4 x bfloat> @llvm.floor.nxv4bf16(<vscale x 4 x bfloat> %a)78  ret <vscale x 4 x bfloat> %res79}80 81define <vscale x 8 x bfloat> @frintm_nxv8bf16(<vscale x 8 x bfloat> %a) {82; CHECK-LABEL: frintm_nxv8bf16:83; CHECK:       // %bb.0:84; CHECK-NEXT:    uunpkhi z1.s, z0.h85; CHECK-NEXT:    uunpklo z0.s, z0.h86; CHECK-NEXT:    ptrue p0.s87; CHECK-NEXT:    lsl z1.s, z1.s, #1688; CHECK-NEXT:    lsl z0.s, z0.s, #1689; CHECK-NEXT:    frintm z1.s, p0/m, z1.s90; CHECK-NEXT:    frintm z0.s, p0/m, z0.s91; CHECK-NEXT:    bfcvt z1.h, p0/m, z1.s92; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s93; CHECK-NEXT:    uzp1 z0.h, z0.h, z1.h94; CHECK-NEXT:    ret95  %res = call <vscale x 8 x bfloat> @llvm.floor.nxv8bf16(<vscale x 8 x bfloat> %a)96  ret <vscale x 8 x bfloat> %res97}98 99;100; FNEARBYINT101;102 103define <vscale x 2 x bfloat> @frinti_nxv2bf16(<vscale x 2 x bfloat> %a) {104; CHECK-LABEL: frinti_nxv2bf16:105; CHECK:       // %bb.0:106; CHECK-NEXT:    lsl z0.s, z0.s, #16107; CHECK-NEXT:    ptrue p0.d108; CHECK-NEXT:    frinti z0.s, p0/m, z0.s109; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s110; CHECK-NEXT:    ret111  %res = call <vscale x 2 x bfloat> @llvm.nearbyint.nxv2bf16(<vscale x 2 x bfloat> %a)112  ret <vscale x 2 x bfloat> %res113}114 115define <vscale x 4 x bfloat> @frinti_nxv4bf16(<vscale x 4 x bfloat> %a) {116; CHECK-LABEL: frinti_nxv4bf16:117; CHECK:       // %bb.0:118; CHECK-NEXT:    lsl z0.s, z0.s, #16119; CHECK-NEXT:    ptrue p0.s120; CHECK-NEXT:    frinti z0.s, p0/m, z0.s121; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s122; CHECK-NEXT:    ret123  %res = call <vscale x 4 x bfloat> @llvm.nearbyint.nxv4bf16(<vscale x 4 x bfloat> %a)124  ret <vscale x 4 x bfloat> %res125}126 127define <vscale x 8 x bfloat> @frinti_nxv8bf16(<vscale x 8 x bfloat> %a) {128; CHECK-LABEL: frinti_nxv8bf16:129; CHECK:       // %bb.0:130; CHECK-NEXT:    uunpkhi z1.s, z0.h131; CHECK-NEXT:    uunpklo z0.s, z0.h132; CHECK-NEXT:    ptrue p0.s133; CHECK-NEXT:    lsl z1.s, z1.s, #16134; CHECK-NEXT:    lsl z0.s, z0.s, #16135; CHECK-NEXT:    frinti z1.s, p0/m, z1.s136; CHECK-NEXT:    frinti z0.s, p0/m, z0.s137; CHECK-NEXT:    bfcvt z1.h, p0/m, z1.s138; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s139; CHECK-NEXT:    uzp1 z0.h, z0.h, z1.h140; CHECK-NEXT:    ret141  %res = call <vscale x 8 x bfloat> @llvm.nearbyint.nxv8bf16(<vscale x 8 x bfloat> %a)142  ret <vscale x 8 x bfloat> %res143}144 145;146; FRINT147;148 149define <vscale x 2 x bfloat> @frintx_nxv2bf16(<vscale x 2 x bfloat> %a) {150; CHECK-LABEL: frintx_nxv2bf16:151; CHECK:       // %bb.0:152; CHECK-NEXT:    lsl z0.s, z0.s, #16153; CHECK-NEXT:    ptrue p0.d154; CHECK-NEXT:    frintx z0.s, p0/m, z0.s155; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s156; CHECK-NEXT:    ret157  %res = call <vscale x 2 x bfloat> @llvm.rint.nxv2bf16(<vscale x 2 x bfloat> %a)158  ret <vscale x 2 x bfloat> %res159}160 161define <vscale x 4 x bfloat> @frintx_nxv4bf16(<vscale x 4 x bfloat> %a) {162; CHECK-LABEL: frintx_nxv4bf16:163; CHECK:       // %bb.0:164; CHECK-NEXT:    lsl z0.s, z0.s, #16165; CHECK-NEXT:    ptrue p0.s166; CHECK-NEXT:    frintx z0.s, p0/m, z0.s167; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s168; CHECK-NEXT:    ret169  %res = call <vscale x 4 x bfloat> @llvm.rint.nxv4bf16(<vscale x 4 x bfloat> %a)170  ret <vscale x 4 x bfloat> %res171}172 173define <vscale x 8 x bfloat> @frintx_nxv8bf16(<vscale x 8 x bfloat> %a) {174; CHECK-LABEL: frintx_nxv8bf16:175; CHECK:       // %bb.0:176; CHECK-NEXT:    uunpkhi z1.s, z0.h177; CHECK-NEXT:    uunpklo z0.s, z0.h178; CHECK-NEXT:    ptrue p0.s179; CHECK-NEXT:    lsl z1.s, z1.s, #16180; CHECK-NEXT:    lsl z0.s, z0.s, #16181; CHECK-NEXT:    frintx z1.s, p0/m, z1.s182; CHECK-NEXT:    frintx z0.s, p0/m, z0.s183; CHECK-NEXT:    bfcvt z1.h, p0/m, z1.s184; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s185; CHECK-NEXT:    uzp1 z0.h, z0.h, z1.h186; CHECK-NEXT:    ret187  %res = call <vscale x 8 x bfloat> @llvm.rint.nxv8bf16(<vscale x 8 x bfloat> %a)188  ret <vscale x 8 x bfloat> %res189}190 191;192; ROUND193;194 195define <vscale x 2 x bfloat> @frinta_nxv2bf16(<vscale x 2 x bfloat> %a) {196; CHECK-LABEL: frinta_nxv2bf16:197; CHECK:       // %bb.0:198; CHECK-NEXT:    lsl z0.s, z0.s, #16199; CHECK-NEXT:    ptrue p0.d200; CHECK-NEXT:    frinta z0.s, p0/m, z0.s201; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s202; CHECK-NEXT:    ret203  %res = call <vscale x 2 x bfloat> @llvm.round.nxv2bf16(<vscale x 2 x bfloat> %a)204  ret <vscale x 2 x bfloat> %res205}206 207define <vscale x 4 x bfloat> @frinta_nxv4bf16(<vscale x 4 x bfloat> %a) {208; CHECK-LABEL: frinta_nxv4bf16:209; CHECK:       // %bb.0:210; CHECK-NEXT:    lsl z0.s, z0.s, #16211; CHECK-NEXT:    ptrue p0.s212; CHECK-NEXT:    frinta z0.s, p0/m, z0.s213; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s214; CHECK-NEXT:    ret215  %res = call <vscale x 4 x bfloat> @llvm.round.nxv4bf16(<vscale x 4 x bfloat> %a)216  ret <vscale x 4 x bfloat> %res217}218 219define <vscale x 8 x bfloat> @frinta_nxv8bf16(<vscale x 8 x bfloat> %a) {220; CHECK-LABEL: frinta_nxv8bf16:221; CHECK:       // %bb.0:222; CHECK-NEXT:    uunpkhi z1.s, z0.h223; CHECK-NEXT:    uunpklo z0.s, z0.h224; CHECK-NEXT:    ptrue p0.s225; CHECK-NEXT:    lsl z1.s, z1.s, #16226; CHECK-NEXT:    lsl z0.s, z0.s, #16227; CHECK-NEXT:    frinta z1.s, p0/m, z1.s228; CHECK-NEXT:    frinta z0.s, p0/m, z0.s229; CHECK-NEXT:    bfcvt z1.h, p0/m, z1.s230; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s231; CHECK-NEXT:    uzp1 z0.h, z0.h, z1.h232; CHECK-NEXT:    ret233  %res = call <vscale x 8 x bfloat> @llvm.round.nxv8bf16(<vscale x 8 x bfloat> %a)234  ret <vscale x 8 x bfloat> %res235}236 237;238; ROUNDEVEN239;240 241define <vscale x 2 x bfloat> @frintn_nxv2bf16(<vscale x 2 x bfloat> %a) {242; CHECK-LABEL: frintn_nxv2bf16:243; CHECK:       // %bb.0:244; CHECK-NEXT:    lsl z0.s, z0.s, #16245; CHECK-NEXT:    ptrue p0.d246; CHECK-NEXT:    frintn z0.s, p0/m, z0.s247; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s248; CHECK-NEXT:    ret249  %res = call <vscale x 2 x bfloat> @llvm.roundeven.nxv2bf16(<vscale x 2 x bfloat> %a)250  ret <vscale x 2 x bfloat> %res251}252 253define <vscale x 4 x bfloat> @frintn_nxv4bf16(<vscale x 4 x bfloat> %a) {254; CHECK-LABEL: frintn_nxv4bf16:255; CHECK:       // %bb.0:256; CHECK-NEXT:    lsl z0.s, z0.s, #16257; CHECK-NEXT:    ptrue p0.s258; CHECK-NEXT:    frintn z0.s, p0/m, z0.s259; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s260; CHECK-NEXT:    ret261  %res = call <vscale x 4 x bfloat> @llvm.roundeven.nxv4bf16(<vscale x 4 x bfloat> %a)262  ret <vscale x 4 x bfloat> %res263}264 265define <vscale x 8 x bfloat> @frintn_nxv8bf16(<vscale x 8 x bfloat> %a) {266; CHECK-LABEL: frintn_nxv8bf16:267; CHECK:       // %bb.0:268; CHECK-NEXT:    uunpkhi z1.s, z0.h269; CHECK-NEXT:    uunpklo z0.s, z0.h270; CHECK-NEXT:    ptrue p0.s271; CHECK-NEXT:    lsl z1.s, z1.s, #16272; CHECK-NEXT:    lsl z0.s, z0.s, #16273; CHECK-NEXT:    frintn z1.s, p0/m, z1.s274; CHECK-NEXT:    frintn z0.s, p0/m, z0.s275; CHECK-NEXT:    bfcvt z1.h, p0/m, z1.s276; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s277; CHECK-NEXT:    uzp1 z0.h, z0.h, z1.h278; CHECK-NEXT:    ret279  %res = call <vscale x 8 x bfloat> @llvm.roundeven.nxv8bf16(<vscale x 8 x bfloat> %a)280  ret <vscale x 8 x bfloat> %res281}282 283;284; FTRUNC285;286 287define <vscale x 2 x bfloat> @frintz_nxv2bf16(<vscale x 2 x bfloat> %a) {288; CHECK-LABEL: frintz_nxv2bf16:289; CHECK:       // %bb.0:290; CHECK-NEXT:    lsl z0.s, z0.s, #16291; CHECK-NEXT:    ptrue p0.d292; CHECK-NEXT:    frintz z0.s, p0/m, z0.s293; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s294; CHECK-NEXT:    ret295  %res = call <vscale x 2 x bfloat> @llvm.trunc.nxv2bf16(<vscale x 2 x bfloat> %a)296  ret <vscale x 2 x bfloat> %res297}298 299define <vscale x 4 x bfloat> @frintz_nxv4bf16(<vscale x 4 x bfloat> %a) {300; CHECK-LABEL: frintz_nxv4bf16:301; CHECK:       // %bb.0:302; CHECK-NEXT:    lsl z0.s, z0.s, #16303; CHECK-NEXT:    ptrue p0.s304; CHECK-NEXT:    frintz z0.s, p0/m, z0.s305; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s306; CHECK-NEXT:    ret307  %res = call <vscale x 4 x bfloat> @llvm.trunc.nxv4bf16(<vscale x 4 x bfloat> %a)308  ret <vscale x 4 x bfloat> %res309}310 311define <vscale x 8 x bfloat> @frintz_nxv8bf16(<vscale x 8 x bfloat> %a) {312; CHECK-LABEL: frintz_nxv8bf16:313; CHECK:       // %bb.0:314; CHECK-NEXT:    uunpkhi z1.s, z0.h315; CHECK-NEXT:    uunpklo z0.s, z0.h316; CHECK-NEXT:    ptrue p0.s317; CHECK-NEXT:    lsl z1.s, z1.s, #16318; CHECK-NEXT:    lsl z0.s, z0.s, #16319; CHECK-NEXT:    frintz z1.s, p0/m, z1.s320; CHECK-NEXT:    frintz z0.s, p0/m, z0.s321; CHECK-NEXT:    bfcvt z1.h, p0/m, z1.s322; CHECK-NEXT:    bfcvt z0.h, p0/m, z0.s323; CHECK-NEXT:    uzp1 z0.h, z0.h, z1.h324; CHECK-NEXT:    ret325  %res = call <vscale x 8 x bfloat> @llvm.trunc.nxv8bf16(<vscale x 8 x bfloat> %a)326  ret <vscale x 8 x bfloat> %res327}328 329declare <vscale x 2 x bfloat> @llvm.ceil.nxv2bf16( <vscale x 2 x bfloat>)330declare <vscale x 4 x bfloat> @llvm.ceil.nxv4bf16( <vscale x 4 x bfloat>)331declare <vscale x 8 x bfloat> @llvm.ceil.nxv8bf16( <vscale x 8 x bfloat>)332 333declare <vscale x 2 x bfloat> @llvm.floor.nxv2bf16( <vscale x 2 x bfloat>)334declare <vscale x 4 x bfloat> @llvm.floor.nxv4bf16( <vscale x 4 x bfloat>)335declare <vscale x 8 x bfloat> @llvm.floor.nxv8bf16( <vscale x 8 x bfloat>)336 337declare <vscale x 2 x bfloat> @llvm.nearbyint.nxv2bf16( <vscale x 2 x bfloat>)338declare <vscale x 4 x bfloat> @llvm.nearbyint.nxv4bf16( <vscale x 4 x bfloat>)339declare <vscale x 8 x bfloat> @llvm.nearbyint.nxv8bf16( <vscale x 8 x bfloat>)340 341declare <vscale x 2 x bfloat> @llvm.rint.nxv2bf16( <vscale x 2 x bfloat>)342declare <vscale x 4 x bfloat> @llvm.rint.nxv4bf16( <vscale x 4 x bfloat>)343declare <vscale x 8 x bfloat> @llvm.rint.nxv8bf16( <vscale x 8 x bfloat>)344 345declare <vscale x 2 x bfloat> @llvm.round.nxv2bf16( <vscale x 2 x bfloat>)346declare <vscale x 4 x bfloat> @llvm.round.nxv4bf16( <vscale x 4 x bfloat>)347declare <vscale x 8 x bfloat> @llvm.round.nxv8bf16( <vscale x 8 x bfloat>)348 349declare <vscale x 2 x bfloat> @llvm.roundeven.nxv2bf16( <vscale x 2 x bfloat>)350declare <vscale x 4 x bfloat> @llvm.roundeven.nxv4bf16( <vscale x 4 x bfloat>)351declare <vscale x 8 x bfloat> @llvm.roundeven.nxv8bf16( <vscale x 8 x bfloat>)352 353declare <vscale x 2 x bfloat> @llvm.trunc.nxv2bf16( <vscale x 2 x bfloat>)354declare <vscale x 4 x bfloat> @llvm.trunc.nxv4bf16( <vscale x 4 x bfloat>)355declare <vscale x 8 x bfloat> @llvm.trunc.nxv8bf16( <vscale x 8 x bfloat>)356