2086 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD,CHECK-SD-NOFP163; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD,CHECK-SD-FP164; RUN: llc -mtriple=aarch64 -global-isel -global-isel-abort=2 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI,CHECK-GI-NOFP165; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 -global-isel -global-isel-abort=2 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI,CHECK-GI-FP166 7; CHECK-GI: warning: Instruction selection used fallback path for stofp_i64_bf168; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_i64_bf169; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_i32_bf1610; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_i32_bf1611; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_i16_bf1612; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_i16_bf1613; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_i8_bf1614; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_i8_bf1615; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v2i64_v2bf1616; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v2i64_v2bf1617; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v3i64_v3bf1618; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v3i64_v3bf1619; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v4i64_v4bf1620; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v4i64_v4bf1621; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v8i64_v8bf1622; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v8i64_v8bf1623; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v16i64_v16bf1624; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v16i64_v16bf1625; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v32i64_v32bf1626; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v32i64_v32bf1627; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v2i32_v2bf1628; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v2i32_v2bf1629; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v3i32_v3bf1630; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v3i32_v3bf1631; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v4i32_v4bf1632; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v4i32_v4bf1633; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v8i32_v8bf1634; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v8i32_v8bf1635; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v16i32_v16bf1636; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v16i32_v16bf1637; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v32i32_v32bf1638; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v32i32_v32bf1639; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v2i16_v2bf1640; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v2i16_v2bf1641; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v3i16_v3bf1642; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v3i16_v3bf1643; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v4i16_v4bf1644; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v4i16_v4bf1645; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v8i16_v8bf1646; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v8i16_v8bf1647; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v16i16_v16bf1648; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v16i16_v16bf1649; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v32i16_v32bf1650; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v32i16_v32bf1651; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v2i8_v2bf1652; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v2i8_v2bf1653; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v3i8_v3bf1654; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v3i8_v3bf1655; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v4i8_v4bf1656; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v4i8_v4bf1657; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v8i8_v8bf1658; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v8i8_v8bf1659; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v16i8_v16bf1660; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v16i8_v16bf1661; CHECK-GI-NEXT: warning: Instruction selection used fallback path for stofp_v32i8_v32bf1662; CHECK-GI-NEXT: warning: Instruction selection used fallback path for utofp_v32i8_v32bf1663 64define bfloat @stofp_i64_bf16(i64 %a) {65; CHECK-LABEL: stofp_i64_bf16:66; CHECK: // %bb.0: // %entry67; CHECK-NEXT: cmp x0, #068; CHECK-NEXT: and x11, x0, #0x800000000000000069; CHECK-NEXT: mov w8, #32767 // =0x7fff70; CHECK-NEXT: cneg x9, x0, mi71; CHECK-NEXT: lsr x10, x9, #5372; CHECK-NEXT: cmp x10, #073; CHECK-NEXT: and x10, x9, #0xfffffffffffff00074; CHECK-NEXT: csel x10, x10, x9, ne75; CHECK-NEXT: scvtf d0, x1076; CHECK-NEXT: cset w10, ne77; CHECK-NEXT: tst x9, #0xfff78; CHECK-NEXT: csel w10, wzr, w10, eq79; CHECK-NEXT: fmov x9, d080; CHECK-NEXT: orr x9, x9, x1181; CHECK-NEXT: orr x9, x9, x1082; CHECK-NEXT: fmov d0, x983; CHECK-NEXT: fcvtxn s0, d084; CHECK-NEXT: fmov w9, s085; CHECK-NEXT: ubfx w10, w9, #16, #186; CHECK-NEXT: add w8, w9, w887; CHECK-NEXT: add w8, w10, w888; CHECK-NEXT: lsr w8, w8, #1689; CHECK-NEXT: fmov s0, w890; CHECK-NEXT: // kill: def $h0 killed $h0 killed $s091; CHECK-NEXT: ret92entry:93 %c = sitofp i64 %a to bfloat94 ret bfloat %c95}96 97define bfloat @utofp_i64_bf16(i64 %a) {98; CHECK-LABEL: utofp_i64_bf16:99; CHECK: // %bb.0: // %entry100; CHECK-NEXT: lsr x9, x0, #53101; CHECK-NEXT: mov w8, #32767 // =0x7fff102; CHECK-NEXT: cmp x9, #0103; CHECK-NEXT: and x9, x0, #0xfffffffffffff000104; CHECK-NEXT: csel x9, x9, x0, ne105; CHECK-NEXT: ucvtf d0, x9106; CHECK-NEXT: cset w9, ne107; CHECK-NEXT: tst x0, #0xfff108; CHECK-NEXT: csel w9, wzr, w9, eq109; CHECK-NEXT: fmov x10, d0110; CHECK-NEXT: orr x9, x10, x9111; CHECK-NEXT: fmov d0, x9112; CHECK-NEXT: fcvtxn s0, d0113; CHECK-NEXT: fmov w9, s0114; CHECK-NEXT: ubfx w10, w9, #16, #1115; CHECK-NEXT: add w8, w9, w8116; CHECK-NEXT: add w8, w10, w8117; CHECK-NEXT: lsr w8, w8, #16118; CHECK-NEXT: fmov s0, w8119; CHECK-NEXT: // kill: def $h0 killed $h0 killed $s0120; CHECK-NEXT: ret121entry:122 %c = uitofp i64 %a to bfloat123 ret bfloat %c124}125 126define bfloat @stofp_i32_bf16(i32 %a) {127; CHECK-LABEL: stofp_i32_bf16:128; CHECK: // %bb.0: // %entry129; CHECK-NEXT: scvtf d0, w0130; CHECK-NEXT: mov w8, #32767 // =0x7fff131; CHECK-NEXT: fcvtxn s0, d0132; CHECK-NEXT: fmov w9, s0133; CHECK-NEXT: ubfx w10, w9, #16, #1134; CHECK-NEXT: add w8, w9, w8135; CHECK-NEXT: add w8, w10, w8136; CHECK-NEXT: lsr w8, w8, #16137; CHECK-NEXT: fmov s0, w8138; CHECK-NEXT: // kill: def $h0 killed $h0 killed $s0139; CHECK-NEXT: ret140entry:141 %c = sitofp i32 %a to bfloat142 ret bfloat %c143}144 145define bfloat @utofp_i32_bf16(i32 %a) {146; CHECK-LABEL: utofp_i32_bf16:147; CHECK: // %bb.0: // %entry148; CHECK-NEXT: ucvtf d0, w0149; CHECK-NEXT: mov w8, #32767 // =0x7fff150; CHECK-NEXT: fcvtxn s0, d0151; CHECK-NEXT: fmov w9, s0152; CHECK-NEXT: ubfx w10, w9, #16, #1153; CHECK-NEXT: add w8, w9, w8154; CHECK-NEXT: add w8, w10, w8155; CHECK-NEXT: lsr w8, w8, #16156; CHECK-NEXT: fmov s0, w8157; CHECK-NEXT: // kill: def $h0 killed $h0 killed $s0158; CHECK-NEXT: ret159entry:160 %c = uitofp i32 %a to bfloat161 ret bfloat %c162}163 164define bfloat @stofp_i16_bf16(i16 %a) {165; CHECK-LABEL: stofp_i16_bf16:166; CHECK: // %bb.0: // %entry167; CHECK-NEXT: sxth w9, w0168; CHECK-NEXT: mov w8, #32767 // =0x7fff169; CHECK-NEXT: scvtf s0, w9170; CHECK-NEXT: fmov w9, s0171; CHECK-NEXT: ubfx w10, w9, #16, #1172; CHECK-NEXT: add w8, w9, w8173; CHECK-NEXT: add w8, w10, w8174; CHECK-NEXT: lsr w8, w8, #16175; CHECK-NEXT: fmov s0, w8176; CHECK-NEXT: // kill: def $h0 killed $h0 killed $s0177; CHECK-NEXT: ret178entry:179 %c = sitofp i16 %a to bfloat180 ret bfloat %c181}182 183define bfloat @utofp_i16_bf16(i16 %a) {184; CHECK-LABEL: utofp_i16_bf16:185; CHECK: // %bb.0: // %entry186; CHECK-NEXT: and w9, w0, #0xffff187; CHECK-NEXT: mov w8, #32767 // =0x7fff188; CHECK-NEXT: ucvtf s0, w9189; CHECK-NEXT: fmov w9, s0190; CHECK-NEXT: ubfx w10, w9, #16, #1191; CHECK-NEXT: add w8, w9, w8192; CHECK-NEXT: add w8, w10, w8193; CHECK-NEXT: lsr w8, w8, #16194; CHECK-NEXT: fmov s0, w8195; CHECK-NEXT: // kill: def $h0 killed $h0 killed $s0196; CHECK-NEXT: ret197entry:198 %c = uitofp i16 %a to bfloat199 ret bfloat %c200}201 202define bfloat @stofp_i8_bf16(i8 %a) {203; CHECK-LABEL: stofp_i8_bf16:204; CHECK: // %bb.0: // %entry205; CHECK-NEXT: sxtb w9, w0206; CHECK-NEXT: mov w8, #32767 // =0x7fff207; CHECK-NEXT: scvtf s0, w9208; CHECK-NEXT: fmov w9, s0209; CHECK-NEXT: ubfx w10, w9, #16, #1210; CHECK-NEXT: add w8, w9, w8211; CHECK-NEXT: add w8, w10, w8212; CHECK-NEXT: lsr w8, w8, #16213; CHECK-NEXT: fmov s0, w8214; CHECK-NEXT: // kill: def $h0 killed $h0 killed $s0215; CHECK-NEXT: ret216entry:217 %c = sitofp i8 %a to bfloat218 ret bfloat %c219}220 221define bfloat @utofp_i8_bf16(i8 %a) {222; CHECK-LABEL: utofp_i8_bf16:223; CHECK: // %bb.0: // %entry224; CHECK-NEXT: and w9, w0, #0xff225; CHECK-NEXT: mov w8, #32767 // =0x7fff226; CHECK-NEXT: ucvtf s0, w9227; CHECK-NEXT: fmov w9, s0228; CHECK-NEXT: ubfx w10, w9, #16, #1229; CHECK-NEXT: add w8, w9, w8230; CHECK-NEXT: add w8, w10, w8231; CHECK-NEXT: lsr w8, w8, #16232; CHECK-NEXT: fmov s0, w8233; CHECK-NEXT: // kill: def $h0 killed $h0 killed $s0234; CHECK-NEXT: ret235entry:236 %c = uitofp i8 %a to bfloat237 ret bfloat %c238}239 240define <2 x bfloat> @stofp_v2i64_v2bf16(<2 x i64> %a) {241; CHECK-LABEL: stofp_v2i64_v2bf16:242; CHECK: // %bb.0: // %entry243; CHECK-NEXT: mov x9, v0.d[1]244; CHECK-NEXT: mov w8, #32767 // =0x7fff245; CHECK-NEXT: cmp x9, #0246; CHECK-NEXT: cneg x10, x9, mi247; CHECK-NEXT: and x9, x9, #0x8000000000000000248; CHECK-NEXT: lsr x11, x10, #53249; CHECK-NEXT: and x12, x10, #0xfffffffffffff000250; CHECK-NEXT: cmp x11, #0251; CHECK-NEXT: csel x11, x12, x10, ne252; CHECK-NEXT: cset w12, ne253; CHECK-NEXT: tst x10, #0xfff254; CHECK-NEXT: fmov x10, d0255; CHECK-NEXT: csel w12, wzr, w12, eq256; CHECK-NEXT: scvtf d0, x11257; CHECK-NEXT: cmp x10, #0258; CHECK-NEXT: cneg x13, x10, mi259; CHECK-NEXT: and x10, x10, #0x8000000000000000260; CHECK-NEXT: lsr x14, x13, #53261; CHECK-NEXT: cmp x14, #0262; CHECK-NEXT: and x14, x13, #0xfffffffffffff000263; CHECK-NEXT: csel x11, x14, x13, ne264; CHECK-NEXT: cset w14, ne265; CHECK-NEXT: tst x13, #0xfff266; CHECK-NEXT: scvtf d1, x11267; CHECK-NEXT: fmov x11, d0268; CHECK-NEXT: orr x9, x11, x9269; CHECK-NEXT: csel w11, wzr, w14, eq270; CHECK-NEXT: fmov x13, d1271; CHECK-NEXT: orr x9, x9, x12272; CHECK-NEXT: fmov d0, x9273; CHECK-NEXT: orr x10, x13, x10274; CHECK-NEXT: orr x10, x10, x11275; CHECK-NEXT: fcvtxn s0, d0276; CHECK-NEXT: fmov d1, x10277; CHECK-NEXT: fcvtxn s1, d1278; CHECK-NEXT: fmov w9, s0279; CHECK-NEXT: ubfx w11, w9, #16, #1280; CHECK-NEXT: add w9, w9, w8281; CHECK-NEXT: fmov w10, s1282; CHECK-NEXT: add w9, w11, w9283; CHECK-NEXT: lsr w9, w9, #16284; CHECK-NEXT: ubfx w12, w10, #16, #1285; CHECK-NEXT: add w8, w10, w8286; CHECK-NEXT: fmov s1, w9287; CHECK-NEXT: add w8, w12, w8288; CHECK-NEXT: lsr w8, w8, #16289; CHECK-NEXT: fmov s0, w8290; CHECK-NEXT: mov v0.h[1], v1.h[0]291; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0292; CHECK-NEXT: ret293entry:294 %c = sitofp <2 x i64> %a to <2 x bfloat>295 ret <2 x bfloat> %c296}297 298define <2 x bfloat> @utofp_v2i64_v2bf16(<2 x i64> %a) {299; CHECK-LABEL: utofp_v2i64_v2bf16:300; CHECK: // %bb.0: // %entry301; CHECK-NEXT: mov x9, v0.d[1]302; CHECK-NEXT: fmov x11, d0303; CHECK-NEXT: mov w8, #32767 // =0x7fff304; CHECK-NEXT: lsr x10, x9, #53305; CHECK-NEXT: and x12, x9, #0xfffffffffffff000306; CHECK-NEXT: cmp x10, #0307; CHECK-NEXT: lsr x10, x11, #53308; CHECK-NEXT: csel x12, x12, x9, ne309; CHECK-NEXT: cset w13, ne310; CHECK-NEXT: tst x9, #0xfff311; CHECK-NEXT: csel w9, wzr, w13, eq312; CHECK-NEXT: cmp x10, #0313; CHECK-NEXT: and x10, x11, #0xfffffffffffff000314; CHECK-NEXT: csel x10, x10, x11, ne315; CHECK-NEXT: ucvtf d0, x12316; CHECK-NEXT: ucvtf d1, x10317; CHECK-NEXT: cset w10, ne318; CHECK-NEXT: tst x11, #0xfff319; CHECK-NEXT: csel w10, wzr, w10, eq320; CHECK-NEXT: fmov x11, d0321; CHECK-NEXT: fmov x12, d1322; CHECK-NEXT: orr x9, x11, x9323; CHECK-NEXT: orr x10, x12, x10324; CHECK-NEXT: fmov d0, x9325; CHECK-NEXT: fmov d1, x10326; CHECK-NEXT: fcvtxn s0, d0327; CHECK-NEXT: fcvtxn s1, d1328; CHECK-NEXT: fmov w9, s0329; CHECK-NEXT: fmov w10, s1330; CHECK-NEXT: ubfx w11, w9, #16, #1331; CHECK-NEXT: add w9, w9, w8332; CHECK-NEXT: ubfx w12, w10, #16, #1333; CHECK-NEXT: add w8, w10, w8334; CHECK-NEXT: add w9, w11, w9335; CHECK-NEXT: add w8, w12, w8336; CHECK-NEXT: lsr w9, w9, #16337; CHECK-NEXT: lsr w8, w8, #16338; CHECK-NEXT: fmov s1, w9339; CHECK-NEXT: fmov s0, w8340; CHECK-NEXT: mov v0.h[1], v1.h[0]341; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0342; CHECK-NEXT: ret343entry:344 %c = uitofp <2 x i64> %a to <2 x bfloat>345 ret <2 x bfloat> %c346}347 348define <3 x bfloat> @stofp_v3i64_v3bf16(<3 x i64> %a) {349; CHECK-LABEL: stofp_v3i64_v3bf16:350; CHECK: // %bb.0: // %entry351; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0352; CHECK-NEXT: fmov x8, d0353; CHECK-NEXT: movi v3.2d, #0000000000000000354; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1355; CHECK-NEXT: // kill: def $d2 killed $d2 def $q2356; CHECK-NEXT: scvtf s0, x8357; CHECK-NEXT: fmov x8, d1358; CHECK-NEXT: scvtf s1, x8359; CHECK-NEXT: fmov x8, d2360; CHECK-NEXT: mov v3.s[0], v0.s[0]361; CHECK-NEXT: scvtf s0, x8362; CHECK-NEXT: mov v3.s[1], v1.s[0]363; CHECK-NEXT: movi v1.4s, #127, msl #8364; CHECK-NEXT: mov v3.s[2], v0.s[0]365; CHECK-NEXT: movi v0.4s, #1366; CHECK-NEXT: ushr v2.4s, v3.4s, #16367; CHECK-NEXT: add v1.4s, v3.4s, v1.4s368; CHECK-NEXT: and v0.16b, v2.16b, v0.16b369; CHECK-NEXT: fcmeq v2.4s, v3.4s, v3.4s370; CHECK-NEXT: orr v3.4s, #64, lsl #16371; CHECK-NEXT: add v0.4s, v0.4s, v1.4s372; CHECK-NEXT: bif v0.16b, v3.16b, v2.16b373; CHECK-NEXT: shrn v0.4h, v0.4s, #16374; CHECK-NEXT: ret375entry:376 %c = sitofp <3 x i64> %a to <3 x bfloat>377 ret <3 x bfloat> %c378}379 380define <3 x bfloat> @utofp_v3i64_v3bf16(<3 x i64> %a) {381; CHECK-LABEL: utofp_v3i64_v3bf16:382; CHECK: // %bb.0: // %entry383; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0384; CHECK-NEXT: fmov x8, d0385; CHECK-NEXT: movi v3.2d, #0000000000000000386; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1387; CHECK-NEXT: // kill: def $d2 killed $d2 def $q2388; CHECK-NEXT: ucvtf s0, x8389; CHECK-NEXT: fmov x8, d1390; CHECK-NEXT: ucvtf s1, x8391; CHECK-NEXT: fmov x8, d2392; CHECK-NEXT: mov v3.s[0], v0.s[0]393; CHECK-NEXT: ucvtf s0, x8394; CHECK-NEXT: mov v3.s[1], v1.s[0]395; CHECK-NEXT: movi v1.4s, #127, msl #8396; CHECK-NEXT: mov v3.s[2], v0.s[0]397; CHECK-NEXT: movi v0.4s, #1398; CHECK-NEXT: ushr v2.4s, v3.4s, #16399; CHECK-NEXT: add v1.4s, v3.4s, v1.4s400; CHECK-NEXT: and v0.16b, v2.16b, v0.16b401; CHECK-NEXT: fcmeq v2.4s, v3.4s, v3.4s402; CHECK-NEXT: orr v3.4s, #64, lsl #16403; CHECK-NEXT: add v0.4s, v0.4s, v1.4s404; CHECK-NEXT: bif v0.16b, v3.16b, v2.16b405; CHECK-NEXT: shrn v0.4h, v0.4s, #16406; CHECK-NEXT: ret407entry:408 %c = uitofp <3 x i64> %a to <3 x bfloat>409 ret <3 x bfloat> %c410}411 412define <4 x bfloat> @stofp_v4i64_v4bf16(<4 x i64> %a) {413; CHECK-LABEL: stofp_v4i64_v4bf16:414; CHECK: // %bb.0: // %entry415; CHECK-NEXT: mov x8, v0.d[1]416; CHECK-NEXT: fmov x9, d0417; CHECK-NEXT: scvtf s2, x9418; CHECK-NEXT: mov x9, v1.d[1]419; CHECK-NEXT: scvtf s0, x8420; CHECK-NEXT: fmov x8, d1421; CHECK-NEXT: scvtf s1, x8422; CHECK-NEXT: mov v2.s[1], v0.s[0]423; CHECK-NEXT: scvtf s0, x9424; CHECK-NEXT: mov v2.s[2], v1.s[0]425; CHECK-NEXT: movi v1.4s, #127, msl #8426; CHECK-NEXT: mov v2.s[3], v0.s[0]427; CHECK-NEXT: movi v0.4s, #1428; CHECK-NEXT: ushr v3.4s, v2.4s, #16429; CHECK-NEXT: add v1.4s, v2.4s, v1.4s430; CHECK-NEXT: and v0.16b, v3.16b, v0.16b431; CHECK-NEXT: fcmeq v3.4s, v2.4s, v2.4s432; CHECK-NEXT: orr v2.4s, #64, lsl #16433; CHECK-NEXT: add v0.4s, v0.4s, v1.4s434; CHECK-NEXT: bif v0.16b, v2.16b, v3.16b435; CHECK-NEXT: shrn v0.4h, v0.4s, #16436; CHECK-NEXT: ret437entry:438 %c = sitofp <4 x i64> %a to <4 x bfloat>439 ret <4 x bfloat> %c440}441 442define <4 x bfloat> @utofp_v4i64_v4bf16(<4 x i64> %a) {443; CHECK-LABEL: utofp_v4i64_v4bf16:444; CHECK: // %bb.0: // %entry445; CHECK-NEXT: mov x8, v0.d[1]446; CHECK-NEXT: fmov x9, d0447; CHECK-NEXT: ucvtf s2, x9448; CHECK-NEXT: mov x9, v1.d[1]449; CHECK-NEXT: ucvtf s0, x8450; CHECK-NEXT: fmov x8, d1451; CHECK-NEXT: ucvtf s1, x8452; CHECK-NEXT: mov v2.s[1], v0.s[0]453; CHECK-NEXT: ucvtf s0, x9454; CHECK-NEXT: mov v2.s[2], v1.s[0]455; CHECK-NEXT: movi v1.4s, #127, msl #8456; CHECK-NEXT: mov v2.s[3], v0.s[0]457; CHECK-NEXT: movi v0.4s, #1458; CHECK-NEXT: ushr v3.4s, v2.4s, #16459; CHECK-NEXT: add v1.4s, v2.4s, v1.4s460; CHECK-NEXT: and v0.16b, v3.16b, v0.16b461; CHECK-NEXT: fcmeq v3.4s, v2.4s, v2.4s462; CHECK-NEXT: orr v2.4s, #64, lsl #16463; CHECK-NEXT: add v0.4s, v0.4s, v1.4s464; CHECK-NEXT: bif v0.16b, v2.16b, v3.16b465; CHECK-NEXT: shrn v0.4h, v0.4s, #16466; CHECK-NEXT: ret467entry:468 %c = uitofp <4 x i64> %a to <4 x bfloat>469 ret <4 x bfloat> %c470}471 472define <8 x bfloat> @stofp_v8i64_v8bf16(<8 x i64> %a) {473; CHECK-LABEL: stofp_v8i64_v8bf16:474; CHECK: // %bb.0: // %entry475; CHECK-NEXT: fmov x10, d2476; CHECK-NEXT: mov x8, v2.d[1]477; CHECK-NEXT: mov x9, v0.d[1]478; CHECK-NEXT: scvtf s2, x10479; CHECK-NEXT: fmov x10, d0480; CHECK-NEXT: scvtf s0, x8481; CHECK-NEXT: scvtf s5, x9482; CHECK-NEXT: fmov x9, d3483; CHECK-NEXT: mov x8, v3.d[1]484; CHECK-NEXT: scvtf s4, x10485; CHECK-NEXT: fmov x10, d1486; CHECK-NEXT: scvtf s3, x9487; CHECK-NEXT: mov x9, v1.d[1]488; CHECK-NEXT: mov v2.s[1], v0.s[0]489; CHECK-NEXT: scvtf s0, x10490; CHECK-NEXT: scvtf s1, x8491; CHECK-NEXT: mov v4.s[1], v5.s[0]492; CHECK-NEXT: mov v2.s[2], v3.s[0]493; CHECK-NEXT: scvtf s3, x9494; CHECK-NEXT: mov v4.s[2], v0.s[0]495; CHECK-NEXT: movi v0.4s, #1496; CHECK-NEXT: mov v2.s[3], v1.s[0]497; CHECK-NEXT: movi v1.4s, #127, msl #8498; CHECK-NEXT: mov v4.s[3], v3.s[0]499; CHECK-NEXT: ushr v3.4s, v2.4s, #16500; CHECK-NEXT: add v6.4s, v2.4s, v1.4s501; CHECK-NEXT: ushr v5.4s, v4.4s, #16502; CHECK-NEXT: add v1.4s, v4.4s, v1.4s503; CHECK-NEXT: and v3.16b, v3.16b, v0.16b504; CHECK-NEXT: and v0.16b, v5.16b, v0.16b505; CHECK-NEXT: fcmeq v5.4s, v2.4s, v2.4s506; CHECK-NEXT: orr v2.4s, #64, lsl #16507; CHECK-NEXT: add v3.4s, v3.4s, v6.4s508; CHECK-NEXT: fcmeq v6.4s, v4.4s, v4.4s509; CHECK-NEXT: orr v4.4s, #64, lsl #16510; CHECK-NEXT: add v0.4s, v0.4s, v1.4s511; CHECK-NEXT: mov v1.16b, v5.16b512; CHECK-NEXT: bif v0.16b, v4.16b, v6.16b513; CHECK-NEXT: bsl v1.16b, v3.16b, v2.16b514; CHECK-NEXT: uzp2 v0.8h, v0.8h, v1.8h515; CHECK-NEXT: ret516entry:517 %c = sitofp <8 x i64> %a to <8 x bfloat>518 ret <8 x bfloat> %c519}520 521define <8 x bfloat> @utofp_v8i64_v8bf16(<8 x i64> %a) {522; CHECK-LABEL: utofp_v8i64_v8bf16:523; CHECK: // %bb.0: // %entry524; CHECK-NEXT: fmov x10, d2525; CHECK-NEXT: mov x8, v2.d[1]526; CHECK-NEXT: mov x9, v0.d[1]527; CHECK-NEXT: ucvtf s2, x10528; CHECK-NEXT: fmov x10, d0529; CHECK-NEXT: ucvtf s0, x8530; CHECK-NEXT: ucvtf s5, x9531; CHECK-NEXT: fmov x9, d3532; CHECK-NEXT: mov x8, v3.d[1]533; CHECK-NEXT: ucvtf s4, x10534; CHECK-NEXT: fmov x10, d1535; CHECK-NEXT: ucvtf s3, x9536; CHECK-NEXT: mov x9, v1.d[1]537; CHECK-NEXT: mov v2.s[1], v0.s[0]538; CHECK-NEXT: ucvtf s0, x10539; CHECK-NEXT: ucvtf s1, x8540; CHECK-NEXT: mov v4.s[1], v5.s[0]541; CHECK-NEXT: mov v2.s[2], v3.s[0]542; CHECK-NEXT: ucvtf s3, x9543; CHECK-NEXT: mov v4.s[2], v0.s[0]544; CHECK-NEXT: movi v0.4s, #1545; CHECK-NEXT: mov v2.s[3], v1.s[0]546; CHECK-NEXT: movi v1.4s, #127, msl #8547; CHECK-NEXT: mov v4.s[3], v3.s[0]548; CHECK-NEXT: ushr v3.4s, v2.4s, #16549; CHECK-NEXT: add v6.4s, v2.4s, v1.4s550; CHECK-NEXT: ushr v5.4s, v4.4s, #16551; CHECK-NEXT: add v1.4s, v4.4s, v1.4s552; CHECK-NEXT: and v3.16b, v3.16b, v0.16b553; CHECK-NEXT: and v0.16b, v5.16b, v0.16b554; CHECK-NEXT: fcmeq v5.4s, v2.4s, v2.4s555; CHECK-NEXT: orr v2.4s, #64, lsl #16556; CHECK-NEXT: add v3.4s, v3.4s, v6.4s557; CHECK-NEXT: fcmeq v6.4s, v4.4s, v4.4s558; CHECK-NEXT: orr v4.4s, #64, lsl #16559; CHECK-NEXT: add v0.4s, v0.4s, v1.4s560; CHECK-NEXT: mov v1.16b, v5.16b561; CHECK-NEXT: bif v0.16b, v4.16b, v6.16b562; CHECK-NEXT: bsl v1.16b, v3.16b, v2.16b563; CHECK-NEXT: uzp2 v0.8h, v0.8h, v1.8h564; CHECK-NEXT: ret565entry:566 %c = uitofp <8 x i64> %a to <8 x bfloat>567 ret <8 x bfloat> %c568}569 570define <16 x bfloat> @stofp_v16i64_v16bf16(<16 x i64> %a) {571; CHECK-LABEL: stofp_v16i64_v16bf16:572; CHECK: // %bb.0: // %entry573; CHECK-NEXT: mov x8, v2.d[1]574; CHECK-NEXT: fmov x11, d0575; CHECK-NEXT: mov x9, v0.d[1]576; CHECK-NEXT: fmov x10, d2577; CHECK-NEXT: mov x12, v6.d[1]578; CHECK-NEXT: scvtf s2, x11579; CHECK-NEXT: fmov x11, d3580; CHECK-NEXT: scvtf s16, x8581; CHECK-NEXT: fmov x8, d6582; CHECK-NEXT: scvtf s0, x10583; CHECK-NEXT: mov x10, v4.d[1]584; CHECK-NEXT: scvtf s17, x9585; CHECK-NEXT: mov x9, v3.d[1]586; CHECK-NEXT: scvtf s6, x12587; CHECK-NEXT: fmov x12, d4588; CHECK-NEXT: scvtf s4, x11589; CHECK-NEXT: scvtf s3, x8590; CHECK-NEXT: fmov x11, d7591; CHECK-NEXT: mov x8, v1.d[1]592; CHECK-NEXT: mov v0.s[1], v16.s[0]593; CHECK-NEXT: scvtf s18, x10594; CHECK-NEXT: scvtf s19, x12595; CHECK-NEXT: fmov x10, d1596; CHECK-NEXT: mov v2.s[1], v17.s[0]597; CHECK-NEXT: mov x12, v5.d[1]598; CHECK-NEXT: mov v3.s[1], v6.s[0]599; CHECK-NEXT: scvtf s6, x11600; CHECK-NEXT: fmov x11, d5601; CHECK-NEXT: scvtf s1, x10602; CHECK-NEXT: mov x10, v7.d[1]603; CHECK-NEXT: scvtf s7, x9604; CHECK-NEXT: mov v19.s[1], v18.s[0]605; CHECK-NEXT: scvtf s16, x8606; CHECK-NEXT: mov v0.s[2], v4.s[0]607; CHECK-NEXT: scvtf s5, x11608; CHECK-NEXT: mov v3.s[2], v6.s[0]609; CHECK-NEXT: scvtf s4, x10610; CHECK-NEXT: mov v2.s[2], v1.s[0]611; CHECK-NEXT: scvtf s1, x12612; CHECK-NEXT: mov v0.s[3], v7.s[0]613; CHECK-NEXT: mov v19.s[2], v5.s[0]614; CHECK-NEXT: mov v2.s[3], v16.s[0]615; CHECK-NEXT: mov v3.s[3], v4.s[0]616; CHECK-NEXT: movi v4.4s, #127, msl #8617; CHECK-NEXT: ushr v5.4s, v0.4s, #16618; CHECK-NEXT: mov v19.s[3], v1.s[0]619; CHECK-NEXT: movi v1.4s, #1620; CHECK-NEXT: ushr v6.4s, v2.4s, #16621; CHECK-NEXT: ushr v7.4s, v3.4s, #16622; CHECK-NEXT: add v17.4s, v0.4s, v4.4s623; CHECK-NEXT: add v18.4s, v2.4s, v4.4s624; CHECK-NEXT: add v20.4s, v3.4s, v4.4s625; CHECK-NEXT: ushr v16.4s, v19.4s, #16626; CHECK-NEXT: and v5.16b, v5.16b, v1.16b627; CHECK-NEXT: add v4.4s, v19.4s, v4.4s628; CHECK-NEXT: and v6.16b, v6.16b, v1.16b629; CHECK-NEXT: and v7.16b, v7.16b, v1.16b630; CHECK-NEXT: and v1.16b, v16.16b, v1.16b631; CHECK-NEXT: add v5.4s, v5.4s, v17.4s632; CHECK-NEXT: fcmeq v16.4s, v0.4s, v0.4s633; CHECK-NEXT: add v6.4s, v6.4s, v18.4s634; CHECK-NEXT: fcmeq v17.4s, v2.4s, v2.4s635; CHECK-NEXT: fcmeq v18.4s, v3.4s, v3.4s636; CHECK-NEXT: orr v0.4s, #64, lsl #16637; CHECK-NEXT: add v7.4s, v7.4s, v20.4s638; CHECK-NEXT: orr v2.4s, #64, lsl #16639; CHECK-NEXT: add v1.4s, v1.4s, v4.4s640; CHECK-NEXT: fcmeq v4.4s, v19.4s, v19.4s641; CHECK-NEXT: orr v3.4s, #64, lsl #16642; CHECK-NEXT: orr v19.4s, #64, lsl #16643; CHECK-NEXT: bit v0.16b, v5.16b, v16.16b644; CHECK-NEXT: bit v2.16b, v6.16b, v17.16b645; CHECK-NEXT: bit v3.16b, v7.16b, v18.16b646; CHECK-NEXT: bif v1.16b, v19.16b, v4.16b647; CHECK-NEXT: uzp2 v0.8h, v2.8h, v0.8h648; CHECK-NEXT: uzp2 v1.8h, v1.8h, v3.8h649; CHECK-NEXT: ret650entry:651 %c = sitofp <16 x i64> %a to <16 x bfloat>652 ret <16 x bfloat> %c653}654 655define <16 x bfloat> @utofp_v16i64_v16bf16(<16 x i64> %a) {656; CHECK-LABEL: utofp_v16i64_v16bf16:657; CHECK: // %bb.0: // %entry658; CHECK-NEXT: mov x8, v2.d[1]659; CHECK-NEXT: fmov x11, d0660; CHECK-NEXT: mov x9, v0.d[1]661; CHECK-NEXT: fmov x10, d2662; CHECK-NEXT: mov x12, v6.d[1]663; CHECK-NEXT: ucvtf s2, x11664; CHECK-NEXT: fmov x11, d3665; CHECK-NEXT: ucvtf s16, x8666; CHECK-NEXT: fmov x8, d6667; CHECK-NEXT: ucvtf s0, x10668; CHECK-NEXT: mov x10, v4.d[1]669; CHECK-NEXT: ucvtf s17, x9670; CHECK-NEXT: mov x9, v3.d[1]671; CHECK-NEXT: ucvtf s6, x12672; CHECK-NEXT: fmov x12, d4673; CHECK-NEXT: ucvtf s4, x11674; CHECK-NEXT: ucvtf s3, x8675; CHECK-NEXT: fmov x11, d7676; CHECK-NEXT: mov x8, v1.d[1]677; CHECK-NEXT: mov v0.s[1], v16.s[0]678; CHECK-NEXT: ucvtf s18, x10679; CHECK-NEXT: ucvtf s19, x12680; CHECK-NEXT: fmov x10, d1681; CHECK-NEXT: mov v2.s[1], v17.s[0]682; CHECK-NEXT: mov x12, v5.d[1]683; CHECK-NEXT: mov v3.s[1], v6.s[0]684; CHECK-NEXT: ucvtf s6, x11685; CHECK-NEXT: fmov x11, d5686; CHECK-NEXT: ucvtf s1, x10687; CHECK-NEXT: mov x10, v7.d[1]688; CHECK-NEXT: ucvtf s7, x9689; CHECK-NEXT: mov v19.s[1], v18.s[0]690; CHECK-NEXT: ucvtf s16, x8691; CHECK-NEXT: mov v0.s[2], v4.s[0]692; CHECK-NEXT: ucvtf s5, x11693; CHECK-NEXT: mov v3.s[2], v6.s[0]694; CHECK-NEXT: ucvtf s4, x10695; CHECK-NEXT: mov v2.s[2], v1.s[0]696; CHECK-NEXT: ucvtf s1, x12697; CHECK-NEXT: mov v0.s[3], v7.s[0]698; CHECK-NEXT: mov v19.s[2], v5.s[0]699; CHECK-NEXT: mov v2.s[3], v16.s[0]700; CHECK-NEXT: mov v3.s[3], v4.s[0]701; CHECK-NEXT: movi v4.4s, #127, msl #8702; CHECK-NEXT: ushr v5.4s, v0.4s, #16703; CHECK-NEXT: mov v19.s[3], v1.s[0]704; CHECK-NEXT: movi v1.4s, #1705; CHECK-NEXT: ushr v6.4s, v2.4s, #16706; CHECK-NEXT: ushr v7.4s, v3.4s, #16707; CHECK-NEXT: add v17.4s, v0.4s, v4.4s708; CHECK-NEXT: add v18.4s, v2.4s, v4.4s709; CHECK-NEXT: add v20.4s, v3.4s, v4.4s710; CHECK-NEXT: ushr v16.4s, v19.4s, #16711; CHECK-NEXT: and v5.16b, v5.16b, v1.16b712; CHECK-NEXT: add v4.4s, v19.4s, v4.4s713; CHECK-NEXT: and v6.16b, v6.16b, v1.16b714; CHECK-NEXT: and v7.16b, v7.16b, v1.16b715; CHECK-NEXT: and v1.16b, v16.16b, v1.16b716; CHECK-NEXT: add v5.4s, v5.4s, v17.4s717; CHECK-NEXT: fcmeq v16.4s, v0.4s, v0.4s718; CHECK-NEXT: add v6.4s, v6.4s, v18.4s719; CHECK-NEXT: fcmeq v17.4s, v2.4s, v2.4s720; CHECK-NEXT: fcmeq v18.4s, v3.4s, v3.4s721; CHECK-NEXT: orr v0.4s, #64, lsl #16722; CHECK-NEXT: add v7.4s, v7.4s, v20.4s723; CHECK-NEXT: orr v2.4s, #64, lsl #16724; CHECK-NEXT: add v1.4s, v1.4s, v4.4s725; CHECK-NEXT: fcmeq v4.4s, v19.4s, v19.4s726; CHECK-NEXT: orr v3.4s, #64, lsl #16727; CHECK-NEXT: orr v19.4s, #64, lsl #16728; CHECK-NEXT: bit v0.16b, v5.16b, v16.16b729; CHECK-NEXT: bit v2.16b, v6.16b, v17.16b730; CHECK-NEXT: bit v3.16b, v7.16b, v18.16b731; CHECK-NEXT: bif v1.16b, v19.16b, v4.16b732; CHECK-NEXT: uzp2 v0.8h, v2.8h, v0.8h733; CHECK-NEXT: uzp2 v1.8h, v1.8h, v3.8h734; CHECK-NEXT: ret735entry:736 %c = uitofp <16 x i64> %a to <16 x bfloat>737 ret <16 x bfloat> %c738}739 740define <32 x bfloat> @stofp_v32i64_v32bf16(<32 x i64> %a) {741; CHECK-LABEL: stofp_v32i64_v32bf16:742; CHECK: // %bb.0: // %entry743; CHECK-NEXT: ldp x8, x9, [sp, #32]744; CHECK-NEXT: mov x13, v2.d[1]745; CHECK-NEXT: ldp x10, x12, [sp, #96]746; CHECK-NEXT: fmov x14, d3747; CHECK-NEXT: movi v17.4s, #1748; CHECK-NEXT: scvtf s18, x9749; CHECK-NEXT: scvtf s16, x8750; CHECK-NEXT: ldp x8, x9, [sp, #48]751; CHECK-NEXT: scvtf s23, x12752; CHECK-NEXT: scvtf s20, x10753; CHECK-NEXT: mov x10, v0.d[1]754; CHECK-NEXT: scvtf s27, x13755; CHECK-NEXT: scvtf s21, x8756; CHECK-NEXT: ldp x8, x11, [sp]757; CHECK-NEXT: mov v16.s[1], v18.s[0]758; CHECK-NEXT: scvtf s24, x9759; CHECK-NEXT: movi v18.4s, #127, msl #8760; CHECK-NEXT: mov v20.s[1], v23.s[0]761; CHECK-NEXT: scvtf s22, x11762; CHECK-NEXT: ldp x11, x12, [sp, #16]763; CHECK-NEXT: scvtf s19, x8764; CHECK-NEXT: mov x8, v3.d[1]765; CHECK-NEXT: mov v16.s[2], v21.s[0]766; CHECK-NEXT: scvtf s25, x11767; CHECK-NEXT: ldp x9, x11, [sp, #112]768; CHECK-NEXT: mov v19.s[1], v22.s[0]769; CHECK-NEXT: scvtf s22, x12770; CHECK-NEXT: scvtf s26, x9771; CHECK-NEXT: ldp x9, x12, [sp, #64]772; CHECK-NEXT: scvtf s23, x11773; CHECK-NEXT: mov v16.s[3], v24.s[0]774; CHECK-NEXT: fmov x11, d2775; CHECK-NEXT: scvtf s24, x12776; CHECK-NEXT: scvtf s2, x9777; CHECK-NEXT: mov x9, v6.d[1]778; CHECK-NEXT: ldp x12, x13, [sp, #80]779; CHECK-NEXT: scvtf s21, x11780; CHECK-NEXT: mov x11, v4.d[1]781; CHECK-NEXT: mov v19.s[2], v25.s[0]782; CHECK-NEXT: mov v20.s[2], v26.s[0]783; CHECK-NEXT: ushr v25.4s, v16.4s, #16784; CHECK-NEXT: scvtf s26, x14785; CHECK-NEXT: scvtf s3, x12786; CHECK-NEXT: mov v2.s[1], v24.s[0]787; CHECK-NEXT: scvtf s24, x10788; CHECK-NEXT: fmov x10, d6789; CHECK-NEXT: fmov x12, d0790; CHECK-NEXT: scvtf s6, x9791; CHECK-NEXT: mov v21.s[1], v27.s[0]792; CHECK-NEXT: scvtf s27, x11793; CHECK-NEXT: fmov x11, d7794; CHECK-NEXT: mov v19.s[3], v22.s[0]795; CHECK-NEXT: mov v20.s[3], v23.s[0]796; CHECK-NEXT: add v22.4s, v16.4s, v18.4s797; CHECK-NEXT: mov v2.s[2], v3.s[0]798; CHECK-NEXT: scvtf s3, x10799; CHECK-NEXT: fmov x10, d4800; CHECK-NEXT: scvtf s0, x12801; CHECK-NEXT: and v23.16b, v25.16b, v17.16b802; CHECK-NEXT: mov x9, v1.d[1]803; CHECK-NEXT: fmov x12, d5804; CHECK-NEXT: mov v21.s[2], v26.s[0]805; CHECK-NEXT: scvtf s25, x13806; CHECK-NEXT: scvtf s4, x10807; CHECK-NEXT: fmov x10, d1808; CHECK-NEXT: add v26.4s, v20.4s, v18.4s809; CHECK-NEXT: mov v3.s[1], v6.s[0]810; CHECK-NEXT: scvtf s6, x11811; CHECK-NEXT: mov x11, v5.d[1]812; CHECK-NEXT: scvtf s5, x8813; CHECK-NEXT: mov v0.s[1], v24.s[0]814; CHECK-NEXT: add v22.4s, v23.4s, v22.4s815; CHECK-NEXT: scvtf s1, x10816; CHECK-NEXT: mov x10, v7.d[1]817; CHECK-NEXT: scvtf s7, x12818; CHECK-NEXT: mov v4.s[1], v27.s[0]819; CHECK-NEXT: ushr v23.4s, v19.4s, #16820; CHECK-NEXT: mov v2.s[3], v25.s[0]821; CHECK-NEXT: mov v3.s[2], v6.s[0]822; CHECK-NEXT: add v25.4s, v19.4s, v18.4s823; CHECK-NEXT: ushr v24.4s, v20.4s, #16824; CHECK-NEXT: mov v21.s[3], v5.s[0]825; CHECK-NEXT: scvtf s5, x11826; CHECK-NEXT: fcmeq v29.4s, v20.4s, v20.4s827; CHECK-NEXT: scvtf s6, x10828; CHECK-NEXT: and v23.16b, v23.16b, v17.16b829; CHECK-NEXT: mov v0.s[2], v1.s[0]830; CHECK-NEXT: scvtf s1, x9831; CHECK-NEXT: mov v4.s[2], v7.s[0]832; CHECK-NEXT: and v24.16b, v24.16b, v17.16b833; CHECK-NEXT: fcmeq v7.4s, v16.4s, v16.4s834; CHECK-NEXT: orr v16.4s, #64, lsl #16835; CHECK-NEXT: fcmeq v31.4s, v2.4s, v2.4s836; CHECK-NEXT: add v27.4s, v21.4s, v18.4s837; CHECK-NEXT: orr v20.4s, #64, lsl #16838; CHECK-NEXT: mov v3.s[3], v6.s[0]839; CHECK-NEXT: add v6.4s, v23.4s, v25.4s840; CHECK-NEXT: ushr v23.4s, v21.4s, #16841; CHECK-NEXT: mov v0.s[3], v1.s[0]842; CHECK-NEXT: mov v4.s[3], v5.s[0]843; CHECK-NEXT: ushr v1.4s, v2.4s, #16844; CHECK-NEXT: add v24.4s, v24.4s, v26.4s845; CHECK-NEXT: add v25.4s, v2.4s, v18.4s846; CHECK-NEXT: fcmeq v5.4s, v19.4s, v19.4s847; CHECK-NEXT: and v23.16b, v23.16b, v17.16b848; CHECK-NEXT: orr v19.4s, #64, lsl #16849; CHECK-NEXT: orr v2.4s, #64, lsl #16850; CHECK-NEXT: ushr v28.4s, v3.4s, #16851; CHECK-NEXT: and v1.16b, v1.16b, v17.16b852; CHECK-NEXT: bsl v7.16b, v22.16b, v16.16b853; CHECK-NEXT: ushr v26.4s, v0.4s, #16854; CHECK-NEXT: ushr v30.4s, v4.4s, #16855; CHECK-NEXT: add v23.4s, v23.4s, v27.4s856; CHECK-NEXT: bsl v5.16b, v6.16b, v19.16b857; CHECK-NEXT: mov v6.16b, v29.16b858; CHECK-NEXT: and v27.16b, v28.16b, v17.16b859; CHECK-NEXT: add v28.4s, v3.4s, v18.4s860; CHECK-NEXT: add v1.4s, v1.4s, v25.4s861; CHECK-NEXT: and v25.16b, v26.16b, v17.16b862; CHECK-NEXT: add v26.4s, v0.4s, v18.4s863; CHECK-NEXT: and v17.16b, v30.16b, v17.16b864; CHECK-NEXT: add v18.4s, v4.4s, v18.4s865; CHECK-NEXT: fcmeq v30.4s, v21.4s, v21.4s866; CHECK-NEXT: orr v21.4s, #64, lsl #16867; CHECK-NEXT: add v27.4s, v27.4s, v28.4s868; CHECK-NEXT: fcmeq v28.4s, v3.4s, v3.4s869; CHECK-NEXT: orr v3.4s, #64, lsl #16870; CHECK-NEXT: add v25.4s, v25.4s, v26.4s871; CHECK-NEXT: fcmeq v26.4s, v0.4s, v0.4s872; CHECK-NEXT: orr v0.4s, #64, lsl #16873; CHECK-NEXT: add v17.4s, v17.4s, v18.4s874; CHECK-NEXT: fcmeq v18.4s, v4.4s, v4.4s875; CHECK-NEXT: orr v4.4s, #64, lsl #16876; CHECK-NEXT: mov v16.16b, v30.16b877; CHECK-NEXT: bsl v6.16b, v24.16b, v20.16b878; CHECK-NEXT: bif v1.16b, v2.16b, v31.16b879; CHECK-NEXT: mov v19.16b, v28.16b880; CHECK-NEXT: uzp2 v2.8h, v5.8h, v7.8h881; CHECK-NEXT: bit v0.16b, v25.16b, v26.16b882; CHECK-NEXT: bsl v16.16b, v23.16b, v21.16b883; CHECK-NEXT: bit v4.16b, v17.16b, v18.16b884; CHECK-NEXT: bsl v19.16b, v27.16b, v3.16b885; CHECK-NEXT: uzp2 v3.8h, v1.8h, v6.8h886; CHECK-NEXT: uzp2 v0.8h, v0.8h, v16.8h887; CHECK-NEXT: uzp2 v1.8h, v4.8h, v19.8h888; CHECK-NEXT: ret889entry:890 %c = sitofp <32 x i64> %a to <32 x bfloat>891 ret <32 x bfloat> %c892}893 894define <32 x bfloat> @utofp_v32i64_v32bf16(<32 x i64> %a) {895; CHECK-LABEL: utofp_v32i64_v32bf16:896; CHECK: // %bb.0: // %entry897; CHECK-NEXT: ldp x8, x9, [sp, #32]898; CHECK-NEXT: mov x13, v2.d[1]899; CHECK-NEXT: ldp x10, x12, [sp, #96]900; CHECK-NEXT: fmov x14, d3901; CHECK-NEXT: movi v17.4s, #1902; CHECK-NEXT: ucvtf s18, x9903; CHECK-NEXT: ucvtf s16, x8904; CHECK-NEXT: ldp x8, x9, [sp, #48]905; CHECK-NEXT: ucvtf s23, x12906; CHECK-NEXT: ucvtf s20, x10907; CHECK-NEXT: mov x10, v0.d[1]908; CHECK-NEXT: ucvtf s27, x13909; CHECK-NEXT: ucvtf s21, x8910; CHECK-NEXT: ldp x8, x11, [sp]911; CHECK-NEXT: mov v16.s[1], v18.s[0]912; CHECK-NEXT: ucvtf s24, x9913; CHECK-NEXT: movi v18.4s, #127, msl #8914; CHECK-NEXT: mov v20.s[1], v23.s[0]915; CHECK-NEXT: ucvtf s22, x11916; CHECK-NEXT: ldp x11, x12, [sp, #16]917; CHECK-NEXT: ucvtf s19, x8918; CHECK-NEXT: mov x8, v3.d[1]919; CHECK-NEXT: mov v16.s[2], v21.s[0]920; CHECK-NEXT: ucvtf s25, x11921; CHECK-NEXT: ldp x9, x11, [sp, #112]922; CHECK-NEXT: mov v19.s[1], v22.s[0]923; CHECK-NEXT: ucvtf s22, x12924; CHECK-NEXT: ucvtf s26, x9925; CHECK-NEXT: ldp x9, x12, [sp, #64]926; CHECK-NEXT: ucvtf s23, x11927; CHECK-NEXT: mov v16.s[3], v24.s[0]928; CHECK-NEXT: fmov x11, d2929; CHECK-NEXT: ucvtf s24, x12930; CHECK-NEXT: ucvtf s2, x9931; CHECK-NEXT: mov x9, v6.d[1]932; CHECK-NEXT: ldp x12, x13, [sp, #80]933; CHECK-NEXT: ucvtf s21, x11934; CHECK-NEXT: mov x11, v4.d[1]935; CHECK-NEXT: mov v19.s[2], v25.s[0]936; CHECK-NEXT: mov v20.s[2], v26.s[0]937; CHECK-NEXT: ushr v25.4s, v16.4s, #16938; CHECK-NEXT: ucvtf s26, x14939; CHECK-NEXT: ucvtf s3, x12940; CHECK-NEXT: mov v2.s[1], v24.s[0]941; CHECK-NEXT: ucvtf s24, x10942; CHECK-NEXT: fmov x10, d6943; CHECK-NEXT: fmov x12, d0944; CHECK-NEXT: ucvtf s6, x9945; CHECK-NEXT: mov v21.s[1], v27.s[0]946; CHECK-NEXT: ucvtf s27, x11947; CHECK-NEXT: fmov x11, d7948; CHECK-NEXT: mov v19.s[3], v22.s[0]949; CHECK-NEXT: mov v20.s[3], v23.s[0]950; CHECK-NEXT: add v22.4s, v16.4s, v18.4s951; CHECK-NEXT: mov v2.s[2], v3.s[0]952; CHECK-NEXT: ucvtf s3, x10953; CHECK-NEXT: fmov x10, d4954; CHECK-NEXT: ucvtf s0, x12955; CHECK-NEXT: and v23.16b, v25.16b, v17.16b956; CHECK-NEXT: mov x9, v1.d[1]957; CHECK-NEXT: fmov x12, d5958; CHECK-NEXT: mov v21.s[2], v26.s[0]959; CHECK-NEXT: ucvtf s25, x13960; CHECK-NEXT: ucvtf s4, x10961; CHECK-NEXT: fmov x10, d1962; CHECK-NEXT: add v26.4s, v20.4s, v18.4s963; CHECK-NEXT: mov v3.s[1], v6.s[0]964; CHECK-NEXT: ucvtf s6, x11965; CHECK-NEXT: mov x11, v5.d[1]966; CHECK-NEXT: ucvtf s5, x8967; CHECK-NEXT: mov v0.s[1], v24.s[0]968; CHECK-NEXT: add v22.4s, v23.4s, v22.4s969; CHECK-NEXT: ucvtf s1, x10970; CHECK-NEXT: mov x10, v7.d[1]971; CHECK-NEXT: ucvtf s7, x12972; CHECK-NEXT: mov v4.s[1], v27.s[0]973; CHECK-NEXT: ushr v23.4s, v19.4s, #16974; CHECK-NEXT: mov v2.s[3], v25.s[0]975; CHECK-NEXT: mov v3.s[2], v6.s[0]976; CHECK-NEXT: add v25.4s, v19.4s, v18.4s977; CHECK-NEXT: ushr v24.4s, v20.4s, #16978; CHECK-NEXT: mov v21.s[3], v5.s[0]979; CHECK-NEXT: ucvtf s5, x11980; CHECK-NEXT: fcmeq v29.4s, v20.4s, v20.4s981; CHECK-NEXT: ucvtf s6, x10982; CHECK-NEXT: and v23.16b, v23.16b, v17.16b983; CHECK-NEXT: mov v0.s[2], v1.s[0]984; CHECK-NEXT: ucvtf s1, x9985; CHECK-NEXT: mov v4.s[2], v7.s[0]986; CHECK-NEXT: and v24.16b, v24.16b, v17.16b987; CHECK-NEXT: fcmeq v7.4s, v16.4s, v16.4s988; CHECK-NEXT: orr v16.4s, #64, lsl #16989; CHECK-NEXT: fcmeq v31.4s, v2.4s, v2.4s990; CHECK-NEXT: add v27.4s, v21.4s, v18.4s991; CHECK-NEXT: orr v20.4s, #64, lsl #16992; CHECK-NEXT: mov v3.s[3], v6.s[0]993; CHECK-NEXT: add v6.4s, v23.4s, v25.4s994; CHECK-NEXT: ushr v23.4s, v21.4s, #16995; CHECK-NEXT: mov v0.s[3], v1.s[0]996; CHECK-NEXT: mov v4.s[3], v5.s[0]997; CHECK-NEXT: ushr v1.4s, v2.4s, #16998; CHECK-NEXT: add v24.4s, v24.4s, v26.4s999; CHECK-NEXT: add v25.4s, v2.4s, v18.4s1000; CHECK-NEXT: fcmeq v5.4s, v19.4s, v19.4s1001; CHECK-NEXT: and v23.16b, v23.16b, v17.16b1002; CHECK-NEXT: orr v19.4s, #64, lsl #161003; CHECK-NEXT: orr v2.4s, #64, lsl #161004; CHECK-NEXT: ushr v28.4s, v3.4s, #161005; CHECK-NEXT: and v1.16b, v1.16b, v17.16b1006; CHECK-NEXT: bsl v7.16b, v22.16b, v16.16b1007; CHECK-NEXT: ushr v26.4s, v0.4s, #161008; CHECK-NEXT: ushr v30.4s, v4.4s, #161009; CHECK-NEXT: add v23.4s, v23.4s, v27.4s1010; CHECK-NEXT: bsl v5.16b, v6.16b, v19.16b1011; CHECK-NEXT: mov v6.16b, v29.16b1012; CHECK-NEXT: and v27.16b, v28.16b, v17.16b1013; CHECK-NEXT: add v28.4s, v3.4s, v18.4s1014; CHECK-NEXT: add v1.4s, v1.4s, v25.4s1015; CHECK-NEXT: and v25.16b, v26.16b, v17.16b1016; CHECK-NEXT: add v26.4s, v0.4s, v18.4s1017; CHECK-NEXT: and v17.16b, v30.16b, v17.16b1018; CHECK-NEXT: add v18.4s, v4.4s, v18.4s1019; CHECK-NEXT: fcmeq v30.4s, v21.4s, v21.4s1020; CHECK-NEXT: orr v21.4s, #64, lsl #161021; CHECK-NEXT: add v27.4s, v27.4s, v28.4s1022; CHECK-NEXT: fcmeq v28.4s, v3.4s, v3.4s1023; CHECK-NEXT: orr v3.4s, #64, lsl #161024; CHECK-NEXT: add v25.4s, v25.4s, v26.4s1025; CHECK-NEXT: fcmeq v26.4s, v0.4s, v0.4s1026; CHECK-NEXT: orr v0.4s, #64, lsl #161027; CHECK-NEXT: add v17.4s, v17.4s, v18.4s1028; CHECK-NEXT: fcmeq v18.4s, v4.4s, v4.4s1029; CHECK-NEXT: orr v4.4s, #64, lsl #161030; CHECK-NEXT: mov v16.16b, v30.16b1031; CHECK-NEXT: bsl v6.16b, v24.16b, v20.16b1032; CHECK-NEXT: bif v1.16b, v2.16b, v31.16b1033; CHECK-NEXT: mov v19.16b, v28.16b1034; CHECK-NEXT: uzp2 v2.8h, v5.8h, v7.8h1035; CHECK-NEXT: bit v0.16b, v25.16b, v26.16b1036; CHECK-NEXT: bsl v16.16b, v23.16b, v21.16b1037; CHECK-NEXT: bit v4.16b, v17.16b, v18.16b1038; CHECK-NEXT: bsl v19.16b, v27.16b, v3.16b1039; CHECK-NEXT: uzp2 v3.8h, v1.8h, v6.8h1040; CHECK-NEXT: uzp2 v0.8h, v0.8h, v16.8h1041; CHECK-NEXT: uzp2 v1.8h, v4.8h, v19.8h1042; CHECK-NEXT: ret1043entry:1044 %c = uitofp <32 x i64> %a to <32 x bfloat>1045 ret <32 x bfloat> %c1046}1047 1048define <2 x bfloat> @stofp_v2i32_v2bf16(<2 x i32> %a) {1049; CHECK-LABEL: stofp_v2i32_v2bf16:1050; CHECK: // %bb.0: // %entry1051; CHECK-NEXT: // kill: def $d0 killed $d0 def $q01052; CHECK-NEXT: movi v1.4s, #11053; CHECK-NEXT: scvtf v0.4s, v0.4s1054; CHECK-NEXT: ushr v2.4s, v0.4s, #161055; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1056; CHECK-NEXT: movi v2.4s, #127, msl #81057; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1058; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1059; CHECK-NEXT: ret1060entry:1061 %c = sitofp <2 x i32> %a to <2 x bfloat>1062 ret <2 x bfloat> %c1063}1064 1065define <2 x bfloat> @utofp_v2i32_v2bf16(<2 x i32> %a) {1066; CHECK-LABEL: utofp_v2i32_v2bf16:1067; CHECK: // %bb.0: // %entry1068; CHECK-NEXT: // kill: def $d0 killed $d0 def $q01069; CHECK-NEXT: movi v1.4s, #11070; CHECK-NEXT: ucvtf v0.4s, v0.4s1071; CHECK-NEXT: ushr v2.4s, v0.4s, #161072; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1073; CHECK-NEXT: movi v2.4s, #127, msl #81074; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1075; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1076; CHECK-NEXT: ret1077entry:1078 %c = uitofp <2 x i32> %a to <2 x bfloat>1079 ret <2 x bfloat> %c1080}1081 1082define <3 x bfloat> @stofp_v3i32_v3bf16(<3 x i32> %a) {1083; CHECK-LABEL: stofp_v3i32_v3bf16:1084; CHECK: // %bb.0: // %entry1085; CHECK-NEXT: scvtf v0.4s, v0.4s1086; CHECK-NEXT: movi v1.4s, #11087; CHECK-NEXT: ushr v2.4s, v0.4s, #161088; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1089; CHECK-NEXT: movi v2.4s, #127, msl #81090; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1091; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1092; CHECK-NEXT: ret1093entry:1094 %c = sitofp <3 x i32> %a to <3 x bfloat>1095 ret <3 x bfloat> %c1096}1097 1098define <3 x bfloat> @utofp_v3i32_v3bf16(<3 x i32> %a) {1099; CHECK-LABEL: utofp_v3i32_v3bf16:1100; CHECK: // %bb.0: // %entry1101; CHECK-NEXT: ucvtf v0.4s, v0.4s1102; CHECK-NEXT: movi v1.4s, #11103; CHECK-NEXT: ushr v2.4s, v0.4s, #161104; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1105; CHECK-NEXT: movi v2.4s, #127, msl #81106; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1107; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1108; CHECK-NEXT: ret1109entry:1110 %c = uitofp <3 x i32> %a to <3 x bfloat>1111 ret <3 x bfloat> %c1112}1113 1114define <4 x bfloat> @stofp_v4i32_v4bf16(<4 x i32> %a) {1115; CHECK-LABEL: stofp_v4i32_v4bf16:1116; CHECK: // %bb.0: // %entry1117; CHECK-NEXT: scvtf v0.4s, v0.4s1118; CHECK-NEXT: movi v1.4s, #11119; CHECK-NEXT: ushr v2.4s, v0.4s, #161120; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1121; CHECK-NEXT: movi v2.4s, #127, msl #81122; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1123; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1124; CHECK-NEXT: ret1125entry:1126 %c = sitofp <4 x i32> %a to <4 x bfloat>1127 ret <4 x bfloat> %c1128}1129 1130define <4 x bfloat> @utofp_v4i32_v4bf16(<4 x i32> %a) {1131; CHECK-LABEL: utofp_v4i32_v4bf16:1132; CHECK: // %bb.0: // %entry1133; CHECK-NEXT: ucvtf v0.4s, v0.4s1134; CHECK-NEXT: movi v1.4s, #11135; CHECK-NEXT: ushr v2.4s, v0.4s, #161136; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1137; CHECK-NEXT: movi v2.4s, #127, msl #81138; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1139; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1140; CHECK-NEXT: ret1141entry:1142 %c = uitofp <4 x i32> %a to <4 x bfloat>1143 ret <4 x bfloat> %c1144}1145 1146define <8 x bfloat> @stofp_v8i32_v8bf16(<8 x i32> %a) {1147; CHECK-LABEL: stofp_v8i32_v8bf16:1148; CHECK: // %bb.0: // %entry1149; CHECK-NEXT: scvtf v0.4s, v0.4s1150; CHECK-NEXT: movi v2.4s, #11151; CHECK-NEXT: scvtf v1.4s, v1.4s1152; CHECK-NEXT: movi v5.4s, #127, msl #81153; CHECK-NEXT: ushr v3.4s, v0.4s, #161154; CHECK-NEXT: ushr v4.4s, v1.4s, #161155; CHECK-NEXT: and v3.16b, v3.16b, v2.16b1156; CHECK-NEXT: and v2.16b, v4.16b, v2.16b1157; CHECK-NEXT: add v0.4s, v3.4s, v0.4s1158; CHECK-NEXT: add v1.4s, v2.4s, v1.4s1159; CHECK-NEXT: addhn v0.4h, v0.4s, v5.4s1160; CHECK-NEXT: addhn2 v0.8h, v1.4s, v5.4s1161; CHECK-NEXT: ret1162entry:1163 %c = sitofp <8 x i32> %a to <8 x bfloat>1164 ret <8 x bfloat> %c1165}1166 1167define <8 x bfloat> @utofp_v8i32_v8bf16(<8 x i32> %a) {1168; CHECK-LABEL: utofp_v8i32_v8bf16:1169; CHECK: // %bb.0: // %entry1170; CHECK-NEXT: ucvtf v0.4s, v0.4s1171; CHECK-NEXT: movi v2.4s, #11172; CHECK-NEXT: ucvtf v1.4s, v1.4s1173; CHECK-NEXT: movi v5.4s, #127, msl #81174; CHECK-NEXT: ushr v3.4s, v0.4s, #161175; CHECK-NEXT: ushr v4.4s, v1.4s, #161176; CHECK-NEXT: and v3.16b, v3.16b, v2.16b1177; CHECK-NEXT: and v2.16b, v4.16b, v2.16b1178; CHECK-NEXT: add v0.4s, v3.4s, v0.4s1179; CHECK-NEXT: add v1.4s, v2.4s, v1.4s1180; CHECK-NEXT: addhn v0.4h, v0.4s, v5.4s1181; CHECK-NEXT: addhn2 v0.8h, v1.4s, v5.4s1182; CHECK-NEXT: ret1183entry:1184 %c = uitofp <8 x i32> %a to <8 x bfloat>1185 ret <8 x bfloat> %c1186}1187 1188define <16 x bfloat> @stofp_v16i32_v16bf16(<16 x i32> %a) {1189; CHECK-LABEL: stofp_v16i32_v16bf16:1190; CHECK: // %bb.0: // %entry1191; CHECK-NEXT: scvtf v2.4s, v2.4s1192; CHECK-NEXT: scvtf v0.4s, v0.4s1193; CHECK-NEXT: scvtf v4.4s, v1.4s1194; CHECK-NEXT: movi v1.4s, #11195; CHECK-NEXT: scvtf v3.4s, v3.4s1196; CHECK-NEXT: movi v17.4s, #127, msl #81197; CHECK-NEXT: ushr v5.4s, v0.4s, #161198; CHECK-NEXT: ushr v6.4s, v2.4s, #161199; CHECK-NEXT: ushr v7.4s, v4.4s, #161200; CHECK-NEXT: ushr v16.4s, v3.4s, #161201; CHECK-NEXT: and v5.16b, v5.16b, v1.16b1202; CHECK-NEXT: and v6.16b, v6.16b, v1.16b1203; CHECK-NEXT: add v0.4s, v5.4s, v0.4s1204; CHECK-NEXT: add v2.4s, v6.4s, v2.4s1205; CHECK-NEXT: and v5.16b, v7.16b, v1.16b1206; CHECK-NEXT: and v6.16b, v16.16b, v1.16b1207; CHECK-NEXT: addhn v0.4h, v0.4s, v17.4s1208; CHECK-NEXT: addhn v1.4h, v2.4s, v17.4s1209; CHECK-NEXT: add v2.4s, v5.4s, v4.4s1210; CHECK-NEXT: add v3.4s, v6.4s, v3.4s1211; CHECK-NEXT: addhn2 v0.8h, v2.4s, v17.4s1212; CHECK-NEXT: addhn2 v1.8h, v3.4s, v17.4s1213; CHECK-NEXT: ret1214entry:1215 %c = sitofp <16 x i32> %a to <16 x bfloat>1216 ret <16 x bfloat> %c1217}1218 1219define <16 x bfloat> @utofp_v16i32_v16bf16(<16 x i32> %a) {1220; CHECK-LABEL: utofp_v16i32_v16bf16:1221; CHECK: // %bb.0: // %entry1222; CHECK-NEXT: ucvtf v2.4s, v2.4s1223; CHECK-NEXT: ucvtf v0.4s, v0.4s1224; CHECK-NEXT: ucvtf v4.4s, v1.4s1225; CHECK-NEXT: movi v1.4s, #11226; CHECK-NEXT: ucvtf v3.4s, v3.4s1227; CHECK-NEXT: movi v17.4s, #127, msl #81228; CHECK-NEXT: ushr v5.4s, v0.4s, #161229; CHECK-NEXT: ushr v6.4s, v2.4s, #161230; CHECK-NEXT: ushr v7.4s, v4.4s, #161231; CHECK-NEXT: ushr v16.4s, v3.4s, #161232; CHECK-NEXT: and v5.16b, v5.16b, v1.16b1233; CHECK-NEXT: and v6.16b, v6.16b, v1.16b1234; CHECK-NEXT: add v0.4s, v5.4s, v0.4s1235; CHECK-NEXT: add v2.4s, v6.4s, v2.4s1236; CHECK-NEXT: and v5.16b, v7.16b, v1.16b1237; CHECK-NEXT: and v6.16b, v16.16b, v1.16b1238; CHECK-NEXT: addhn v0.4h, v0.4s, v17.4s1239; CHECK-NEXT: addhn v1.4h, v2.4s, v17.4s1240; CHECK-NEXT: add v2.4s, v5.4s, v4.4s1241; CHECK-NEXT: add v3.4s, v6.4s, v3.4s1242; CHECK-NEXT: addhn2 v0.8h, v2.4s, v17.4s1243; CHECK-NEXT: addhn2 v1.8h, v3.4s, v17.4s1244; CHECK-NEXT: ret1245entry:1246 %c = uitofp <16 x i32> %a to <16 x bfloat>1247 ret <16 x bfloat> %c1248}1249 1250define <32 x bfloat> @stofp_v32i32_v32bf16(<32 x i32> %a) {1251; CHECK-LABEL: stofp_v32i32_v32bf16:1252; CHECK: // %bb.0: // %entry1253; CHECK-NEXT: scvtf v0.4s, v0.4s1254; CHECK-NEXT: scvtf v2.4s, v2.4s1255; CHECK-NEXT: scvtf v4.4s, v4.4s1256; CHECK-NEXT: scvtf v6.4s, v6.4s1257; CHECK-NEXT: movi v16.4s, #11258; CHECK-NEXT: scvtf v1.4s, v1.4s1259; CHECK-NEXT: scvtf v17.4s, v3.4s1260; CHECK-NEXT: scvtf v5.4s, v5.4s1261; CHECK-NEXT: scvtf v7.4s, v7.4s1262; CHECK-NEXT: movi v21.4s, #127, msl #81263; CHECK-NEXT: ushr v3.4s, v0.4s, #161264; CHECK-NEXT: ushr v18.4s, v2.4s, #161265; CHECK-NEXT: ushr v19.4s, v4.4s, #161266; CHECK-NEXT: ushr v20.4s, v6.4s, #161267; CHECK-NEXT: ushr v22.4s, v1.4s, #161268; CHECK-NEXT: ushr v23.4s, v17.4s, #161269; CHECK-NEXT: ushr v24.4s, v5.4s, #161270; CHECK-NEXT: ushr v25.4s, v7.4s, #161271; CHECK-NEXT: and v3.16b, v3.16b, v16.16b1272; CHECK-NEXT: and v18.16b, v18.16b, v16.16b1273; CHECK-NEXT: and v19.16b, v19.16b, v16.16b1274; CHECK-NEXT: and v20.16b, v20.16b, v16.16b1275; CHECK-NEXT: add v0.4s, v3.4s, v0.4s1276; CHECK-NEXT: and v3.16b, v22.16b, v16.16b1277; CHECK-NEXT: add v2.4s, v18.4s, v2.4s1278; CHECK-NEXT: add v4.4s, v19.4s, v4.4s1279; CHECK-NEXT: add v6.4s, v20.4s, v6.4s1280; CHECK-NEXT: and v18.16b, v23.16b, v16.16b1281; CHECK-NEXT: and v19.16b, v24.16b, v16.16b1282; CHECK-NEXT: and v16.16b, v25.16b, v16.16b1283; CHECK-NEXT: add v20.4s, v3.4s, v1.4s1284; CHECK-NEXT: addhn v0.4h, v0.4s, v21.4s1285; CHECK-NEXT: addhn v1.4h, v2.4s, v21.4s1286; CHECK-NEXT: addhn v2.4h, v4.4s, v21.4s1287; CHECK-NEXT: addhn v3.4h, v6.4s, v21.4s1288; CHECK-NEXT: add v4.4s, v18.4s, v17.4s1289; CHECK-NEXT: add v5.4s, v19.4s, v5.4s1290; CHECK-NEXT: add v6.4s, v16.4s, v7.4s1291; CHECK-NEXT: addhn2 v0.8h, v20.4s, v21.4s1292; CHECK-NEXT: addhn2 v1.8h, v4.4s, v21.4s1293; CHECK-NEXT: addhn2 v2.8h, v5.4s, v21.4s1294; CHECK-NEXT: addhn2 v3.8h, v6.4s, v21.4s1295; CHECK-NEXT: ret1296entry:1297 %c = sitofp <32 x i32> %a to <32 x bfloat>1298 ret <32 x bfloat> %c1299}1300 1301define <32 x bfloat> @utofp_v32i32_v32bf16(<32 x i32> %a) {1302; CHECK-LABEL: utofp_v32i32_v32bf16:1303; CHECK: // %bb.0: // %entry1304; CHECK-NEXT: ucvtf v0.4s, v0.4s1305; CHECK-NEXT: ucvtf v2.4s, v2.4s1306; CHECK-NEXT: ucvtf v4.4s, v4.4s1307; CHECK-NEXT: ucvtf v6.4s, v6.4s1308; CHECK-NEXT: movi v16.4s, #11309; CHECK-NEXT: ucvtf v1.4s, v1.4s1310; CHECK-NEXT: ucvtf v17.4s, v3.4s1311; CHECK-NEXT: ucvtf v5.4s, v5.4s1312; CHECK-NEXT: ucvtf v7.4s, v7.4s1313; CHECK-NEXT: movi v21.4s, #127, msl #81314; CHECK-NEXT: ushr v3.4s, v0.4s, #161315; CHECK-NEXT: ushr v18.4s, v2.4s, #161316; CHECK-NEXT: ushr v19.4s, v4.4s, #161317; CHECK-NEXT: ushr v20.4s, v6.4s, #161318; CHECK-NEXT: ushr v22.4s, v1.4s, #161319; CHECK-NEXT: ushr v23.4s, v17.4s, #161320; CHECK-NEXT: ushr v24.4s, v5.4s, #161321; CHECK-NEXT: ushr v25.4s, v7.4s, #161322; CHECK-NEXT: and v3.16b, v3.16b, v16.16b1323; CHECK-NEXT: and v18.16b, v18.16b, v16.16b1324; CHECK-NEXT: and v19.16b, v19.16b, v16.16b1325; CHECK-NEXT: and v20.16b, v20.16b, v16.16b1326; CHECK-NEXT: add v0.4s, v3.4s, v0.4s1327; CHECK-NEXT: and v3.16b, v22.16b, v16.16b1328; CHECK-NEXT: add v2.4s, v18.4s, v2.4s1329; CHECK-NEXT: add v4.4s, v19.4s, v4.4s1330; CHECK-NEXT: add v6.4s, v20.4s, v6.4s1331; CHECK-NEXT: and v18.16b, v23.16b, v16.16b1332; CHECK-NEXT: and v19.16b, v24.16b, v16.16b1333; CHECK-NEXT: and v16.16b, v25.16b, v16.16b1334; CHECK-NEXT: add v20.4s, v3.4s, v1.4s1335; CHECK-NEXT: addhn v0.4h, v0.4s, v21.4s1336; CHECK-NEXT: addhn v1.4h, v2.4s, v21.4s1337; CHECK-NEXT: addhn v2.4h, v4.4s, v21.4s1338; CHECK-NEXT: addhn v3.4h, v6.4s, v21.4s1339; CHECK-NEXT: add v4.4s, v18.4s, v17.4s1340; CHECK-NEXT: add v5.4s, v19.4s, v5.4s1341; CHECK-NEXT: add v6.4s, v16.4s, v7.4s1342; CHECK-NEXT: addhn2 v0.8h, v20.4s, v21.4s1343; CHECK-NEXT: addhn2 v1.8h, v4.4s, v21.4s1344; CHECK-NEXT: addhn2 v2.8h, v5.4s, v21.4s1345; CHECK-NEXT: addhn2 v3.8h, v6.4s, v21.4s1346; CHECK-NEXT: ret1347entry:1348 %c = uitofp <32 x i32> %a to <32 x bfloat>1349 ret <32 x bfloat> %c1350}1351 1352define <2 x bfloat> @stofp_v2i16_v2bf16(<2 x i16> %a) {1353; CHECK-LABEL: stofp_v2i16_v2bf16:1354; CHECK: // %bb.0: // %entry1355; CHECK-NEXT: uzp1 v0.4h, v0.4h, v0.4h1356; CHECK-NEXT: movi v1.4s, #11357; CHECK-NEXT: sshll v0.4s, v0.4h, #01358; CHECK-NEXT: scvtf v0.4s, v0.4s1359; CHECK-NEXT: ushr v2.4s, v0.4s, #161360; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1361; CHECK-NEXT: movi v2.4s, #127, msl #81362; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1363; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1364; CHECK-NEXT: ret1365entry:1366 %c = sitofp <2 x i16> %a to <2 x bfloat>1367 ret <2 x bfloat> %c1368}1369 1370define <2 x bfloat> @utofp_v2i16_v2bf16(<2 x i16> %a) {1371; CHECK-LABEL: utofp_v2i16_v2bf16:1372; CHECK: // %bb.0: // %entry1373; CHECK-NEXT: uzp1 v0.4h, v0.4h, v0.4h1374; CHECK-NEXT: movi v1.4s, #11375; CHECK-NEXT: ushll v0.4s, v0.4h, #01376; CHECK-NEXT: ucvtf v0.4s, v0.4s1377; CHECK-NEXT: ushr v2.4s, v0.4s, #161378; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1379; CHECK-NEXT: movi v2.4s, #127, msl #81380; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1381; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1382; CHECK-NEXT: ret1383entry:1384 %c = uitofp <2 x i16> %a to <2 x bfloat>1385 ret <2 x bfloat> %c1386}1387 1388define <3 x bfloat> @stofp_v3i16_v3bf16(<3 x i16> %a) {1389; CHECK-LABEL: stofp_v3i16_v3bf16:1390; CHECK: // %bb.0: // %entry1391; CHECK-NEXT: sshll v0.4s, v0.4h, #01392; CHECK-NEXT: movi v1.4s, #11393; CHECK-NEXT: scvtf v0.4s, v0.4s1394; CHECK-NEXT: ushr v2.4s, v0.4s, #161395; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1396; CHECK-NEXT: movi v2.4s, #127, msl #81397; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1398; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1399; CHECK-NEXT: ret1400entry:1401 %c = sitofp <3 x i16> %a to <3 x bfloat>1402 ret <3 x bfloat> %c1403}1404 1405define <3 x bfloat> @utofp_v3i16_v3bf16(<3 x i16> %a) {1406; CHECK-LABEL: utofp_v3i16_v3bf16:1407; CHECK: // %bb.0: // %entry1408; CHECK-NEXT: ushll v0.4s, v0.4h, #01409; CHECK-NEXT: movi v1.4s, #11410; CHECK-NEXT: ucvtf v0.4s, v0.4s1411; CHECK-NEXT: ushr v2.4s, v0.4s, #161412; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1413; CHECK-NEXT: movi v2.4s, #127, msl #81414; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1415; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1416; CHECK-NEXT: ret1417entry:1418 %c = uitofp <3 x i16> %a to <3 x bfloat>1419 ret <3 x bfloat> %c1420}1421 1422define <4 x bfloat> @stofp_v4i16_v4bf16(<4 x i16> %a) {1423; CHECK-LABEL: stofp_v4i16_v4bf16:1424; CHECK: // %bb.0: // %entry1425; CHECK-NEXT: sshll v0.4s, v0.4h, #01426; CHECK-NEXT: movi v1.4s, #11427; CHECK-NEXT: scvtf v0.4s, v0.4s1428; CHECK-NEXT: ushr v2.4s, v0.4s, #161429; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1430; CHECK-NEXT: movi v2.4s, #127, msl #81431; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1432; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1433; CHECK-NEXT: ret1434entry:1435 %c = sitofp <4 x i16> %a to <4 x bfloat>1436 ret <4 x bfloat> %c1437}1438 1439define <4 x bfloat> @utofp_v4i16_v4bf16(<4 x i16> %a) {1440; CHECK-LABEL: utofp_v4i16_v4bf16:1441; CHECK: // %bb.0: // %entry1442; CHECK-NEXT: ushll v0.4s, v0.4h, #01443; CHECK-NEXT: movi v1.4s, #11444; CHECK-NEXT: ucvtf v0.4s, v0.4s1445; CHECK-NEXT: ushr v2.4s, v0.4s, #161446; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1447; CHECK-NEXT: movi v2.4s, #127, msl #81448; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1449; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1450; CHECK-NEXT: ret1451entry:1452 %c = uitofp <4 x i16> %a to <4 x bfloat>1453 ret <4 x bfloat> %c1454}1455 1456define <8 x bfloat> @stofp_v8i16_v8bf16(<8 x i16> %a) {1457; CHECK-LABEL: stofp_v8i16_v8bf16:1458; CHECK: // %bb.0: // %entry1459; CHECK-NEXT: sshll v2.4s, v0.4h, #01460; CHECK-NEXT: sshll2 v0.4s, v0.8h, #01461; CHECK-NEXT: movi v1.4s, #11462; CHECK-NEXT: movi v4.4s, #127, msl #81463; CHECK-NEXT: scvtf v2.4s, v2.4s1464; CHECK-NEXT: scvtf v3.4s, v0.4s1465; CHECK-NEXT: ushr v0.4s, v2.4s, #161466; CHECK-NEXT: ushr v5.4s, v3.4s, #161467; CHECK-NEXT: and v0.16b, v0.16b, v1.16b1468; CHECK-NEXT: and v1.16b, v5.16b, v1.16b1469; CHECK-NEXT: add v0.4s, v0.4s, v4.4s1470; CHECK-NEXT: add v1.4s, v1.4s, v4.4s1471; CHECK-NEXT: addhn v0.4h, v2.4s, v0.4s1472; CHECK-NEXT: addhn2 v0.8h, v3.4s, v1.4s1473; CHECK-NEXT: ret1474entry:1475 %c = sitofp <8 x i16> %a to <8 x bfloat>1476 ret <8 x bfloat> %c1477}1478 1479define <8 x bfloat> @utofp_v8i16_v8bf16(<8 x i16> %a) {1480; CHECK-LABEL: utofp_v8i16_v8bf16:1481; CHECK: // %bb.0: // %entry1482; CHECK-NEXT: ushll v2.4s, v0.4h, #01483; CHECK-NEXT: ushll2 v0.4s, v0.8h, #01484; CHECK-NEXT: movi v1.4s, #11485; CHECK-NEXT: movi v4.4s, #127, msl #81486; CHECK-NEXT: ucvtf v2.4s, v2.4s1487; CHECK-NEXT: ucvtf v3.4s, v0.4s1488; CHECK-NEXT: ushr v0.4s, v2.4s, #161489; CHECK-NEXT: ushr v5.4s, v3.4s, #161490; CHECK-NEXT: and v0.16b, v0.16b, v1.16b1491; CHECK-NEXT: and v1.16b, v5.16b, v1.16b1492; CHECK-NEXT: add v0.4s, v0.4s, v4.4s1493; CHECK-NEXT: add v1.4s, v1.4s, v4.4s1494; CHECK-NEXT: addhn v0.4h, v2.4s, v0.4s1495; CHECK-NEXT: addhn2 v0.8h, v3.4s, v1.4s1496; CHECK-NEXT: ret1497entry:1498 %c = uitofp <8 x i16> %a to <8 x bfloat>1499 ret <8 x bfloat> %c1500}1501 1502define <16 x bfloat> @stofp_v16i16_v16bf16(<16 x i16> %a) {1503; CHECK-LABEL: stofp_v16i16_v16bf16:1504; CHECK: // %bb.0: // %entry1505; CHECK-NEXT: sshll v3.4s, v0.4h, #01506; CHECK-NEXT: sshll v4.4s, v1.4h, #01507; CHECK-NEXT: sshll2 v0.4s, v0.8h, #01508; CHECK-NEXT: sshll2 v1.4s, v1.8h, #01509; CHECK-NEXT: movi v2.4s, #11510; CHECK-NEXT: movi v7.4s, #127, msl #81511; CHECK-NEXT: scvtf v3.4s, v3.4s1512; CHECK-NEXT: scvtf v4.4s, v4.4s1513; CHECK-NEXT: scvtf v5.4s, v0.4s1514; CHECK-NEXT: scvtf v6.4s, v1.4s1515; CHECK-NEXT: ushr v0.4s, v3.4s, #161516; CHECK-NEXT: ushr v1.4s, v4.4s, #161517; CHECK-NEXT: ushr v16.4s, v5.4s, #161518; CHECK-NEXT: ushr v17.4s, v6.4s, #161519; CHECK-NEXT: and v0.16b, v0.16b, v2.16b1520; CHECK-NEXT: and v1.16b, v1.16b, v2.16b1521; CHECK-NEXT: and v16.16b, v16.16b, v2.16b1522; CHECK-NEXT: and v2.16b, v17.16b, v2.16b1523; CHECK-NEXT: add v0.4s, v0.4s, v7.4s1524; CHECK-NEXT: add v1.4s, v1.4s, v7.4s1525; CHECK-NEXT: add v2.4s, v2.4s, v7.4s1526; CHECK-NEXT: addhn v0.4h, v3.4s, v0.4s1527; CHECK-NEXT: addhn v1.4h, v4.4s, v1.4s1528; CHECK-NEXT: add v3.4s, v16.4s, v7.4s1529; CHECK-NEXT: addhn2 v0.8h, v5.4s, v3.4s1530; CHECK-NEXT: addhn2 v1.8h, v6.4s, v2.4s1531; CHECK-NEXT: ret1532entry:1533 %c = sitofp <16 x i16> %a to <16 x bfloat>1534 ret <16 x bfloat> %c1535}1536 1537define <16 x bfloat> @utofp_v16i16_v16bf16(<16 x i16> %a) {1538; CHECK-LABEL: utofp_v16i16_v16bf16:1539; CHECK: // %bb.0: // %entry1540; CHECK-NEXT: ushll v3.4s, v0.4h, #01541; CHECK-NEXT: ushll v4.4s, v1.4h, #01542; CHECK-NEXT: ushll2 v0.4s, v0.8h, #01543; CHECK-NEXT: ushll2 v1.4s, v1.8h, #01544; CHECK-NEXT: movi v2.4s, #11545; CHECK-NEXT: movi v7.4s, #127, msl #81546; CHECK-NEXT: ucvtf v3.4s, v3.4s1547; CHECK-NEXT: ucvtf v4.4s, v4.4s1548; CHECK-NEXT: ucvtf v5.4s, v0.4s1549; CHECK-NEXT: ucvtf v6.4s, v1.4s1550; CHECK-NEXT: ushr v0.4s, v3.4s, #161551; CHECK-NEXT: ushr v1.4s, v4.4s, #161552; CHECK-NEXT: ushr v16.4s, v5.4s, #161553; CHECK-NEXT: ushr v17.4s, v6.4s, #161554; CHECK-NEXT: and v0.16b, v0.16b, v2.16b1555; CHECK-NEXT: and v1.16b, v1.16b, v2.16b1556; CHECK-NEXT: and v16.16b, v16.16b, v2.16b1557; CHECK-NEXT: and v2.16b, v17.16b, v2.16b1558; CHECK-NEXT: add v0.4s, v0.4s, v7.4s1559; CHECK-NEXT: add v1.4s, v1.4s, v7.4s1560; CHECK-NEXT: add v2.4s, v2.4s, v7.4s1561; CHECK-NEXT: addhn v0.4h, v3.4s, v0.4s1562; CHECK-NEXT: addhn v1.4h, v4.4s, v1.4s1563; CHECK-NEXT: add v3.4s, v16.4s, v7.4s1564; CHECK-NEXT: addhn2 v0.8h, v5.4s, v3.4s1565; CHECK-NEXT: addhn2 v1.8h, v6.4s, v2.4s1566; CHECK-NEXT: ret1567entry:1568 %c = uitofp <16 x i16> %a to <16 x bfloat>1569 ret <16 x bfloat> %c1570}1571 1572define <32 x bfloat> @stofp_v32i16_v32bf16(<32 x i16> %a) {1573; CHECK-LABEL: stofp_v32i16_v32bf16:1574; CHECK: // %bb.0: // %entry1575; CHECK-NEXT: sshll v4.4s, v1.4h, #01576; CHECK-NEXT: sshll v5.4s, v0.4h, #01577; CHECK-NEXT: sshll v6.4s, v2.4h, #01578; CHECK-NEXT: sshll v7.4s, v3.4h, #01579; CHECK-NEXT: sshll2 v0.4s, v0.8h, #01580; CHECK-NEXT: sshll2 v1.4s, v1.8h, #01581; CHECK-NEXT: sshll2 v2.4s, v2.8h, #01582; CHECK-NEXT: sshll2 v3.4s, v3.8h, #01583; CHECK-NEXT: movi v16.4s, #11584; CHECK-NEXT: scvtf v5.4s, v5.4s1585; CHECK-NEXT: scvtf v4.4s, v4.4s1586; CHECK-NEXT: scvtf v6.4s, v6.4s1587; CHECK-NEXT: scvtf v7.4s, v7.4s1588; CHECK-NEXT: scvtf v17.4s, v0.4s1589; CHECK-NEXT: scvtf v18.4s, v1.4s1590; CHECK-NEXT: scvtf v19.4s, v2.4s1591; CHECK-NEXT: scvtf v20.4s, v3.4s1592; CHECK-NEXT: movi v21.4s, #127, msl #81593; CHECK-NEXT: ushr v0.4s, v5.4s, #161594; CHECK-NEXT: ushr v1.4s, v4.4s, #161595; CHECK-NEXT: ushr v2.4s, v6.4s, #161596; CHECK-NEXT: ushr v3.4s, v7.4s, #161597; CHECK-NEXT: ushr v22.4s, v17.4s, #161598; CHECK-NEXT: ushr v23.4s, v18.4s, #161599; CHECK-NEXT: ushr v24.4s, v19.4s, #161600; CHECK-NEXT: ushr v25.4s, v20.4s, #161601; CHECK-NEXT: and v0.16b, v0.16b, v16.16b1602; CHECK-NEXT: and v1.16b, v1.16b, v16.16b1603; CHECK-NEXT: and v2.16b, v2.16b, v16.16b1604; CHECK-NEXT: and v3.16b, v3.16b, v16.16b1605; CHECK-NEXT: and v22.16b, v22.16b, v16.16b1606; CHECK-NEXT: and v23.16b, v23.16b, v16.16b1607; CHECK-NEXT: and v24.16b, v24.16b, v16.16b1608; CHECK-NEXT: and v16.16b, v25.16b, v16.16b1609; CHECK-NEXT: add v0.4s, v0.4s, v21.4s1610; CHECK-NEXT: add v1.4s, v1.4s, v21.4s1611; CHECK-NEXT: add v2.4s, v2.4s, v21.4s1612; CHECK-NEXT: add v3.4s, v3.4s, v21.4s1613; CHECK-NEXT: addhn v0.4h, v5.4s, v0.4s1614; CHECK-NEXT: addhn v1.4h, v4.4s, v1.4s1615; CHECK-NEXT: addhn v2.4h, v6.4s, v2.4s1616; CHECK-NEXT: addhn v3.4h, v7.4s, v3.4s1617; CHECK-NEXT: add v4.4s, v22.4s, v21.4s1618; CHECK-NEXT: add v5.4s, v23.4s, v21.4s1619; CHECK-NEXT: add v6.4s, v24.4s, v21.4s1620; CHECK-NEXT: add v7.4s, v16.4s, v21.4s1621; CHECK-NEXT: addhn2 v0.8h, v17.4s, v4.4s1622; CHECK-NEXT: addhn2 v1.8h, v18.4s, v5.4s1623; CHECK-NEXT: addhn2 v2.8h, v19.4s, v6.4s1624; CHECK-NEXT: addhn2 v3.8h, v20.4s, v7.4s1625; CHECK-NEXT: ret1626entry:1627 %c = sitofp <32 x i16> %a to <32 x bfloat>1628 ret <32 x bfloat> %c1629}1630 1631define <32 x bfloat> @utofp_v32i16_v32bf16(<32 x i16> %a) {1632; CHECK-LABEL: utofp_v32i16_v32bf16:1633; CHECK: // %bb.0: // %entry1634; CHECK-NEXT: ushll v4.4s, v1.4h, #01635; CHECK-NEXT: ushll v5.4s, v0.4h, #01636; CHECK-NEXT: ushll v6.4s, v2.4h, #01637; CHECK-NEXT: ushll v7.4s, v3.4h, #01638; CHECK-NEXT: ushll2 v0.4s, v0.8h, #01639; CHECK-NEXT: ushll2 v1.4s, v1.8h, #01640; CHECK-NEXT: ushll2 v2.4s, v2.8h, #01641; CHECK-NEXT: ushll2 v3.4s, v3.8h, #01642; CHECK-NEXT: movi v16.4s, #11643; CHECK-NEXT: ucvtf v5.4s, v5.4s1644; CHECK-NEXT: ucvtf v4.4s, v4.4s1645; CHECK-NEXT: ucvtf v6.4s, v6.4s1646; CHECK-NEXT: ucvtf v7.4s, v7.4s1647; CHECK-NEXT: ucvtf v17.4s, v0.4s1648; CHECK-NEXT: ucvtf v18.4s, v1.4s1649; CHECK-NEXT: ucvtf v19.4s, v2.4s1650; CHECK-NEXT: ucvtf v20.4s, v3.4s1651; CHECK-NEXT: movi v21.4s, #127, msl #81652; CHECK-NEXT: ushr v0.4s, v5.4s, #161653; CHECK-NEXT: ushr v1.4s, v4.4s, #161654; CHECK-NEXT: ushr v2.4s, v6.4s, #161655; CHECK-NEXT: ushr v3.4s, v7.4s, #161656; CHECK-NEXT: ushr v22.4s, v17.4s, #161657; CHECK-NEXT: ushr v23.4s, v18.4s, #161658; CHECK-NEXT: ushr v24.4s, v19.4s, #161659; CHECK-NEXT: ushr v25.4s, v20.4s, #161660; CHECK-NEXT: and v0.16b, v0.16b, v16.16b1661; CHECK-NEXT: and v1.16b, v1.16b, v16.16b1662; CHECK-NEXT: and v2.16b, v2.16b, v16.16b1663; CHECK-NEXT: and v3.16b, v3.16b, v16.16b1664; CHECK-NEXT: and v22.16b, v22.16b, v16.16b1665; CHECK-NEXT: and v23.16b, v23.16b, v16.16b1666; CHECK-NEXT: and v24.16b, v24.16b, v16.16b1667; CHECK-NEXT: and v16.16b, v25.16b, v16.16b1668; CHECK-NEXT: add v0.4s, v0.4s, v21.4s1669; CHECK-NEXT: add v1.4s, v1.4s, v21.4s1670; CHECK-NEXT: add v2.4s, v2.4s, v21.4s1671; CHECK-NEXT: add v3.4s, v3.4s, v21.4s1672; CHECK-NEXT: addhn v0.4h, v5.4s, v0.4s1673; CHECK-NEXT: addhn v1.4h, v4.4s, v1.4s1674; CHECK-NEXT: addhn v2.4h, v6.4s, v2.4s1675; CHECK-NEXT: addhn v3.4h, v7.4s, v3.4s1676; CHECK-NEXT: add v4.4s, v22.4s, v21.4s1677; CHECK-NEXT: add v5.4s, v23.4s, v21.4s1678; CHECK-NEXT: add v6.4s, v24.4s, v21.4s1679; CHECK-NEXT: add v7.4s, v16.4s, v21.4s1680; CHECK-NEXT: addhn2 v0.8h, v17.4s, v4.4s1681; CHECK-NEXT: addhn2 v1.8h, v18.4s, v5.4s1682; CHECK-NEXT: addhn2 v2.8h, v19.4s, v6.4s1683; CHECK-NEXT: addhn2 v3.8h, v20.4s, v7.4s1684; CHECK-NEXT: ret1685entry:1686 %c = uitofp <32 x i16> %a to <32 x bfloat>1687 ret <32 x bfloat> %c1688}1689 1690define <2 x bfloat> @stofp_v2i8_v2bf16(<2 x i8> %a) {1691; CHECK-LABEL: stofp_v2i8_v2bf16:1692; CHECK: // %bb.0: // %entry1693; CHECK-NEXT: // kill: def $d0 killed $d0 def $q01694; CHECK-NEXT: mov w9, v0.s[1]1695; CHECK-NEXT: fmov w10, s01696; CHECK-NEXT: mov w8, #32767 // =0x7fff1697; CHECK-NEXT: sxtb w10, w101698; CHECK-NEXT: sxtb w9, w91699; CHECK-NEXT: scvtf s1, w101700; CHECK-NEXT: scvtf s0, w91701; CHECK-NEXT: fmov w10, s11702; CHECK-NEXT: fmov w9, s01703; CHECK-NEXT: ubfx w12, w10, #16, #11704; CHECK-NEXT: ubfx w11, w9, #16, #11705; CHECK-NEXT: add w9, w9, w81706; CHECK-NEXT: add w8, w10, w81707; CHECK-NEXT: add w8, w12, w81708; CHECK-NEXT: add w9, w11, w91709; CHECK-NEXT: lsr w8, w8, #161710; CHECK-NEXT: lsr w9, w9, #161711; CHECK-NEXT: fmov s0, w81712; CHECK-NEXT: fmov s1, w91713; CHECK-NEXT: mov v0.h[1], v1.h[0]1714; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q01715; CHECK-NEXT: ret1716entry:1717 %c = sitofp <2 x i8> %a to <2 x bfloat>1718 ret <2 x bfloat> %c1719}1720 1721define <2 x bfloat> @utofp_v2i8_v2bf16(<2 x i8> %a) {1722; CHECK-LABEL: utofp_v2i8_v2bf16:1723; CHECK: // %bb.0: // %entry1724; CHECK-NEXT: // kill: def $d0 killed $d0 def $q01725; CHECK-NEXT: mov w9, v0.s[1]1726; CHECK-NEXT: fmov w10, s01727; CHECK-NEXT: mov w8, #32767 // =0x7fff1728; CHECK-NEXT: and w10, w10, #0xff1729; CHECK-NEXT: and w9, w9, #0xff1730; CHECK-NEXT: ucvtf s1, w101731; CHECK-NEXT: ucvtf s0, w91732; CHECK-NEXT: fmov w10, s11733; CHECK-NEXT: fmov w9, s01734; CHECK-NEXT: ubfx w12, w10, #16, #11735; CHECK-NEXT: ubfx w11, w9, #16, #11736; CHECK-NEXT: add w9, w9, w81737; CHECK-NEXT: add w8, w10, w81738; CHECK-NEXT: add w8, w12, w81739; CHECK-NEXT: add w9, w11, w91740; CHECK-NEXT: lsr w8, w8, #161741; CHECK-NEXT: lsr w9, w9, #161742; CHECK-NEXT: fmov s0, w81743; CHECK-NEXT: fmov s1, w91744; CHECK-NEXT: mov v0.h[1], v1.h[0]1745; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q01746; CHECK-NEXT: ret1747entry:1748 %c = uitofp <2 x i8> %a to <2 x bfloat>1749 ret <2 x bfloat> %c1750}1751 1752define <3 x bfloat> @stofp_v3i8_v3bf16(<3 x i8> %a) {1753; CHECK-LABEL: stofp_v3i8_v3bf16:1754; CHECK: // %bb.0: // %entry1755; CHECK-NEXT: fmov s0, w01756; CHECK-NEXT: movi v1.4s, #11757; CHECK-NEXT: mov v0.h[1], w11758; CHECK-NEXT: mov v0.h[2], w21759; CHECK-NEXT: shl v0.4h, v0.4h, #81760; CHECK-NEXT: sshr v0.4h, v0.4h, #81761; CHECK-NEXT: sshll v0.4s, v0.4h, #01762; CHECK-NEXT: scvtf v0.4s, v0.4s1763; CHECK-NEXT: ushr v2.4s, v0.4s, #161764; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1765; CHECK-NEXT: movi v2.4s, #127, msl #81766; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1767; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1768; CHECK-NEXT: ret1769entry:1770 %c = sitofp <3 x i8> %a to <3 x bfloat>1771 ret <3 x bfloat> %c1772}1773 1774define <3 x bfloat> @utofp_v3i8_v3bf16(<3 x i8> %a) {1775; CHECK-LABEL: utofp_v3i8_v3bf16:1776; CHECK: // %bb.0: // %entry1777; CHECK-NEXT: fmov s0, w01778; CHECK-NEXT: movi v1.4s, #11779; CHECK-NEXT: mov v0.h[1], w11780; CHECK-NEXT: mov v0.h[2], w21781; CHECK-NEXT: bic v0.4h, #255, lsl #81782; CHECK-NEXT: ushll v0.4s, v0.4h, #01783; CHECK-NEXT: ucvtf v0.4s, v0.4s1784; CHECK-NEXT: ushr v2.4s, v0.4s, #161785; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1786; CHECK-NEXT: movi v2.4s, #127, msl #81787; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1788; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1789; CHECK-NEXT: ret1790entry:1791 %c = uitofp <3 x i8> %a to <3 x bfloat>1792 ret <3 x bfloat> %c1793}1794 1795define <4 x bfloat> @stofp_v4i8_v4bf16(<4 x i8> %a) {1796; CHECK-LABEL: stofp_v4i8_v4bf16:1797; CHECK: // %bb.0: // %entry1798; CHECK-NEXT: shl v0.4h, v0.4h, #81799; CHECK-NEXT: movi v1.4s, #11800; CHECK-NEXT: sshr v0.4h, v0.4h, #81801; CHECK-NEXT: sshll v0.4s, v0.4h, #01802; CHECK-NEXT: scvtf v0.4s, v0.4s1803; CHECK-NEXT: ushr v2.4s, v0.4s, #161804; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1805; CHECK-NEXT: movi v2.4s, #127, msl #81806; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1807; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1808; CHECK-NEXT: ret1809entry:1810 %c = sitofp <4 x i8> %a to <4 x bfloat>1811 ret <4 x bfloat> %c1812}1813 1814define <4 x bfloat> @utofp_v4i8_v4bf16(<4 x i8> %a) {1815; CHECK-LABEL: utofp_v4i8_v4bf16:1816; CHECK: // %bb.0: // %entry1817; CHECK-NEXT: bic v0.4h, #255, lsl #81818; CHECK-NEXT: movi v1.4s, #11819; CHECK-NEXT: ushll v0.4s, v0.4h, #01820; CHECK-NEXT: ucvtf v0.4s, v0.4s1821; CHECK-NEXT: ushr v2.4s, v0.4s, #161822; CHECK-NEXT: and v1.16b, v2.16b, v1.16b1823; CHECK-NEXT: movi v2.4s, #127, msl #81824; CHECK-NEXT: add v0.4s, v1.4s, v0.4s1825; CHECK-NEXT: addhn v0.4h, v0.4s, v2.4s1826; CHECK-NEXT: ret1827entry:1828 %c = uitofp <4 x i8> %a to <4 x bfloat>1829 ret <4 x bfloat> %c1830}1831 1832define <8 x bfloat> @stofp_v8i8_v8bf16(<8 x i8> %a) {1833; CHECK-LABEL: stofp_v8i8_v8bf16:1834; CHECK: // %bb.0: // %entry1835; CHECK-NEXT: sshll v0.8h, v0.8b, #01836; CHECK-NEXT: movi v1.4s, #11837; CHECK-NEXT: movi v4.4s, #127, msl #81838; CHECK-NEXT: sshll v2.4s, v0.4h, #01839; CHECK-NEXT: sshll2 v0.4s, v0.8h, #01840; CHECK-NEXT: scvtf v2.4s, v2.4s1841; CHECK-NEXT: scvtf v3.4s, v0.4s1842; CHECK-NEXT: ushr v0.4s, v2.4s, #161843; CHECK-NEXT: ushr v5.4s, v3.4s, #161844; CHECK-NEXT: and v0.16b, v0.16b, v1.16b1845; CHECK-NEXT: and v1.16b, v5.16b, v1.16b1846; CHECK-NEXT: add v0.4s, v0.4s, v4.4s1847; CHECK-NEXT: add v1.4s, v1.4s, v4.4s1848; CHECK-NEXT: addhn v0.4h, v2.4s, v0.4s1849; CHECK-NEXT: addhn2 v0.8h, v3.4s, v1.4s1850; CHECK-NEXT: ret1851entry:1852 %c = sitofp <8 x i8> %a to <8 x bfloat>1853 ret <8 x bfloat> %c1854}1855 1856define <8 x bfloat> @utofp_v8i8_v8bf16(<8 x i8> %a) {1857; CHECK-LABEL: utofp_v8i8_v8bf16:1858; CHECK: // %bb.0: // %entry1859; CHECK-NEXT: ushll v0.8h, v0.8b, #01860; CHECK-NEXT: movi v1.4s, #11861; CHECK-NEXT: movi v4.4s, #127, msl #81862; CHECK-NEXT: ushll v2.4s, v0.4h, #01863; CHECK-NEXT: ushll2 v0.4s, v0.8h, #01864; CHECK-NEXT: ucvtf v2.4s, v2.4s1865; CHECK-NEXT: ucvtf v3.4s, v0.4s1866; CHECK-NEXT: ushr v0.4s, v2.4s, #161867; CHECK-NEXT: ushr v5.4s, v3.4s, #161868; CHECK-NEXT: and v0.16b, v0.16b, v1.16b1869; CHECK-NEXT: and v1.16b, v5.16b, v1.16b1870; CHECK-NEXT: add v0.4s, v0.4s, v4.4s1871; CHECK-NEXT: add v1.4s, v1.4s, v4.4s1872; CHECK-NEXT: addhn v0.4h, v2.4s, v0.4s1873; CHECK-NEXT: addhn2 v0.8h, v3.4s, v1.4s1874; CHECK-NEXT: ret1875entry:1876 %c = uitofp <8 x i8> %a to <8 x bfloat>1877 ret <8 x bfloat> %c1878}1879 1880define <16 x bfloat> @stofp_v16i8_v16bf16(<16 x i8> %a) {1881; CHECK-LABEL: stofp_v16i8_v16bf16:1882; CHECK: // %bb.0: // %entry1883; CHECK-NEXT: sshll2 v2.8h, v0.16b, #01884; CHECK-NEXT: sshll v0.8h, v0.8b, #01885; CHECK-NEXT: movi v1.4s, #11886; CHECK-NEXT: movi v7.4s, #127, msl #81887; CHECK-NEXT: sshll v3.4s, v2.4h, #01888; CHECK-NEXT: sshll v4.4s, v0.4h, #01889; CHECK-NEXT: sshll2 v2.4s, v2.8h, #01890; CHECK-NEXT: sshll2 v0.4s, v0.8h, #01891; CHECK-NEXT: scvtf v3.4s, v3.4s1892; CHECK-NEXT: scvtf v4.4s, v4.4s1893; CHECK-NEXT: scvtf v2.4s, v2.4s1894; CHECK-NEXT: scvtf v6.4s, v0.4s1895; CHECK-NEXT: ushr v5.4s, v3.4s, #161896; CHECK-NEXT: ushr v0.4s, v4.4s, #161897; CHECK-NEXT: ushr v16.4s, v2.4s, #161898; CHECK-NEXT: ushr v17.4s, v6.4s, #161899; CHECK-NEXT: and v5.16b, v5.16b, v1.16b1900; CHECK-NEXT: and v0.16b, v0.16b, v1.16b1901; CHECK-NEXT: and v16.16b, v16.16b, v1.16b1902; CHECK-NEXT: and v17.16b, v17.16b, v1.16b1903; CHECK-NEXT: add v5.4s, v5.4s, v7.4s1904; CHECK-NEXT: add v0.4s, v0.4s, v7.4s1905; CHECK-NEXT: addhn v1.4h, v3.4s, v5.4s1906; CHECK-NEXT: addhn v0.4h, v4.4s, v0.4s1907; CHECK-NEXT: add v3.4s, v16.4s, v7.4s1908; CHECK-NEXT: add v4.4s, v17.4s, v7.4s1909; CHECK-NEXT: addhn2 v1.8h, v2.4s, v3.4s1910; CHECK-NEXT: addhn2 v0.8h, v6.4s, v4.4s1911; CHECK-NEXT: ret1912entry:1913 %c = sitofp <16 x i8> %a to <16 x bfloat>1914 ret <16 x bfloat> %c1915}1916 1917define <16 x bfloat> @utofp_v16i8_v16bf16(<16 x i8> %a) {1918; CHECK-LABEL: utofp_v16i8_v16bf16:1919; CHECK: // %bb.0: // %entry1920; CHECK-NEXT: ushll2 v2.8h, v0.16b, #01921; CHECK-NEXT: ushll v0.8h, v0.8b, #01922; CHECK-NEXT: movi v1.4s, #11923; CHECK-NEXT: movi v7.4s, #127, msl #81924; CHECK-NEXT: ushll v3.4s, v2.4h, #01925; CHECK-NEXT: ushll v4.4s, v0.4h, #01926; CHECK-NEXT: ushll2 v2.4s, v2.8h, #01927; CHECK-NEXT: ushll2 v0.4s, v0.8h, #01928; CHECK-NEXT: ucvtf v3.4s, v3.4s1929; CHECK-NEXT: ucvtf v4.4s, v4.4s1930; CHECK-NEXT: ucvtf v2.4s, v2.4s1931; CHECK-NEXT: ucvtf v6.4s, v0.4s1932; CHECK-NEXT: ushr v5.4s, v3.4s, #161933; CHECK-NEXT: ushr v0.4s, v4.4s, #161934; CHECK-NEXT: ushr v16.4s, v2.4s, #161935; CHECK-NEXT: ushr v17.4s, v6.4s, #161936; CHECK-NEXT: and v5.16b, v5.16b, v1.16b1937; CHECK-NEXT: and v0.16b, v0.16b, v1.16b1938; CHECK-NEXT: and v16.16b, v16.16b, v1.16b1939; CHECK-NEXT: and v17.16b, v17.16b, v1.16b1940; CHECK-NEXT: add v5.4s, v5.4s, v7.4s1941; CHECK-NEXT: add v0.4s, v0.4s, v7.4s1942; CHECK-NEXT: addhn v1.4h, v3.4s, v5.4s1943; CHECK-NEXT: addhn v0.4h, v4.4s, v0.4s1944; CHECK-NEXT: add v3.4s, v16.4s, v7.4s1945; CHECK-NEXT: add v4.4s, v17.4s, v7.4s1946; CHECK-NEXT: addhn2 v1.8h, v2.4s, v3.4s1947; CHECK-NEXT: addhn2 v0.8h, v6.4s, v4.4s1948; CHECK-NEXT: ret1949entry:1950 %c = uitofp <16 x i8> %a to <16 x bfloat>1951 ret <16 x bfloat> %c1952}1953 1954define <32 x bfloat> @stofp_v32i8_v32bf16(<32 x i8> %a) {1955; CHECK-LABEL: stofp_v32i8_v32bf16:1956; CHECK: // %bb.0: // %entry1957; CHECK-NEXT: sshll2 v3.8h, v0.16b, #01958; CHECK-NEXT: sshll v0.8h, v0.8b, #01959; CHECK-NEXT: sshll2 v4.8h, v1.16b, #01960; CHECK-NEXT: sshll v1.8h, v1.8b, #01961; CHECK-NEXT: movi v2.4s, #11962; CHECK-NEXT: movi v21.4s, #127, msl #81963; CHECK-NEXT: sshll v5.4s, v3.4h, #01964; CHECK-NEXT: sshll v6.4s, v0.4h, #01965; CHECK-NEXT: sshll v7.4s, v4.4h, #01966; CHECK-NEXT: sshll v16.4s, v1.4h, #01967; CHECK-NEXT: sshll2 v3.4s, v3.8h, #01968; CHECK-NEXT: sshll2 v4.4s, v4.8h, #01969; CHECK-NEXT: sshll2 v0.4s, v0.8h, #01970; CHECK-NEXT: sshll2 v1.4s, v1.8h, #01971; CHECK-NEXT: scvtf v5.4s, v5.4s1972; CHECK-NEXT: scvtf v6.4s, v6.4s1973; CHECK-NEXT: scvtf v7.4s, v7.4s1974; CHECK-NEXT: scvtf v16.4s, v16.4s1975; CHECK-NEXT: scvtf v17.4s, v3.4s1976; CHECK-NEXT: scvtf v4.4s, v4.4s1977; CHECK-NEXT: scvtf v18.4s, v0.4s1978; CHECK-NEXT: scvtf v19.4s, v1.4s1979; CHECK-NEXT: ushr v0.4s, v5.4s, #161980; CHECK-NEXT: ushr v3.4s, v6.4s, #161981; CHECK-NEXT: ushr v1.4s, v7.4s, #161982; CHECK-NEXT: ushr v20.4s, v16.4s, #161983; CHECK-NEXT: ushr v23.4s, v17.4s, #161984; CHECK-NEXT: ushr v24.4s, v4.4s, #161985; CHECK-NEXT: ushr v22.4s, v18.4s, #161986; CHECK-NEXT: ushr v25.4s, v19.4s, #161987; CHECK-NEXT: and v0.16b, v0.16b, v2.16b1988; CHECK-NEXT: and v3.16b, v3.16b, v2.16b1989; CHECK-NEXT: and v1.16b, v1.16b, v2.16b1990; CHECK-NEXT: and v20.16b, v20.16b, v2.16b1991; CHECK-NEXT: and v23.16b, v23.16b, v2.16b1992; CHECK-NEXT: and v24.16b, v24.16b, v2.16b1993; CHECK-NEXT: and v22.16b, v22.16b, v2.16b1994; CHECK-NEXT: and v25.16b, v25.16b, v2.16b1995; CHECK-NEXT: add v0.4s, v0.4s, v21.4s1996; CHECK-NEXT: add v3.4s, v3.4s, v21.4s1997; CHECK-NEXT: add v26.4s, v1.4s, v21.4s1998; CHECK-NEXT: add v20.4s, v20.4s, v21.4s1999; CHECK-NEXT: addhn v1.4h, v5.4s, v0.4s2000; CHECK-NEXT: addhn v0.4h, v6.4s, v3.4s2001; CHECK-NEXT: addhn v3.4h, v7.4s, v26.4s2002; CHECK-NEXT: addhn v2.4h, v16.4s, v20.4s2003; CHECK-NEXT: add v5.4s, v22.4s, v21.4s2004; CHECK-NEXT: add v6.4s, v23.4s, v21.4s2005; CHECK-NEXT: add v7.4s, v24.4s, v21.4s2006; CHECK-NEXT: add v16.4s, v25.4s, v21.4s2007; CHECK-NEXT: addhn2 v0.8h, v18.4s, v5.4s2008; CHECK-NEXT: addhn2 v1.8h, v17.4s, v6.4s2009; CHECK-NEXT: addhn2 v3.8h, v4.4s, v7.4s2010; CHECK-NEXT: addhn2 v2.8h, v19.4s, v16.4s2011; CHECK-NEXT: ret2012entry:2013 %c = sitofp <32 x i8> %a to <32 x bfloat>2014 ret <32 x bfloat> %c2015}2016 2017define <32 x bfloat> @utofp_v32i8_v32bf16(<32 x i8> %a) {2018; CHECK-LABEL: utofp_v32i8_v32bf16:2019; CHECK: // %bb.0: // %entry2020; CHECK-NEXT: ushll2 v3.8h, v0.16b, #02021; CHECK-NEXT: ushll v0.8h, v0.8b, #02022; CHECK-NEXT: ushll2 v4.8h, v1.16b, #02023; CHECK-NEXT: ushll v1.8h, v1.8b, #02024; CHECK-NEXT: movi v2.4s, #12025; CHECK-NEXT: movi v21.4s, #127, msl #82026; CHECK-NEXT: ushll v5.4s, v3.4h, #02027; CHECK-NEXT: ushll v6.4s, v0.4h, #02028; CHECK-NEXT: ushll v7.4s, v4.4h, #02029; CHECK-NEXT: ushll v16.4s, v1.4h, #02030; CHECK-NEXT: ushll2 v3.4s, v3.8h, #02031; CHECK-NEXT: ushll2 v4.4s, v4.8h, #02032; CHECK-NEXT: ushll2 v0.4s, v0.8h, #02033; CHECK-NEXT: ushll2 v1.4s, v1.8h, #02034; CHECK-NEXT: ucvtf v5.4s, v5.4s2035; CHECK-NEXT: ucvtf v6.4s, v6.4s2036; CHECK-NEXT: ucvtf v7.4s, v7.4s2037; CHECK-NEXT: ucvtf v16.4s, v16.4s2038; CHECK-NEXT: ucvtf v17.4s, v3.4s2039; CHECK-NEXT: ucvtf v4.4s, v4.4s2040; CHECK-NEXT: ucvtf v18.4s, v0.4s2041; CHECK-NEXT: ucvtf v19.4s, v1.4s2042; CHECK-NEXT: ushr v0.4s, v5.4s, #162043; CHECK-NEXT: ushr v3.4s, v6.4s, #162044; CHECK-NEXT: ushr v1.4s, v7.4s, #162045; CHECK-NEXT: ushr v20.4s, v16.4s, #162046; CHECK-NEXT: ushr v23.4s, v17.4s, #162047; CHECK-NEXT: ushr v24.4s, v4.4s, #162048; CHECK-NEXT: ushr v22.4s, v18.4s, #162049; CHECK-NEXT: ushr v25.4s, v19.4s, #162050; CHECK-NEXT: and v0.16b, v0.16b, v2.16b2051; CHECK-NEXT: and v3.16b, v3.16b, v2.16b2052; CHECK-NEXT: and v1.16b, v1.16b, v2.16b2053; CHECK-NEXT: and v20.16b, v20.16b, v2.16b2054; CHECK-NEXT: and v23.16b, v23.16b, v2.16b2055; CHECK-NEXT: and v24.16b, v24.16b, v2.16b2056; CHECK-NEXT: and v22.16b, v22.16b, v2.16b2057; CHECK-NEXT: and v25.16b, v25.16b, v2.16b2058; CHECK-NEXT: add v0.4s, v0.4s, v21.4s2059; CHECK-NEXT: add v3.4s, v3.4s, v21.4s2060; CHECK-NEXT: add v26.4s, v1.4s, v21.4s2061; CHECK-NEXT: add v20.4s, v20.4s, v21.4s2062; CHECK-NEXT: addhn v1.4h, v5.4s, v0.4s2063; CHECK-NEXT: addhn v0.4h, v6.4s, v3.4s2064; CHECK-NEXT: addhn v3.4h, v7.4s, v26.4s2065; CHECK-NEXT: addhn v2.4h, v16.4s, v20.4s2066; CHECK-NEXT: add v5.4s, v22.4s, v21.4s2067; CHECK-NEXT: add v6.4s, v23.4s, v21.4s2068; CHECK-NEXT: add v7.4s, v24.4s, v21.4s2069; CHECK-NEXT: add v16.4s, v25.4s, v21.4s2070; CHECK-NEXT: addhn2 v0.8h, v18.4s, v5.4s2071; CHECK-NEXT: addhn2 v1.8h, v17.4s, v6.4s2072; CHECK-NEXT: addhn2 v3.8h, v4.4s, v7.4s2073; CHECK-NEXT: addhn2 v2.8h, v19.4s, v16.4s2074; CHECK-NEXT: ret2075entry:2076 %c = uitofp <32 x i8> %a to <32 x bfloat>2077 ret <32 x bfloat> %c2078}2079;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:2080; CHECK-GI: {{.*}}2081; CHECK-GI-FP16: {{.*}}2082; CHECK-GI-NOFP16: {{.*}}2083; CHECK-SD: {{.*}}2084; CHECK-SD-FP16: {{.*}}2085; CHECK-SD-NOFP16: {{.*}}2086