brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.2 KiB · bdfe90c Raw
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