brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.5 KiB · b52b082 Raw
684 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -target-abi=ilp32d -mattr=+v,+zvfh,+zvfbfmin,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,ZVFH323; RUN: llc -mtriple=riscv64 -target-abi=lp64d -mattr=+v,+zvfh,+zvfbfmin,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,ZVFH644; RUN: llc -mtriple=riscv32 -target-abi=ilp32d -mattr=+v,+zvfhmin,+zvfbfmin,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,ZVFHMIN325; RUN: llc -mtriple=riscv64 -target-abi=lp64d -mattr=+v,+zvfhmin,+zvfbfmin,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,ZVFHMIN646 7define void @si2fp_v2i32_v2f32(ptr %x, ptr %y) {8; CHECK-LABEL: si2fp_v2i32_v2f32:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma11; CHECK-NEXT:    vle32.v v8, (a0)12; CHECK-NEXT:    vfcvt.f.x.v v8, v813; CHECK-NEXT:    vse32.v v8, (a1)14; CHECK-NEXT:    ret15  %a = load <2 x i32>, ptr %x16  %d = sitofp <2 x i32> %a to <2 x float>17  store <2 x float> %d, ptr %y18  ret void19}20 21define void @ui2fp_v2i32_v2f32(ptr %x, ptr %y) {22; CHECK-LABEL: ui2fp_v2i32_v2f32:23; CHECK:       # %bb.0:24; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma25; CHECK-NEXT:    vle32.v v8, (a0)26; CHECK-NEXT:    vfcvt.f.xu.v v8, v827; CHECK-NEXT:    vse32.v v8, (a1)28; CHECK-NEXT:    ret29  %a = load <2 x i32>, ptr %x30  %d = uitofp <2 x i32> %a to <2 x float>31  store <2 x float> %d, ptr %y32  ret void33}34 35define <2 x float> @si2fp_v2i1_v2f32(<2 x i1> %x) {36; CHECK-LABEL: si2fp_v2i1_v2f32:37; CHECK:       # %bb.0:38; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma39; CHECK-NEXT:    vmv.v.i v8, 040; CHECK-NEXT:    vmerge.vim v9, v8, -1, v041; CHECK-NEXT:    vfwcvt.f.x.v v8, v942; CHECK-NEXT:    ret43  %z = sitofp <2 x i1> %x to <2 x float>44  ret <2 x float> %z45}46 47define <2 x float> @si2fp_v2i7_v2f32(<2 x i7> %x) {48; CHECK-LABEL: si2fp_v2i7_v2f32:49; CHECK:       # %bb.0:50; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma51; CHECK-NEXT:    vadd.vv v8, v8, v852; CHECK-NEXT:    vsra.vi v8, v8, 153; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma54; CHECK-NEXT:    vsext.vf2 v9, v855; CHECK-NEXT:    vfwcvt.f.x.v v8, v956; CHECK-NEXT:    ret57  %z = sitofp <2 x i7> %x to <2 x float>58  ret <2 x float> %z59}60 61define <2 x float> @ui2fp_v2i7_v2f32(<2 x i7> %x) {62; CHECK-LABEL: ui2fp_v2i7_v2f32:63; CHECK:       # %bb.0:64; CHECK-NEXT:    li a0, 12765; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma66; CHECK-NEXT:    vand.vx v8, v8, a067; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma68; CHECK-NEXT:    vzext.vf2 v9, v869; CHECK-NEXT:    vfwcvt.f.xu.v v8, v970; CHECK-NEXT:    ret71  %z = uitofp <2 x i7> %x to <2 x float>72  ret <2 x float> %z73}74 75define <2 x float> @ui2fp_v2i1_v2f32(<2 x i1> %x) {76; CHECK-LABEL: ui2fp_v2i1_v2f32:77; CHECK:       # %bb.0:78; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma79; CHECK-NEXT:    vmv.v.i v8, 080; CHECK-NEXT:    vmerge.vim v9, v8, 1, v081; CHECK-NEXT:    vfwcvt.f.xu.v v8, v982; CHECK-NEXT:    ret83  %z = uitofp <2 x i1> %x to <2 x float>84  ret <2 x float> %z85}86 87define void @si2fp_v3i32_v3f32(ptr %x, ptr %y) {88; CHECK-LABEL: si2fp_v3i32_v3f32:89; CHECK:       # %bb.0:90; CHECK-NEXT:    vsetivli zero, 3, e32, m1, ta, ma91; CHECK-NEXT:    vle32.v v8, (a0)92; CHECK-NEXT:    vfcvt.f.x.v v8, v893; CHECK-NEXT:    vse32.v v8, (a1)94; CHECK-NEXT:    ret95  %a = load <3 x i32>, ptr %x96  %d = sitofp <3 x i32> %a to <3 x float>97  store <3 x float> %d, ptr %y98  ret void99}100 101define void @ui2fp_v3i32_v3f32(ptr %x, ptr %y) {102; CHECK-LABEL: ui2fp_v3i32_v3f32:103; CHECK:       # %bb.0:104; CHECK-NEXT:    vsetivli zero, 3, e32, m1, ta, ma105; CHECK-NEXT:    vle32.v v8, (a0)106; CHECK-NEXT:    vfcvt.f.xu.v v8, v8107; CHECK-NEXT:    vse32.v v8, (a1)108; CHECK-NEXT:    ret109  %a = load <3 x i32>, ptr %x110  %d = uitofp <3 x i32> %a to <3 x float>111  store <3 x float> %d, ptr %y112  ret void113}114 115define <3 x float> @si2fp_v3i1_v3f32(<3 x i1> %x) {116; CHECK-LABEL: si2fp_v3i1_v3f32:117; CHECK:       # %bb.0:118; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma119; CHECK-NEXT:    vmv.v.i v8, 0120; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0121; CHECK-NEXT:    vfwcvt.f.x.v v8, v9122; CHECK-NEXT:    ret123  %z = sitofp <3 x i1> %x to <3 x float>124  ret <3 x float> %z125}126 127; FIXME: This gets expanded instead of widened + promoted128define <3 x float> @si2fp_v3i7_v3f32(<3 x i7> %x) {129; ZVFH32-LABEL: si2fp_v3i7_v3f32:130; ZVFH32:       # %bb.0:131; ZVFH32-NEXT:    lw a1, 0(a0)132; ZVFH32-NEXT:    lw a2, 4(a0)133; ZVFH32-NEXT:    lw a0, 8(a0)134; ZVFH32-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma135; ZVFH32-NEXT:    vmv.v.x v8, a1136; ZVFH32-NEXT:    vslide1down.vx v8, v8, a2137; ZVFH32-NEXT:    vslide1down.vx v8, v8, a0138; ZVFH32-NEXT:    vslidedown.vi v8, v8, 1139; ZVFH32-NEXT:    vadd.vv v8, v8, v8140; ZVFH32-NEXT:    vsra.vi v8, v8, 1141; ZVFH32-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma142; ZVFH32-NEXT:    vsext.vf2 v9, v8143; ZVFH32-NEXT:    vfwcvt.f.x.v v8, v9144; ZVFH32-NEXT:    ret145;146; ZVFH64-LABEL: si2fp_v3i7_v3f32:147; ZVFH64:       # %bb.0:148; ZVFH64-NEXT:    ld a1, 0(a0)149; ZVFH64-NEXT:    ld a2, 8(a0)150; ZVFH64-NEXT:    ld a0, 16(a0)151; ZVFH64-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma152; ZVFH64-NEXT:    vmv.v.x v8, a1153; ZVFH64-NEXT:    vslide1down.vx v8, v8, a2154; ZVFH64-NEXT:    vslide1down.vx v8, v8, a0155; ZVFH64-NEXT:    vslidedown.vi v8, v8, 1156; ZVFH64-NEXT:    vadd.vv v8, v8, v8157; ZVFH64-NEXT:    vsra.vi v8, v8, 1158; ZVFH64-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma159; ZVFH64-NEXT:    vsext.vf2 v9, v8160; ZVFH64-NEXT:    vfwcvt.f.x.v v8, v9161; ZVFH64-NEXT:    ret162;163; ZVFHMIN32-LABEL: si2fp_v3i7_v3f32:164; ZVFHMIN32:       # %bb.0:165; ZVFHMIN32-NEXT:    lw a1, 0(a0)166; ZVFHMIN32-NEXT:    lw a2, 4(a0)167; ZVFHMIN32-NEXT:    lw a0, 8(a0)168; ZVFHMIN32-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma169; ZVFHMIN32-NEXT:    vmv.v.x v8, a1170; ZVFHMIN32-NEXT:    vslide1down.vx v8, v8, a2171; ZVFHMIN32-NEXT:    vslide1down.vx v8, v8, a0172; ZVFHMIN32-NEXT:    vslidedown.vi v8, v8, 1173; ZVFHMIN32-NEXT:    vadd.vv v8, v8, v8174; ZVFHMIN32-NEXT:    vsra.vi v8, v8, 1175; ZVFHMIN32-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma176; ZVFHMIN32-NEXT:    vsext.vf2 v9, v8177; ZVFHMIN32-NEXT:    vfwcvt.f.x.v v8, v9178; ZVFHMIN32-NEXT:    ret179;180; ZVFHMIN64-LABEL: si2fp_v3i7_v3f32:181; ZVFHMIN64:       # %bb.0:182; ZVFHMIN64-NEXT:    ld a1, 0(a0)183; ZVFHMIN64-NEXT:    ld a2, 8(a0)184; ZVFHMIN64-NEXT:    ld a0, 16(a0)185; ZVFHMIN64-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma186; ZVFHMIN64-NEXT:    vmv.v.x v8, a1187; ZVFHMIN64-NEXT:    vslide1down.vx v8, v8, a2188; ZVFHMIN64-NEXT:    vslide1down.vx v8, v8, a0189; ZVFHMIN64-NEXT:    vslidedown.vi v8, v8, 1190; ZVFHMIN64-NEXT:    vadd.vv v8, v8, v8191; ZVFHMIN64-NEXT:    vsra.vi v8, v8, 1192; ZVFHMIN64-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma193; ZVFHMIN64-NEXT:    vsext.vf2 v9, v8194; ZVFHMIN64-NEXT:    vfwcvt.f.x.v v8, v9195; ZVFHMIN64-NEXT:    ret196  %z = sitofp <3 x i7> %x to <3 x float>197  ret <3 x float> %z198}199 200; FIXME: This gets expanded instead of widened + promoted201define <3 x float> @ui2fp_v3i7_v3f32(<3 x i7> %x) {202; ZVFH32-LABEL: ui2fp_v3i7_v3f32:203; ZVFH32:       # %bb.0:204; ZVFH32-NEXT:    lw a1, 0(a0)205; ZVFH32-NEXT:    lw a2, 4(a0)206; ZVFH32-NEXT:    lw a0, 8(a0)207; ZVFH32-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma208; ZVFH32-NEXT:    vmv.v.x v8, a1209; ZVFH32-NEXT:    vslide1down.vx v8, v8, a2210; ZVFH32-NEXT:    vslide1down.vx v8, v8, a0211; ZVFH32-NEXT:    vslidedown.vi v8, v8, 1212; ZVFH32-NEXT:    li a0, 127213; ZVFH32-NEXT:    vand.vx v8, v8, a0214; ZVFH32-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma215; ZVFH32-NEXT:    vzext.vf2 v9, v8216; ZVFH32-NEXT:    vfwcvt.f.xu.v v8, v9217; ZVFH32-NEXT:    ret218;219; ZVFH64-LABEL: ui2fp_v3i7_v3f32:220; ZVFH64:       # %bb.0:221; ZVFH64-NEXT:    ld a1, 0(a0)222; ZVFH64-NEXT:    ld a2, 8(a0)223; ZVFH64-NEXT:    ld a0, 16(a0)224; ZVFH64-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma225; ZVFH64-NEXT:    vmv.v.x v8, a1226; ZVFH64-NEXT:    vslide1down.vx v8, v8, a2227; ZVFH64-NEXT:    vslide1down.vx v8, v8, a0228; ZVFH64-NEXT:    vslidedown.vi v8, v8, 1229; ZVFH64-NEXT:    li a0, 127230; ZVFH64-NEXT:    vand.vx v8, v8, a0231; ZVFH64-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma232; ZVFH64-NEXT:    vzext.vf2 v9, v8233; ZVFH64-NEXT:    vfwcvt.f.xu.v v8, v9234; ZVFH64-NEXT:    ret235;236; ZVFHMIN32-LABEL: ui2fp_v3i7_v3f32:237; ZVFHMIN32:       # %bb.0:238; ZVFHMIN32-NEXT:    lw a1, 0(a0)239; ZVFHMIN32-NEXT:    lw a2, 4(a0)240; ZVFHMIN32-NEXT:    lw a0, 8(a0)241; ZVFHMIN32-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma242; ZVFHMIN32-NEXT:    vmv.v.x v8, a1243; ZVFHMIN32-NEXT:    vslide1down.vx v8, v8, a2244; ZVFHMIN32-NEXT:    vslide1down.vx v8, v8, a0245; ZVFHMIN32-NEXT:    vslidedown.vi v8, v8, 1246; ZVFHMIN32-NEXT:    li a0, 127247; ZVFHMIN32-NEXT:    vand.vx v8, v8, a0248; ZVFHMIN32-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma249; ZVFHMIN32-NEXT:    vzext.vf2 v9, v8250; ZVFHMIN32-NEXT:    vfwcvt.f.xu.v v8, v9251; ZVFHMIN32-NEXT:    ret252;253; ZVFHMIN64-LABEL: ui2fp_v3i7_v3f32:254; ZVFHMIN64:       # %bb.0:255; ZVFHMIN64-NEXT:    ld a1, 0(a0)256; ZVFHMIN64-NEXT:    ld a2, 8(a0)257; ZVFHMIN64-NEXT:    ld a0, 16(a0)258; ZVFHMIN64-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma259; ZVFHMIN64-NEXT:    vmv.v.x v8, a1260; ZVFHMIN64-NEXT:    vslide1down.vx v8, v8, a2261; ZVFHMIN64-NEXT:    vslide1down.vx v8, v8, a0262; ZVFHMIN64-NEXT:    vslidedown.vi v8, v8, 1263; ZVFHMIN64-NEXT:    li a0, 127264; ZVFHMIN64-NEXT:    vand.vx v8, v8, a0265; ZVFHMIN64-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma266; ZVFHMIN64-NEXT:    vzext.vf2 v9, v8267; ZVFHMIN64-NEXT:    vfwcvt.f.xu.v v8, v9268; ZVFHMIN64-NEXT:    ret269  %z = uitofp <3 x i7> %x to <3 x float>270  ret <3 x float> %z271}272 273define <3 x float> @ui2fp_v3i1_v3f32(<3 x i1> %x) {274; CHECK-LABEL: ui2fp_v3i1_v3f32:275; CHECK:       # %bb.0:276; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma277; CHECK-NEXT:    vmv.v.i v8, 0278; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0279; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9280; CHECK-NEXT:    ret281  %z = uitofp <3 x i1> %x to <3 x float>282  ret <3 x float> %z283}284 285define void @si2fp_v8i32_v8f32(ptr %x, ptr %y) {286; CHECK-LABEL: si2fp_v8i32_v8f32:287; CHECK:       # %bb.0:288; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma289; CHECK-NEXT:    vle32.v v8, (a0)290; CHECK-NEXT:    vfcvt.f.x.v v8, v8291; CHECK-NEXT:    vse32.v v8, (a1)292; CHECK-NEXT:    ret293  %a = load <8 x i32>, ptr %x294  %d = sitofp <8 x i32> %a to <8 x float>295  store <8 x float> %d, ptr %y296  ret void297}298 299define void @ui2fp_v8i32_v8f32(ptr %x, ptr %y) {300; CHECK-LABEL: ui2fp_v8i32_v8f32:301; CHECK:       # %bb.0:302; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma303; CHECK-NEXT:    vle32.v v8, (a0)304; CHECK-NEXT:    vfcvt.f.xu.v v8, v8305; CHECK-NEXT:    vse32.v v8, (a1)306; CHECK-NEXT:    ret307  %a = load <8 x i32>, ptr %x308  %d = uitofp <8 x i32> %a to <8 x float>309  store <8 x float> %d, ptr %y310  ret void311}312 313define <8 x float> @si2fp_v8i1_v8f32(<8 x i1> %x) {314; CHECK-LABEL: si2fp_v8i1_v8f32:315; CHECK:       # %bb.0:316; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma317; CHECK-NEXT:    vmv.v.i v8, 0318; CHECK-NEXT:    vmerge.vim v10, v8, -1, v0319; CHECK-NEXT:    vfwcvt.f.x.v v8, v10320; CHECK-NEXT:    ret321  %z = sitofp <8 x i1> %x to <8 x float>322  ret <8 x float> %z323}324 325define <8 x float> @ui2fp_v8i1_v8f32(<8 x i1> %x) {326; CHECK-LABEL: ui2fp_v8i1_v8f32:327; CHECK:       # %bb.0:328; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma329; CHECK-NEXT:    vmv.v.i v8, 0330; CHECK-NEXT:    vmerge.vim v10, v8, 1, v0331; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10332; CHECK-NEXT:    ret333  %z = uitofp <8 x i1> %x to <8 x float>334  ret <8 x float> %z335}336 337define void @si2fp_v2i16_v2f64(ptr %x, ptr %y) {338; CHECK-LABEL: si2fp_v2i16_v2f64:339; CHECK:       # %bb.0:340; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma341; CHECK-NEXT:    vle16.v v8, (a0)342; CHECK-NEXT:    vsext.vf2 v9, v8343; CHECK-NEXT:    vfwcvt.f.x.v v8, v9344; CHECK-NEXT:    vse64.v v8, (a1)345; CHECK-NEXT:    ret346  %a = load <2 x i16>, ptr %x347  %d = sitofp <2 x i16> %a to <2 x double>348  store <2 x double> %d, ptr %y349  ret void350}351 352define void @ui2fp_v2i16_v2f64(ptr %x, ptr %y) {353; CHECK-LABEL: ui2fp_v2i16_v2f64:354; CHECK:       # %bb.0:355; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma356; CHECK-NEXT:    vle16.v v8, (a0)357; CHECK-NEXT:    vzext.vf2 v9, v8358; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9359; CHECK-NEXT:    vse64.v v8, (a1)360; CHECK-NEXT:    ret361  %a = load <2 x i16>, ptr %x362  %d = uitofp <2 x i16> %a to <2 x double>363  store <2 x double> %d, ptr %y364  ret void365}366 367define void @si2fp_v8i16_v8f64(ptr %x, ptr %y) {368; CHECK-LABEL: si2fp_v8i16_v8f64:369; CHECK:       # %bb.0:370; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma371; CHECK-NEXT:    vle16.v v8, (a0)372; CHECK-NEXT:    vsext.vf2 v12, v8373; CHECK-NEXT:    vfwcvt.f.x.v v8, v12374; CHECK-NEXT:    vse64.v v8, (a1)375; CHECK-NEXT:    ret376  %a = load <8 x i16>, ptr %x377  %d = sitofp <8 x i16> %a to <8 x double>378  store <8 x double> %d, ptr %y379  ret void380}381 382define void @ui2fp_v8i16_v8f64(ptr %x, ptr %y) {383; CHECK-LABEL: ui2fp_v8i16_v8f64:384; CHECK:       # %bb.0:385; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma386; CHECK-NEXT:    vle16.v v8, (a0)387; CHECK-NEXT:    vzext.vf2 v12, v8388; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12389; CHECK-NEXT:    vse64.v v8, (a1)390; CHECK-NEXT:    ret391  %a = load <8 x i16>, ptr %x392  %d = uitofp <8 x i16> %a to <8 x double>393  store <8 x double> %d, ptr %y394  ret void395}396 397define <8 x double> @si2fp_v8i1_v8f64(<8 x i1> %x) {398; CHECK-LABEL: si2fp_v8i1_v8f64:399; CHECK:       # %bb.0:400; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma401; CHECK-NEXT:    vmv.v.i v8, 0402; CHECK-NEXT:    vmerge.vim v12, v8, -1, v0403; CHECK-NEXT:    vfwcvt.f.x.v v8, v12404; CHECK-NEXT:    ret405  %z = sitofp <8 x i1> %x to <8 x double>406  ret <8 x double> %z407}408 409define <8 x double> @ui2fp_v8i1_v8f64(<8 x i1> %x) {410; CHECK-LABEL: ui2fp_v8i1_v8f64:411; CHECK:       # %bb.0:412; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma413; CHECK-NEXT:    vmv.v.i v8, 0414; CHECK-NEXT:    vmerge.vim v12, v8, 1, v0415; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12416; CHECK-NEXT:    ret417  %z = uitofp <8 x i1> %x to <8 x double>418  ret <8 x double> %z419}420 421define void @si2fp_v2i64_v2bf16(ptr %x, ptr %y) {422; CHECK-LABEL: si2fp_v2i64_v2bf16:423; CHECK:       # %bb.0:424; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma425; CHECK-NEXT:    vle64.v v8, (a0)426; CHECK-NEXT:    vfncvt.f.x.w v9, v8427; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma428; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9429; CHECK-NEXT:    vse16.v v8, (a1)430; CHECK-NEXT:    ret431  %a = load <2 x i64>, ptr %x432  %d = sitofp <2 x i64> %a to <2 x bfloat>433  store <2 x bfloat> %d, ptr %y434  ret void435}436 437define void @ui2fp_v2i64_v2bf16(ptr %x, ptr %y) {438; CHECK-LABEL: ui2fp_v2i64_v2bf16:439; CHECK:       # %bb.0:440; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma441; CHECK-NEXT:    vle64.v v8, (a0)442; CHECK-NEXT:    vfncvt.f.xu.w v9, v8443; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma444; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9445; CHECK-NEXT:    vse16.v v8, (a1)446; CHECK-NEXT:    ret447  %a = load <2 x i64>, ptr %x448  %d = uitofp <2 x i64> %a to <2 x bfloat>449  store <2 x bfloat> %d, ptr %y450  ret void451}452 453define <2 x bfloat> @si2fp_v2i1_v2bf16(<2 x i1> %x) {454; CHECK-LABEL: si2fp_v2i1_v2bf16:455; CHECK:       # %bb.0:456; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma457; CHECK-NEXT:    vmv.v.i v8, 0458; CHECK-NEXT:    vmerge.vim v8, v8, -1, v0459; CHECK-NEXT:    vfwcvt.f.x.v v9, v8460; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9461; CHECK-NEXT:    ret462  %z = sitofp <2 x i1> %x to <2 x bfloat>463  ret <2 x bfloat> %z464}465 466define <2 x bfloat> @ui2fp_v2i1_v2bf16(<2 x i1> %x) {467; CHECK-LABEL: ui2fp_v2i1_v2bf16:468; CHECK:       # %bb.0:469; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma470; CHECK-NEXT:    vmv.v.i v8, 0471; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0472; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8473; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9474; CHECK-NEXT:    ret475  %z = uitofp <2 x i1> %x to <2 x bfloat>476  ret <2 x bfloat> %z477}478 479define void @si2fp_v8i64_v8bf16(ptr %x, ptr %y) {480; CHECK-LABEL: si2fp_v8i64_v8bf16:481; CHECK:       # %bb.0:482; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma483; CHECK-NEXT:    vle64.v v8, (a0)484; CHECK-NEXT:    vfncvt.f.x.w v12, v8485; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma486; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12487; CHECK-NEXT:    vse16.v v8, (a1)488; CHECK-NEXT:    ret489  %a = load <8 x i64>, ptr %x490  %d = sitofp <8 x i64> %a to <8 x bfloat>491  store <8 x bfloat> %d, ptr %y492  ret void493}494 495define void @ui2fp_v8i64_v8bf16(ptr %x, ptr %y) {496; CHECK-LABEL: ui2fp_v8i64_v8bf16:497; CHECK:       # %bb.0:498; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma499; CHECK-NEXT:    vle64.v v8, (a0)500; CHECK-NEXT:    vfncvt.f.xu.w v12, v8501; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma502; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12503; CHECK-NEXT:    vse16.v v8, (a1)504; CHECK-NEXT:    ret505  %a = load <8 x i64>, ptr %x506  %d = uitofp <8 x i64> %a to <8 x bfloat>507  store <8 x bfloat> %d, ptr %y508  ret void509}510 511define <8 x bfloat> @si2fp_v8i1_v8bf16(<8 x i1> %x) {512; CHECK-LABEL: si2fp_v8i1_v8bf16:513; CHECK:       # %bb.0:514; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma515; CHECK-NEXT:    vmv.v.i v8, 0516; CHECK-NEXT:    vmerge.vim v8, v8, -1, v0517; CHECK-NEXT:    vfwcvt.f.x.v v10, v8518; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10519; CHECK-NEXT:    ret520  %z = sitofp <8 x i1> %x to <8 x bfloat>521  ret <8 x bfloat> %z522}523 524define <8 x bfloat> @ui2fp_v8i1_v8bf16(<8 x i1> %x) {525; CHECK-LABEL: ui2fp_v8i1_v8bf16:526; CHECK:       # %bb.0:527; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma528; CHECK-NEXT:    vmv.v.i v8, 0529; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0530; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8531; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10532; CHECK-NEXT:    ret533  %z = uitofp <8 x i1> %x to <8 x bfloat>534  ret <8 x bfloat> %z535}536 537define void @si2fp_v2i64_v2f16(ptr %x, ptr %y) {538; CHECK-LABEL: si2fp_v2i64_v2f16:539; CHECK:       # %bb.0:540; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma541; CHECK-NEXT:    vle64.v v8, (a0)542; CHECK-NEXT:    vfncvt.f.x.w v9, v8543; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma544; CHECK-NEXT:    vfncvt.f.f.w v8, v9545; CHECK-NEXT:    vse16.v v8, (a1)546; CHECK-NEXT:    ret547  %a = load <2 x i64>, ptr %x548  %d = sitofp <2 x i64> %a to <2 x half>549  store <2 x half> %d, ptr %y550  ret void551}552 553define void @ui2fp_v2i64_v2f16(ptr %x, ptr %y) {554; CHECK-LABEL: ui2fp_v2i64_v2f16:555; CHECK:       # %bb.0:556; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma557; CHECK-NEXT:    vle64.v v8, (a0)558; CHECK-NEXT:    vfncvt.f.xu.w v9, v8559; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma560; CHECK-NEXT:    vfncvt.f.f.w v8, v9561; CHECK-NEXT:    vse16.v v8, (a1)562; CHECK-NEXT:    ret563  %a = load <2 x i64>, ptr %x564  %d = uitofp <2 x i64> %a to <2 x half>565  store <2 x half> %d, ptr %y566  ret void567}568 569define <2 x half> @si2fp_v2i1_v2f16(<2 x i1> %x) {570; ZVFH-LABEL: si2fp_v2i1_v2f16:571; ZVFH:       # %bb.0:572; ZVFH-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma573; ZVFH-NEXT:    vmv.v.i v8, 0574; ZVFH-NEXT:    vmerge.vim v9, v8, -1, v0575; ZVFH-NEXT:    vfwcvt.f.x.v v8, v9576; ZVFH-NEXT:    ret577;578; ZVFHMIN-LABEL: si2fp_v2i1_v2f16:579; ZVFHMIN:       # %bb.0:580; ZVFHMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma581; ZVFHMIN-NEXT:    vmv.v.i v8, 0582; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0583; ZVFHMIN-NEXT:    vfwcvt.f.x.v v9, v8584; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9585; ZVFHMIN-NEXT:    ret586  %z = sitofp <2 x i1> %x to <2 x half>587  ret <2 x half> %z588}589 590define <2 x half> @ui2fp_v2i1_v2f16(<2 x i1> %x) {591; ZVFH-LABEL: ui2fp_v2i1_v2f16:592; ZVFH:       # %bb.0:593; ZVFH-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma594; ZVFH-NEXT:    vmv.v.i v8, 0595; ZVFH-NEXT:    vmerge.vim v9, v8, 1, v0596; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v9597; ZVFH-NEXT:    ret598;599; ZVFHMIN-LABEL: ui2fp_v2i1_v2f16:600; ZVFHMIN:       # %bb.0:601; ZVFHMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma602; ZVFHMIN-NEXT:    vmv.v.i v8, 0603; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0604; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v9, v8605; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9606; ZVFHMIN-NEXT:    ret607  %z = uitofp <2 x i1> %x to <2 x half>608  ret <2 x half> %z609}610 611define void @si2fp_v8i64_v8f16(ptr %x, ptr %y) {612; CHECK-LABEL: si2fp_v8i64_v8f16:613; CHECK:       # %bb.0:614; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma615; CHECK-NEXT:    vle64.v v8, (a0)616; CHECK-NEXT:    vfncvt.f.x.w v12, v8617; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma618; CHECK-NEXT:    vfncvt.f.f.w v8, v12619; CHECK-NEXT:    vse16.v v8, (a1)620; CHECK-NEXT:    ret621  %a = load <8 x i64>, ptr %x622  %d = sitofp <8 x i64> %a to <8 x half>623  store <8 x half> %d, ptr %y624  ret void625}626 627define void @ui2fp_v8i64_v8f16(ptr %x, ptr %y) {628; CHECK-LABEL: ui2fp_v8i64_v8f16:629; CHECK:       # %bb.0:630; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma631; CHECK-NEXT:    vle64.v v8, (a0)632; CHECK-NEXT:    vfncvt.f.xu.w v12, v8633; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma634; CHECK-NEXT:    vfncvt.f.f.w v8, v12635; CHECK-NEXT:    vse16.v v8, (a1)636; CHECK-NEXT:    ret637  %a = load <8 x i64>, ptr %x638  %d = uitofp <8 x i64> %a to <8 x half>639  store <8 x half> %d, ptr %y640  ret void641}642 643define <8 x half> @si2fp_v8i1_v8f16(<8 x i1> %x) {644; ZVFH-LABEL: si2fp_v8i1_v8f16:645; ZVFH:       # %bb.0:646; ZVFH-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma647; ZVFH-NEXT:    vmv.v.i v8, 0648; ZVFH-NEXT:    vmerge.vim v9, v8, -1, v0649; ZVFH-NEXT:    vfwcvt.f.x.v v8, v9650; ZVFH-NEXT:    ret651;652; ZVFHMIN-LABEL: si2fp_v8i1_v8f16:653; ZVFHMIN:       # %bb.0:654; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma655; ZVFHMIN-NEXT:    vmv.v.i v8, 0656; ZVFHMIN-NEXT:    vmerge.vim v8, v8, -1, v0657; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v8658; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10659; ZVFHMIN-NEXT:    ret660  %z = sitofp <8 x i1> %x to <8 x half>661  ret <8 x half> %z662}663 664define <8 x half> @ui2fp_v8i1_v8f16(<8 x i1> %x) {665; ZVFH-LABEL: ui2fp_v8i1_v8f16:666; ZVFH:       # %bb.0:667; ZVFH-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma668; ZVFH-NEXT:    vmv.v.i v8, 0669; ZVFH-NEXT:    vmerge.vim v9, v8, 1, v0670; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v9671; ZVFH-NEXT:    ret672;673; ZVFHMIN-LABEL: ui2fp_v8i1_v8f16:674; ZVFHMIN:       # %bb.0:675; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma676; ZVFHMIN-NEXT:    vmv.v.i v8, 0677; ZVFHMIN-NEXT:    vmerge.vim v8, v8, 1, v0678; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v8679; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10680; ZVFHMIN-NEXT:    ret681  %z = uitofp <8 x i1> %x to <8 x half>682  ret <8 x half> %z683}684