853 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mattr=+sve,+bf16 < %s | FileCheck %s --check-prefixes=CHECK,SVE3; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s --check-prefixes=CHECK,STREAMING-SVE4 5target triple = "aarch64-unknown-linux-gnu"6 7define <vscale x 2 x i1> @fptosi_nxv2bf16_to_nxv2i1(<vscale x 2 x bfloat> %a) {8; CHECK-LABEL: fptosi_nxv2bf16_to_nxv2i1:9; CHECK: // %bb.0:10; CHECK-NEXT: lsl z0.s, z0.s, #1611; CHECK-NEXT: ptrue p0.d12; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s13; CHECK-NEXT: cmpne p0.d, p0/z, z0.d, #014; CHECK-NEXT: ret15 %res = fptosi <vscale x 2 x bfloat> %a to <vscale x 2 x i1>16 ret <vscale x 2 x i1> %res17}18 19define <vscale x 2 x i8> @fptosi_nxv2bf16_to_nxv2i8(<vscale x 2 x bfloat> %a) {20; CHECK-LABEL: fptosi_nxv2bf16_to_nxv2i8:21; CHECK: // %bb.0:22; CHECK-NEXT: lsl z0.s, z0.s, #1623; CHECK-NEXT: ptrue p0.d24; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s25; CHECK-NEXT: ret26 %res = fptosi <vscale x 2 x bfloat> %a to <vscale x 2 x i8>27 ret <vscale x 2 x i8> %res28}29 30define <vscale x 2 x i16> @fptosi_nxv2bf16_to_nxv2i16(<vscale x 2 x bfloat> %a) {31; CHECK-LABEL: fptosi_nxv2bf16_to_nxv2i16:32; CHECK: // %bb.0:33; CHECK-NEXT: lsl z0.s, z0.s, #1634; CHECK-NEXT: ptrue p0.d35; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s36; CHECK-NEXT: ret37 %res = fptosi <vscale x 2 x bfloat> %a to <vscale x 2 x i16>38 ret <vscale x 2 x i16> %res39}40 41define <vscale x 2 x i32> @fptosi_nxv2bf16_to_nxv2i32(<vscale x 2 x bfloat> %a) {42; CHECK-LABEL: fptosi_nxv2bf16_to_nxv2i32:43; CHECK: // %bb.0:44; CHECK-NEXT: lsl z0.s, z0.s, #1645; CHECK-NEXT: ptrue p0.d46; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s47; CHECK-NEXT: ret48 %res = fptosi <vscale x 2 x bfloat> %a to <vscale x 2 x i32>49 ret <vscale x 2 x i32> %res50}51 52define <vscale x 2 x i64> @fptosi_nxv2bf16_to_nxv2i64(<vscale x 2 x bfloat> %a) {53; CHECK-LABEL: fptosi_nxv2bf16_to_nxv2i64:54; CHECK: // %bb.0:55; CHECK-NEXT: lsl z0.s, z0.s, #1656; CHECK-NEXT: ptrue p0.d57; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s58; CHECK-NEXT: ret59 %res = fptosi <vscale x 2 x bfloat> %a to <vscale x 2 x i64>60 ret <vscale x 2 x i64> %res61}62 63define <vscale x 4 x i1> @fptosi_nxv4bf16_to_nxv4i1(<vscale x 4 x bfloat> %a) {64; CHECK-LABEL: fptosi_nxv4bf16_to_nxv4i1:65; CHECK: // %bb.0:66; CHECK-NEXT: lsl z0.s, z0.s, #1667; CHECK-NEXT: ptrue p0.s68; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s69; CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #070; CHECK-NEXT: ret71 %res = fptosi <vscale x 4 x bfloat> %a to <vscale x 4 x i1>72 ret <vscale x 4 x i1> %res73}74 75define <vscale x 4 x i8> @fptosi_nxv4bf16_to_nxv4i8(<vscale x 4 x bfloat> %a) {76; CHECK-LABEL: fptosi_nxv4bf16_to_nxv4i8:77; CHECK: // %bb.0:78; CHECK-NEXT: lsl z0.s, z0.s, #1679; CHECK-NEXT: ptrue p0.s80; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s81; CHECK-NEXT: ret82 %res = fptosi <vscale x 4 x bfloat> %a to <vscale x 4 x i8>83 ret <vscale x 4 x i8> %res84}85 86define <vscale x 4 x i16> @fptosi_nxv4bf16_to_nxv4i16(<vscale x 4 x bfloat> %a) {87; CHECK-LABEL: fptosi_nxv4bf16_to_nxv4i16:88; CHECK: // %bb.0:89; CHECK-NEXT: lsl z0.s, z0.s, #1690; CHECK-NEXT: ptrue p0.s91; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s92; CHECK-NEXT: ret93 %res = fptosi <vscale x 4 x bfloat> %a to <vscale x 4 x i16>94 ret <vscale x 4 x i16> %res95}96 97define <vscale x 4 x i32> @fptosi_nxv4bf16_to_nxv4i32(<vscale x 4 x bfloat> %a) {98; CHECK-LABEL: fptosi_nxv4bf16_to_nxv4i32:99; CHECK: // %bb.0:100; CHECK-NEXT: lsl z0.s, z0.s, #16101; CHECK-NEXT: ptrue p0.s102; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s103; CHECK-NEXT: ret104 %res = fptosi <vscale x 4 x bfloat> %a to <vscale x 4 x i32>105 ret <vscale x 4 x i32> %res106}107 108define <vscale x 4 x i64> @fptosi_nxv4bf16_to_nxv4i64(<vscale x 4 x bfloat> %a) {109; CHECK-LABEL: fptosi_nxv4bf16_to_nxv4i64:110; CHECK: // %bb.0:111; CHECK-NEXT: uunpklo z1.d, z0.s112; CHECK-NEXT: uunpkhi z0.d, z0.s113; CHECK-NEXT: ptrue p0.d114; CHECK-NEXT: lsl z1.s, z1.s, #16115; CHECK-NEXT: lsl z2.s, z0.s, #16116; CHECK-NEXT: movprfx z0, z1117; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.s118; CHECK-NEXT: movprfx z1, z2119; CHECK-NEXT: fcvtzs z1.d, p0/m, z2.s120; CHECK-NEXT: ret121 %res = fptosi <vscale x 4 x bfloat> %a to <vscale x 4 x i64>122 ret <vscale x 4 x i64> %res123}124 125define <vscale x 8 x i1> @fptosi_nxv8bf16_to_nxv8i1(<vscale x 8 x bfloat> %a) {126; CHECK-LABEL: fptosi_nxv8bf16_to_nxv8i1:127; CHECK: // %bb.0:128; CHECK-NEXT: uunpkhi z1.s, z0.h129; CHECK-NEXT: uunpklo z0.s, z0.h130; CHECK-NEXT: ptrue p0.s131; CHECK-NEXT: lsl z1.s, z1.s, #16132; CHECK-NEXT: lsl z0.s, z0.s, #16133; CHECK-NEXT: fcvtzs z1.s, p0/m, z1.s134; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s135; CHECK-NEXT: ptrue p0.h136; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h137; CHECK-NEXT: cmpne p0.h, p0/z, z0.h, #0138; CHECK-NEXT: ret139 %res = fptosi <vscale x 8 x bfloat> %a to <vscale x 8 x i1>140 ret <vscale x 8 x i1> %res141}142 143define <vscale x 8 x i8> @fptosi_nxv8bf16_to_nxv8i8(<vscale x 8 x bfloat> %a) {144; CHECK-LABEL: fptosi_nxv8bf16_to_nxv8i8:145; CHECK: // %bb.0:146; CHECK-NEXT: uunpkhi z1.s, z0.h147; CHECK-NEXT: uunpklo z0.s, z0.h148; CHECK-NEXT: ptrue p0.s149; CHECK-NEXT: lsl z1.s, z1.s, #16150; CHECK-NEXT: lsl z0.s, z0.s, #16151; CHECK-NEXT: fcvtzs z1.s, p0/m, z1.s152; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s153; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h154; CHECK-NEXT: ret155 %res = fptosi <vscale x 8 x bfloat> %a to <vscale x 8 x i8>156 ret <vscale x 8 x i8> %res157}158 159define <vscale x 8 x i16> @fptosi_nxv8bf16_to_nxv8i16(<vscale x 8 x bfloat> %a) {160; CHECK-LABEL: fptosi_nxv8bf16_to_nxv8i16:161; CHECK: // %bb.0:162; CHECK-NEXT: uunpkhi z1.s, z0.h163; CHECK-NEXT: uunpklo z0.s, z0.h164; CHECK-NEXT: ptrue p0.s165; CHECK-NEXT: lsl z1.s, z1.s, #16166; CHECK-NEXT: lsl z0.s, z0.s, #16167; CHECK-NEXT: fcvtzs z1.s, p0/m, z1.s168; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s169; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h170; CHECK-NEXT: ret171 %res = fptosi <vscale x 8 x bfloat> %a to <vscale x 8 x i16>172 ret <vscale x 8 x i16> %res173}174 175define <vscale x 8 x i32> @fptosi_nxv8bf16_to_nxv8i32(<vscale x 8 x bfloat> %a) {176; CHECK-LABEL: fptosi_nxv8bf16_to_nxv8i32:177; CHECK: // %bb.0:178; CHECK-NEXT: uunpklo z1.s, z0.h179; CHECK-NEXT: uunpkhi z0.s, z0.h180; CHECK-NEXT: ptrue p0.s181; CHECK-NEXT: lsl z1.s, z1.s, #16182; CHECK-NEXT: lsl z2.s, z0.s, #16183; CHECK-NEXT: movprfx z0, z1184; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.s185; CHECK-NEXT: movprfx z1, z2186; CHECK-NEXT: fcvtzs z1.s, p0/m, z2.s187; CHECK-NEXT: ret188 %res = fptosi <vscale x 8 x bfloat> %a to <vscale x 8 x i32>189 ret <vscale x 8 x i32> %res190}191 192define <vscale x 8 x i64> @fptosi_nxv8bf16_to_nxv8i64(<vscale x 8 x bfloat> %a) {193; CHECK-LABEL: fptosi_nxv8bf16_to_nxv8i64:194; CHECK: // %bb.0:195; CHECK-NEXT: uunpklo z1.s, z0.h196; CHECK-NEXT: uunpkhi z0.s, z0.h197; CHECK-NEXT: ptrue p0.d198; CHECK-NEXT: uunpklo z2.d, z1.s199; CHECK-NEXT: uunpkhi z1.d, z1.s200; CHECK-NEXT: uunpklo z3.d, z0.s201; CHECK-NEXT: uunpkhi z0.d, z0.s202; CHECK-NEXT: lsl z1.s, z1.s, #16203; CHECK-NEXT: lsl z2.s, z2.s, #16204; CHECK-NEXT: lsl z3.s, z3.s, #16205; CHECK-NEXT: lsl z4.s, z0.s, #16206; CHECK-NEXT: fcvtzs z1.d, p0/m, z1.s207; CHECK-NEXT: movprfx z0, z2208; CHECK-NEXT: fcvtzs z0.d, p0/m, z2.s209; CHECK-NEXT: movprfx z2, z3210; CHECK-NEXT: fcvtzs z2.d, p0/m, z3.s211; CHECK-NEXT: movprfx z3, z4212; CHECK-NEXT: fcvtzs z3.d, p0/m, z4.s213; CHECK-NEXT: ret214 %res = fptosi <vscale x 8 x bfloat> %a to <vscale x 8 x i64>215 ret <vscale x 8 x i64> %res216}217 218define <vscale x 2 x i1> @fptoui_nxv2bf16_to_nxv2i1(<vscale x 2 x bfloat> %a) {219; CHECK-LABEL: fptoui_nxv2bf16_to_nxv2i1:220; CHECK: // %bb.0:221; CHECK-NEXT: lsl z0.s, z0.s, #16222; CHECK-NEXT: ptrue p0.d223; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.s224; CHECK-NEXT: cmpne p0.d, p0/z, z0.d, #0225; CHECK-NEXT: ret226 %res = fptoui <vscale x 2 x bfloat> %a to <vscale x 2 x i1>227 ret <vscale x 2 x i1> %res228}229 230; NOTE: Using fcvtzs is safe as fptoui overflow is considered poison and a231; 64bit signed value encompasses the entire range of a 16bit unsigned value.232define <vscale x 2 x i8> @fptoui_nxv2bf16_to_nxv2i8(<vscale x 2 x bfloat> %a) {233; CHECK-LABEL: fptoui_nxv2bf16_to_nxv2i8:234; CHECK: // %bb.0:235; CHECK-NEXT: lsl z0.s, z0.s, #16236; CHECK-NEXT: ptrue p0.d237; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s238; CHECK-NEXT: ret239 %res = fptoui <vscale x 2 x bfloat> %a to <vscale x 2 x i8>240 ret <vscale x 2 x i8> %res241}242 243define <vscale x 2 x i16> @fptoui_nxv2bf16_to_nxv2i16(<vscale x 2 x bfloat> %a) {244; CHECK-LABEL: fptoui_nxv2bf16_to_nxv2i16:245; CHECK: // %bb.0:246; CHECK-NEXT: lsl z0.s, z0.s, #16247; CHECK-NEXT: ptrue p0.d248; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s249; CHECK-NEXT: ret250 %res = fptoui <vscale x 2 x bfloat> %a to <vscale x 2 x i16>251 ret <vscale x 2 x i16> %res252}253 254define <vscale x 2 x i32> @fptoui_nxv2bf16_to_nxv2i32(<vscale x 2 x bfloat> %a) {255; CHECK-LABEL: fptoui_nxv2bf16_to_nxv2i32:256; CHECK: // %bb.0:257; CHECK-NEXT: lsl z0.s, z0.s, #16258; CHECK-NEXT: ptrue p0.d259; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s260; CHECK-NEXT: ret261 %res = fptoui <vscale x 2 x bfloat> %a to <vscale x 2 x i32>262 ret <vscale x 2 x i32> %res263}264 265define <vscale x 2 x i64> @fptoui_nxv2bf16_to_nxv2i64(<vscale x 2 x bfloat> %a) {266; CHECK-LABEL: fptoui_nxv2bf16_to_nxv2i64:267; CHECK: // %bb.0:268; CHECK-NEXT: lsl z0.s, z0.s, #16269; CHECK-NEXT: ptrue p0.d270; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.s271; CHECK-NEXT: ret272 %res = fptoui <vscale x 2 x bfloat> %a to <vscale x 2 x i64>273 ret <vscale x 2 x i64> %res274}275 276define <vscale x 4 x i1> @fptoui_nxv4bf16_to_nxv4i1(<vscale x 4 x bfloat> %a) {277; CHECK-LABEL: fptoui_nxv4bf16_to_nxv4i1:278; CHECK: // %bb.0:279; CHECK-NEXT: lsl z0.s, z0.s, #16280; CHECK-NEXT: ptrue p0.s281; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s282; CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #0283; CHECK-NEXT: ret284 %res = fptoui <vscale x 4 x bfloat> %a to <vscale x 4 x i1>285 ret <vscale x 4 x i1> %res286}287 288define <vscale x 4 x i8> @fptoui_nxv4bf16_to_nxv4i8(<vscale x 4 x bfloat> %a) {289; CHECK-LABEL: fptoui_nxv4bf16_to_nxv4i8:290; CHECK: // %bb.0:291; CHECK-NEXT: lsl z0.s, z0.s, #16292; CHECK-NEXT: ptrue p0.s293; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s294; CHECK-NEXT: ret295 %res = fptoui <vscale x 4 x bfloat> %a to <vscale x 4 x i8>296 ret <vscale x 4 x i8> %res297}298 299define <vscale x 4 x i16> @fptoui_nxv4bf16_to_nxv4i16(<vscale x 4 x bfloat> %a) {300; CHECK-LABEL: fptoui_nxv4bf16_to_nxv4i16:301; CHECK: // %bb.0:302; CHECK-NEXT: lsl z0.s, z0.s, #16303; CHECK-NEXT: ptrue p0.s304; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s305; CHECK-NEXT: ret306 %res = fptoui <vscale x 4 x bfloat> %a to <vscale x 4 x i16>307 ret <vscale x 4 x i16> %res308}309 310define <vscale x 4 x i32> @fptoui_nxv4bf16_to_nxv4i32(<vscale x 4 x bfloat> %a) {311; CHECK-LABEL: fptoui_nxv4bf16_to_nxv4i32:312; CHECK: // %bb.0:313; CHECK-NEXT: lsl z0.s, z0.s, #16314; CHECK-NEXT: ptrue p0.s315; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s316; CHECK-NEXT: ret317 %res = fptoui <vscale x 4 x bfloat> %a to <vscale x 4 x i32>318 ret <vscale x 4 x i32> %res319}320 321define <vscale x 4 x i64> @fptoui_nxv4bf16_to_nxv4i64(<vscale x 4 x bfloat> %a) {322; CHECK-LABEL: fptoui_nxv4bf16_to_nxv4i64:323; CHECK: // %bb.0:324; CHECK-NEXT: uunpklo z1.d, z0.s325; CHECK-NEXT: uunpkhi z0.d, z0.s326; CHECK-NEXT: ptrue p0.d327; CHECK-NEXT: lsl z1.s, z1.s, #16328; CHECK-NEXT: lsl z2.s, z0.s, #16329; CHECK-NEXT: movprfx z0, z1330; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.s331; CHECK-NEXT: movprfx z1, z2332; CHECK-NEXT: fcvtzu z1.d, p0/m, z2.s333; CHECK-NEXT: ret334 %res = fptoui <vscale x 4 x bfloat> %a to <vscale x 4 x i64>335 ret <vscale x 4 x i64> %res336}337 338define <vscale x 8 x i1> @fptoui_nxv8bf16_to_nxv8i1(<vscale x 8 x bfloat> %a) {339; CHECK-LABEL: fptoui_nxv8bf16_to_nxv8i1:340; CHECK: // %bb.0:341; CHECK-NEXT: uunpkhi z1.s, z0.h342; CHECK-NEXT: uunpklo z0.s, z0.h343; CHECK-NEXT: ptrue p0.s344; CHECK-NEXT: lsl z1.s, z1.s, #16345; CHECK-NEXT: lsl z0.s, z0.s, #16346; CHECK-NEXT: fcvtzs z1.s, p0/m, z1.s347; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s348; CHECK-NEXT: ptrue p0.h349; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h350; CHECK-NEXT: cmpne p0.h, p0/z, z0.h, #0351; CHECK-NEXT: ret352 %res = fptoui <vscale x 8 x bfloat> %a to <vscale x 8 x i1>353 ret <vscale x 8 x i1> %res354}355 356define <vscale x 8 x i8> @fptoui_nxv8bf16_to_nxv8i8(<vscale x 8 x bfloat> %a) {357; CHECK-LABEL: fptoui_nxv8bf16_to_nxv8i8:358; CHECK: // %bb.0:359; CHECK-NEXT: uunpkhi z1.s, z0.h360; CHECK-NEXT: uunpklo z0.s, z0.h361; CHECK-NEXT: ptrue p0.s362; CHECK-NEXT: lsl z1.s, z1.s, #16363; CHECK-NEXT: lsl z0.s, z0.s, #16364; CHECK-NEXT: fcvtzs z1.s, p0/m, z1.s365; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s366; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h367; CHECK-NEXT: ret368 %res = fptoui <vscale x 8 x bfloat> %a to <vscale x 8 x i8>369 ret <vscale x 8 x i8> %res370}371 372define <vscale x 8 x i16> @fptoui_nxv8bf16_to_nxv8i16(<vscale x 8 x bfloat> %a) {373; CHECK-LABEL: fptoui_nxv8bf16_to_nxv8i16:374; CHECK: // %bb.0:375; CHECK-NEXT: uunpkhi z1.s, z0.h376; CHECK-NEXT: uunpklo z0.s, z0.h377; CHECK-NEXT: ptrue p0.s378; CHECK-NEXT: lsl z1.s, z1.s, #16379; CHECK-NEXT: lsl z0.s, z0.s, #16380; CHECK-NEXT: fcvtzs z1.s, p0/m, z1.s381; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s382; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h383; CHECK-NEXT: ret384 %res = fptoui <vscale x 8 x bfloat> %a to <vscale x 8 x i16>385 ret <vscale x 8 x i16> %res386}387 388define <vscale x 8 x i32> @fptoui_nxv8bf16_to_nxv8i32(<vscale x 8 x bfloat> %a) {389; CHECK-LABEL: fptoui_nxv8bf16_to_nxv8i32:390; CHECK: // %bb.0:391; CHECK-NEXT: uunpklo z1.s, z0.h392; CHECK-NEXT: uunpkhi z0.s, z0.h393; CHECK-NEXT: ptrue p0.s394; CHECK-NEXT: lsl z1.s, z1.s, #16395; CHECK-NEXT: lsl z2.s, z0.s, #16396; CHECK-NEXT: movprfx z0, z1397; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.s398; CHECK-NEXT: movprfx z1, z2399; CHECK-NEXT: fcvtzu z1.s, p0/m, z2.s400; CHECK-NEXT: ret401 %res = fptoui <vscale x 8 x bfloat> %a to <vscale x 8 x i32>402 ret <vscale x 8 x i32> %res403}404 405define <vscale x 8 x i64> @fptoui_nxv8bf16_to_nxv8i64(<vscale x 8 x bfloat> %a) {406; CHECK-LABEL: fptoui_nxv8bf16_to_nxv8i64:407; CHECK: // %bb.0:408; CHECK-NEXT: uunpklo z1.s, z0.h409; CHECK-NEXT: uunpkhi z0.s, z0.h410; CHECK-NEXT: ptrue p0.d411; CHECK-NEXT: uunpklo z2.d, z1.s412; CHECK-NEXT: uunpkhi z1.d, z1.s413; CHECK-NEXT: uunpklo z3.d, z0.s414; CHECK-NEXT: uunpkhi z0.d, z0.s415; CHECK-NEXT: lsl z1.s, z1.s, #16416; CHECK-NEXT: lsl z2.s, z2.s, #16417; CHECK-NEXT: lsl z3.s, z3.s, #16418; CHECK-NEXT: lsl z4.s, z0.s, #16419; CHECK-NEXT: fcvtzu z1.d, p0/m, z1.s420; CHECK-NEXT: movprfx z0, z2421; CHECK-NEXT: fcvtzu z0.d, p0/m, z2.s422; CHECK-NEXT: movprfx z2, z3423; CHECK-NEXT: fcvtzu z2.d, p0/m, z3.s424; CHECK-NEXT: movprfx z3, z4425; CHECK-NEXT: fcvtzu z3.d, p0/m, z4.s426; CHECK-NEXT: ret427 %res = fptoui <vscale x 8 x bfloat> %a to <vscale x 8 x i64>428 ret <vscale x 8 x i64> %res429}430 431; NOTE: f16(-1.875) == bf16(-1.0)432define <vscale x 2 x bfloat> @sitofp_nxv2i1_to_nxv2bf16(<vscale x 2 x i1> %a) {433; SVE-LABEL: sitofp_nxv2i1_to_nxv2bf16:434; SVE: // %bb.0:435; SVE-NEXT: movi v0.2d, #0000000000000000436; SVE-NEXT: fmov z0.h, p0/m, #-1.87500000437; SVE-NEXT: ret438;439; STREAMING-SVE-LABEL: sitofp_nxv2i1_to_nxv2bf16:440; STREAMING-SVE: // %bb.0:441; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0442; STREAMING-SVE-NEXT: fmov z0.h, p0/m, #-1.87500000443; STREAMING-SVE-NEXT: ret444 %res = sitofp <vscale x 2 x i1> %a to <vscale x 2 x bfloat>445 ret <vscale x 2 x bfloat> %res446}447 448define <vscale x 2 x bfloat> @sitofp_nxv2i8_to_nxv2bf16(<vscale x 2 x i8> %a) {449; CHECK-LABEL: sitofp_nxv2i8_to_nxv2bf16:450; CHECK: // %bb.0:451; CHECK-NEXT: ptrue p0.d452; CHECK-NEXT: sxtb z0.d, p0/m, z0.d453; CHECK-NEXT: scvtf z0.s, p0/m, z0.d454; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s455; CHECK-NEXT: ret456 %res = sitofp <vscale x 2 x i8> %a to <vscale x 2 x bfloat>457 ret <vscale x 2 x bfloat> %res458}459 460define <vscale x 2 x bfloat> @sitofp_nxv2i16_to_nxv2bf16(<vscale x 2 x i16> %a) {461; CHECK-LABEL: sitofp_nxv2i16_to_nxv2bf16:462; CHECK: // %bb.0:463; CHECK-NEXT: ptrue p0.d464; CHECK-NEXT: sxth z0.d, p0/m, z0.d465; CHECK-NEXT: scvtf z0.s, p0/m, z0.d466; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s467; CHECK-NEXT: ret468 %res = sitofp <vscale x 2 x i16> %a to <vscale x 2 x bfloat>469 ret <vscale x 2 x bfloat> %res470}471 472define <vscale x 2 x bfloat> @sitofp_nxv2i32_to_nxv2bf16(<vscale x 2 x i32> %a) {473; CHECK-LABEL: sitofp_nxv2i32_to_nxv2bf16:474; CHECK: // %bb.0:475; CHECK-NEXT: ptrue p0.d476; CHECK-NEXT: scvtf z0.s, p0/m, z0.s477; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s478; CHECK-NEXT: ret479 %res = sitofp <vscale x 2 x i32> %a to <vscale x 2 x bfloat>480 ret <vscale x 2 x bfloat> %res481}482 483define <vscale x 2 x bfloat> @sitofp_nxv2i64_to_nxv2bf16(<vscale x 2 x i64> %a) {484; CHECK-LABEL: sitofp_nxv2i64_to_nxv2bf16:485; CHECK: // %bb.0:486; CHECK-NEXT: ptrue p0.d487; CHECK-NEXT: scvtf z0.s, p0/m, z0.d488; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s489; CHECK-NEXT: ret490 %res = sitofp <vscale x 2 x i64> %a to <vscale x 2 x bfloat>491 ret <vscale x 2 x bfloat> %res492}493 494define <vscale x 4 x bfloat> @sitofp_nxv4i1_to_nxv4bf16(<vscale x 4 x i1> %a) {495; SVE-LABEL: sitofp_nxv4i1_to_nxv4bf16:496; SVE: // %bb.0:497; SVE-NEXT: movi v0.2d, #0000000000000000498; SVE-NEXT: fmov z0.h, p0/m, #-1.87500000499; SVE-NEXT: ret500;501; STREAMING-SVE-LABEL: sitofp_nxv4i1_to_nxv4bf16:502; STREAMING-SVE: // %bb.0:503; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0504; STREAMING-SVE-NEXT: fmov z0.h, p0/m, #-1.87500000505; STREAMING-SVE-NEXT: ret506 %res = sitofp <vscale x 4 x i1> %a to <vscale x 4 x bfloat>507 ret <vscale x 4 x bfloat> %res508}509 510define <vscale x 4 x bfloat> @sitofp_nxv4i8_to_nxv4bf16(<vscale x 4 x i8> %a) {511; CHECK-LABEL: sitofp_nxv4i8_to_nxv4bf16:512; CHECK: // %bb.0:513; CHECK-NEXT: ptrue p0.s514; CHECK-NEXT: sxtb z0.s, p0/m, z0.s515; CHECK-NEXT: scvtf z0.s, p0/m, z0.s516; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s517; CHECK-NEXT: ret518 %res = sitofp <vscale x 4 x i8> %a to <vscale x 4 x bfloat>519 ret <vscale x 4 x bfloat> %res520}521 522define <vscale x 4 x bfloat> @sitofp_nxv4i16_to_nxv4bf16(<vscale x 4 x i16> %a) {523; CHECK-LABEL: sitofp_nxv4i16_to_nxv4bf16:524; CHECK: // %bb.0:525; CHECK-NEXT: ptrue p0.s526; CHECK-NEXT: sxth z0.s, p0/m, z0.s527; CHECK-NEXT: scvtf z0.s, p0/m, z0.s528; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s529; CHECK-NEXT: ret530 %res = sitofp <vscale x 4 x i16> %a to <vscale x 4 x bfloat>531 ret <vscale x 4 x bfloat> %res532}533 534define <vscale x 4 x bfloat> @sitofp_nxv4i32_to_nxv4bf16(<vscale x 4 x i32> %a) {535; CHECK-LABEL: sitofp_nxv4i32_to_nxv4bf16:536; CHECK: // %bb.0:537; CHECK-NEXT: ptrue p0.s538; CHECK-NEXT: scvtf z0.s, p0/m, z0.s539; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s540; CHECK-NEXT: ret541 %res = sitofp <vscale x 4 x i32> %a to <vscale x 4 x bfloat>542 ret <vscale x 4 x bfloat> %res543}544 545define <vscale x 4 x bfloat> @sitofp_nxv4i64_to_nxv4bf16(<vscale x 4 x i64> %a) {546; CHECK-LABEL: sitofp_nxv4i64_to_nxv4bf16:547; CHECK: // %bb.0:548; CHECK-NEXT: ptrue p0.d549; CHECK-NEXT: scvtf z1.s, p0/m, z1.d550; CHECK-NEXT: scvtf z0.s, p0/m, z0.d551; CHECK-NEXT: bfcvt z1.h, p0/m, z1.s552; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s553; CHECK-NEXT: uzp1 z0.s, z0.s, z1.s554; CHECK-NEXT: ret555 %res = sitofp <vscale x 4 x i64> %a to <vscale x 4 x bfloat>556 ret <vscale x 4 x bfloat> %res557}558 559define <vscale x 8 x bfloat> @sitofp_nxv8i1_to_nxv8bf16(<vscale x 8 x i1> %a) {560; SVE-LABEL: sitofp_nxv8i1_to_nxv8bf16:561; SVE: // %bb.0:562; SVE-NEXT: movi v0.2d, #0000000000000000563; SVE-NEXT: fmov z0.h, p0/m, #-1.87500000564; SVE-NEXT: ret565;566; STREAMING-SVE-LABEL: sitofp_nxv8i1_to_nxv8bf16:567; STREAMING-SVE: // %bb.0:568; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0569; STREAMING-SVE-NEXT: fmov z0.h, p0/m, #-1.87500000570; STREAMING-SVE-NEXT: ret571 %res = sitofp <vscale x 8 x i1> %a to <vscale x 8 x bfloat>572 ret <vscale x 8 x bfloat> %res573}574 575define <vscale x 8 x bfloat> @sitofp_nxv8i8_to_nxv8bf16(<vscale x 8 x i8> %a) {576; CHECK-LABEL: sitofp_nxv8i8_to_nxv8bf16:577; CHECK: // %bb.0:578; CHECK-NEXT: ptrue p0.h579; CHECK-NEXT: sxtb z0.h, p0/m, z0.h580; CHECK-NEXT: ptrue p0.s581; CHECK-NEXT: sunpkhi z1.s, z0.h582; CHECK-NEXT: sunpklo z0.s, z0.h583; CHECK-NEXT: scvtf z1.s, p0/m, z1.s584; CHECK-NEXT: scvtf z0.s, p0/m, z0.s585; CHECK-NEXT: bfcvt z1.h, p0/m, z1.s586; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s587; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h588; CHECK-NEXT: ret589 %res = sitofp <vscale x 8 x i8> %a to <vscale x 8 x bfloat>590 ret <vscale x 8 x bfloat> %res591}592 593define <vscale x 8 x bfloat> @sitofp_nxv8i16_to_nxv8bf16(<vscale x 8 x i16> %a) {594; CHECK-LABEL: sitofp_nxv8i16_to_nxv8bf16:595; CHECK: // %bb.0:596; CHECK-NEXT: sunpkhi z1.s, z0.h597; CHECK-NEXT: sunpklo z0.s, z0.h598; CHECK-NEXT: ptrue p0.s599; CHECK-NEXT: scvtf z1.s, p0/m, z1.s600; CHECK-NEXT: scvtf z0.s, p0/m, z0.s601; CHECK-NEXT: bfcvt z1.h, p0/m, z1.s602; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s603; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h604; CHECK-NEXT: ret605 %res = sitofp <vscale x 8 x i16> %a to <vscale x 8 x bfloat>606 ret <vscale x 8 x bfloat> %res607}608 609define <vscale x 8 x bfloat> @sitofp_nxv8i32_to_nxv8bf16(<vscale x 8 x i32> %a) {610; CHECK-LABEL: sitofp_nxv8i32_to_nxv8bf16:611; CHECK: // %bb.0:612; CHECK-NEXT: ptrue p0.s613; CHECK-NEXT: scvtf z1.s, p0/m, z1.s614; CHECK-NEXT: scvtf z0.s, p0/m, z0.s615; CHECK-NEXT: bfcvt z1.h, p0/m, z1.s616; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s617; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h618; CHECK-NEXT: ret619 %res = sitofp <vscale x 8 x i32> %a to <vscale x 8 x bfloat>620 ret <vscale x 8 x bfloat> %res621}622 623define <vscale x 8 x bfloat> @sitofp_nxv8i64_to_nxv8bf16(<vscale x 8 x i64> %a) {624; CHECK-LABEL: sitofp_nxv8i64_to_nxv8bf16:625; CHECK: // %bb.0:626; CHECK-NEXT: ptrue p0.d627; CHECK-NEXT: scvtf z3.s, p0/m, z3.d628; CHECK-NEXT: scvtf z2.s, p0/m, z2.d629; CHECK-NEXT: scvtf z1.s, p0/m, z1.d630; CHECK-NEXT: scvtf z0.s, p0/m, z0.d631; CHECK-NEXT: bfcvt z3.h, p0/m, z3.s632; CHECK-NEXT: bfcvt z2.h, p0/m, z2.s633; CHECK-NEXT: bfcvt z1.h, p0/m, z1.s634; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s635; CHECK-NEXT: uzp1 z2.s, z2.s, z3.s636; CHECK-NEXT: uzp1 z0.s, z0.s, z1.s637; CHECK-NEXT: uzp1 z0.h, z0.h, z2.h638; CHECK-NEXT: ret639 %res = sitofp <vscale x 8 x i64> %a to <vscale x 8 x bfloat>640 ret <vscale x 8 x bfloat> %res641}642 643; NOTE: f16(1.875) == bf16(1.0)644define <vscale x 2 x bfloat> @uitofp_nxv2i1_to_nxv2bf16(<vscale x 2 x i1> %a) {645; SVE-LABEL: uitofp_nxv2i1_to_nxv2bf16:646; SVE: // %bb.0:647; SVE-NEXT: movi v0.2d, #0000000000000000648; SVE-NEXT: fmov z0.h, p0/m, #1.87500000649; SVE-NEXT: ret650;651; STREAMING-SVE-LABEL: uitofp_nxv2i1_to_nxv2bf16:652; STREAMING-SVE: // %bb.0:653; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0654; STREAMING-SVE-NEXT: fmov z0.h, p0/m, #1.87500000655; STREAMING-SVE-NEXT: ret656 %res = uitofp <vscale x 2 x i1> %a to <vscale x 2 x bfloat>657 ret <vscale x 2 x bfloat> %res658}659 660define <vscale x 2 x bfloat> @uitofp_nxv2i8_to_nxv2bf16(<vscale x 2 x i8> %a) {661; CHECK-LABEL: uitofp_nxv2i8_to_nxv2bf16:662; CHECK: // %bb.0:663; CHECK-NEXT: and z0.d, z0.d, #0xff664; CHECK-NEXT: ptrue p0.d665; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d666; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s667; CHECK-NEXT: ret668 %res = uitofp <vscale x 2 x i8> %a to <vscale x 2 x bfloat>669 ret <vscale x 2 x bfloat> %res670}671 672define <vscale x 2 x bfloat> @uitofp_nxv2i16_to_nxv2bf16(<vscale x 2 x i16> %a) {673; CHECK-LABEL: uitofp_nxv2i16_to_nxv2bf16:674; CHECK: // %bb.0:675; CHECK-NEXT: and z0.d, z0.d, #0xffff676; CHECK-NEXT: ptrue p0.d677; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d678; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s679; CHECK-NEXT: ret680 %res = uitofp <vscale x 2 x i16> %a to <vscale x 2 x bfloat>681 ret <vscale x 2 x bfloat> %res682}683 684define <vscale x 2 x bfloat> @uitofp_nxv2i32_to_nxv2bf16(<vscale x 2 x i32> %a) {685; CHECK-LABEL: uitofp_nxv2i32_to_nxv2bf16:686; CHECK: // %bb.0:687; CHECK-NEXT: ptrue p0.d688; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s689; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s690; CHECK-NEXT: ret691 %res = uitofp <vscale x 2 x i32> %a to <vscale x 2 x bfloat>692 ret <vscale x 2 x bfloat> %res693}694 695define <vscale x 2 x bfloat> @uitofp_nxv2i64_to_nxv2bf16(<vscale x 2 x i64> %a) {696; CHECK-LABEL: uitofp_nxv2i64_to_nxv2bf16:697; CHECK: // %bb.0:698; CHECK-NEXT: ptrue p0.d699; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d700; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s701; CHECK-NEXT: ret702 %res = uitofp <vscale x 2 x i64> %a to <vscale x 2 x bfloat>703 ret <vscale x 2 x bfloat> %res704}705 706define <vscale x 4 x bfloat> @uitofp_nxv4i1_to_nxv4bf16(<vscale x 4 x i1> %a) {707; SVE-LABEL: uitofp_nxv4i1_to_nxv4bf16:708; SVE: // %bb.0:709; SVE-NEXT: movi v0.2d, #0000000000000000710; SVE-NEXT: fmov z0.h, p0/m, #1.87500000711; SVE-NEXT: ret712;713; STREAMING-SVE-LABEL: uitofp_nxv4i1_to_nxv4bf16:714; STREAMING-SVE: // %bb.0:715; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0716; STREAMING-SVE-NEXT: fmov z0.h, p0/m, #1.87500000717; STREAMING-SVE-NEXT: ret718 %res = uitofp <vscale x 4 x i1> %a to <vscale x 4 x bfloat>719 ret <vscale x 4 x bfloat> %res720}721 722define <vscale x 4 x bfloat> @uitofp_nxv4i8_to_nxv4bf16(<vscale x 4 x i8> %a) {723; CHECK-LABEL: uitofp_nxv4i8_to_nxv4bf16:724; CHECK: // %bb.0:725; CHECK-NEXT: and z0.s, z0.s, #0xff726; CHECK-NEXT: ptrue p0.s727; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s728; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s729; CHECK-NEXT: ret730 %res = uitofp <vscale x 4 x i8> %a to <vscale x 4 x bfloat>731 ret <vscale x 4 x bfloat> %res732}733 734define <vscale x 4 x bfloat> @uitofp_nxv4i16_to_nxv4bf16(<vscale x 4 x i16> %a) {735; CHECK-LABEL: uitofp_nxv4i16_to_nxv4bf16:736; CHECK: // %bb.0:737; CHECK-NEXT: and z0.s, z0.s, #0xffff738; CHECK-NEXT: ptrue p0.s739; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s740; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s741; CHECK-NEXT: ret742 %res = uitofp <vscale x 4 x i16> %a to <vscale x 4 x bfloat>743 ret <vscale x 4 x bfloat> %res744}745 746define <vscale x 4 x bfloat> @uitofp_nxv4i32_to_nxv4bf16(<vscale x 4 x i32> %a) {747; CHECK-LABEL: uitofp_nxv4i32_to_nxv4bf16:748; CHECK: // %bb.0:749; CHECK-NEXT: ptrue p0.s750; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s751; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s752; CHECK-NEXT: ret753 %res = uitofp <vscale x 4 x i32> %a to <vscale x 4 x bfloat>754 ret <vscale x 4 x bfloat> %res755}756 757define <vscale x 4 x bfloat> @uitofp_nxv4i64_to_nxv4bf16(<vscale x 4 x i64> %a) {758; CHECK-LABEL: uitofp_nxv4i64_to_nxv4bf16:759; CHECK: // %bb.0:760; CHECK-NEXT: ptrue p0.d761; CHECK-NEXT: ucvtf z1.s, p0/m, z1.d762; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d763; CHECK-NEXT: bfcvt z1.h, p0/m, z1.s764; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s765; CHECK-NEXT: uzp1 z0.s, z0.s, z1.s766; CHECK-NEXT: ret767 %res = uitofp <vscale x 4 x i64> %a to <vscale x 4 x bfloat>768 ret <vscale x 4 x bfloat> %res769}770 771define <vscale x 8 x bfloat> @uitofp_nxv8i1_to_nxv8bf16(<vscale x 8 x i1> %a) {772; SVE-LABEL: uitofp_nxv8i1_to_nxv8bf16:773; SVE: // %bb.0:774; SVE-NEXT: movi v0.2d, #0000000000000000775; SVE-NEXT: fmov z0.h, p0/m, #1.87500000776; SVE-NEXT: ret777;778; STREAMING-SVE-LABEL: uitofp_nxv8i1_to_nxv8bf16:779; STREAMING-SVE: // %bb.0:780; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0781; STREAMING-SVE-NEXT: fmov z0.h, p0/m, #1.87500000782; STREAMING-SVE-NEXT: ret783 %res = uitofp <vscale x 8 x i1> %a to <vscale x 8 x bfloat>784 ret <vscale x 8 x bfloat> %res785}786 787define <vscale x 8 x bfloat> @uitofp_nxv8i8_to_nxv8bf16(<vscale x 8 x i8> %a) {788; CHECK-LABEL: uitofp_nxv8i8_to_nxv8bf16:789; CHECK: // %bb.0:790; CHECK-NEXT: and z0.h, z0.h, #0xff791; CHECK-NEXT: ptrue p0.s792; CHECK-NEXT: uunpkhi z1.s, z0.h793; CHECK-NEXT: uunpklo z0.s, z0.h794; CHECK-NEXT: ucvtf z1.s, p0/m, z1.s795; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s796; CHECK-NEXT: bfcvt z1.h, p0/m, z1.s797; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s798; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h799; CHECK-NEXT: ret800 %res = uitofp <vscale x 8 x i8> %a to <vscale x 8 x bfloat>801 ret <vscale x 8 x bfloat> %res802}803 804define <vscale x 8 x bfloat> @uitofp_nxv8i16_to_nxv8bf16(<vscale x 8 x i16> %a) {805; CHECK-LABEL: uitofp_nxv8i16_to_nxv8bf16:806; CHECK: // %bb.0:807; CHECK-NEXT: uunpkhi z1.s, z0.h808; CHECK-NEXT: uunpklo z0.s, z0.h809; CHECK-NEXT: ptrue p0.s810; CHECK-NEXT: ucvtf z1.s, p0/m, z1.s811; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s812; CHECK-NEXT: bfcvt z1.h, p0/m, z1.s813; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s814; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h815; CHECK-NEXT: ret816 %res = uitofp <vscale x 8 x i16> %a to <vscale x 8 x bfloat>817 ret <vscale x 8 x bfloat> %res818}819 820define <vscale x 8 x bfloat> @uitofp_nxv8i32_to_nxv8bf16(<vscale x 8 x i32> %a) {821; CHECK-LABEL: uitofp_nxv8i32_to_nxv8bf16:822; CHECK: // %bb.0:823; CHECK-NEXT: ptrue p0.s824; CHECK-NEXT: ucvtf z1.s, p0/m, z1.s825; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s826; CHECK-NEXT: bfcvt z1.h, p0/m, z1.s827; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s828; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h829; CHECK-NEXT: ret830 %res = uitofp <vscale x 8 x i32> %a to <vscale x 8 x bfloat>831 ret <vscale x 8 x bfloat> %res832}833 834define <vscale x 8 x bfloat> @uitofp_nxv8i64_to_nxv8bf16(<vscale x 8 x i64> %a) {835; CHECK-LABEL: uitofp_nxv8i64_to_nxv8bf16:836; CHECK: // %bb.0:837; CHECK-NEXT: ptrue p0.d838; CHECK-NEXT: ucvtf z3.s, p0/m, z3.d839; CHECK-NEXT: ucvtf z2.s, p0/m, z2.d840; CHECK-NEXT: ucvtf z1.s, p0/m, z1.d841; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d842; CHECK-NEXT: bfcvt z3.h, p0/m, z3.s843; CHECK-NEXT: bfcvt z2.h, p0/m, z2.s844; CHECK-NEXT: bfcvt z1.h, p0/m, z1.s845; CHECK-NEXT: bfcvt z0.h, p0/m, z0.s846; CHECK-NEXT: uzp1 z2.s, z2.s, z3.s847; CHECK-NEXT: uzp1 z0.s, z0.s, z1.s848; CHECK-NEXT: uzp1 z0.h, z0.h, z2.h849; CHECK-NEXT: ret850 %res = uitofp <vscale x 8 x i64> %a to <vscale x 8 x bfloat>851 ret <vscale x 8 x bfloat> %res852}853