818 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v -target-abi=ilp32d \3; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v -target-abi=lp64d \5; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v -target-abi=ilp32d \7; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v -target-abi=lp64d \9; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN10 11define <vscale x 1 x bfloat> @vfdiv_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb) {12; CHECK-LABEL: vfdiv_vv_nxv1bf16:13; CHECK: # %bb.0:14; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma15; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v916; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v817; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma18; CHECK-NEXT: vfdiv.vv v9, v9, v1019; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma20; CHECK-NEXT: vfncvtbf16.f.f.w v8, v921; CHECK-NEXT: ret22 %vc = fdiv <vscale x 1 x bfloat> %va, %vb23 ret <vscale x 1 x bfloat> %vc24}25 26define <vscale x 1 x bfloat> @vfdiv_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b) {27; CHECK-LABEL: vfdiv_vf_nxv1bf16:28; CHECK: # %bb.0:29; CHECK-NEXT: fcvt.s.bf16 fa5, fa030; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma31; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v832; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma33; CHECK-NEXT: vfdiv.vf v9, v9, fa534; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma35; CHECK-NEXT: vfncvtbf16.f.f.w v8, v936; CHECK-NEXT: ret37 %head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 038 %splat = shufflevector <vscale x 1 x bfloat> %head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer39 %vc = fdiv <vscale x 1 x bfloat> %va, %splat40 ret <vscale x 1 x bfloat> %vc41}42 43define <vscale x 2 x bfloat> @vfdiv_vv_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb) {44; CHECK-LABEL: vfdiv_vv_nxv2bf16:45; CHECK: # %bb.0:46; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma47; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v948; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v849; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma50; CHECK-NEXT: vfdiv.vv v9, v9, v1051; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma52; CHECK-NEXT: vfncvtbf16.f.f.w v8, v953; CHECK-NEXT: ret54 %vc = fdiv <vscale x 2 x bfloat> %va, %vb55 ret <vscale x 2 x bfloat> %vc56}57 58define <vscale x 2 x bfloat> @vfdiv_vf_nxv2bf16(<vscale x 2 x bfloat> %va, bfloat %b) {59; CHECK-LABEL: vfdiv_vf_nxv2bf16:60; CHECK: # %bb.0:61; CHECK-NEXT: fcvt.s.bf16 fa5, fa062; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma63; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v864; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma65; CHECK-NEXT: vfdiv.vf v9, v9, fa566; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma67; CHECK-NEXT: vfncvtbf16.f.f.w v8, v968; CHECK-NEXT: ret69 %head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 070 %splat = shufflevector <vscale x 2 x bfloat> %head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer71 %vc = fdiv <vscale x 2 x bfloat> %va, %splat72 ret <vscale x 2 x bfloat> %vc73}74 75define <vscale x 4 x bfloat> @vfdiv_vv_nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb) {76; CHECK-LABEL: vfdiv_vv_nxv4bf16:77; CHECK: # %bb.0:78; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma79; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v980; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v881; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma82; CHECK-NEXT: vfdiv.vv v10, v12, v1083; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma84; CHECK-NEXT: vfncvtbf16.f.f.w v8, v1085; CHECK-NEXT: ret86 %vc = fdiv <vscale x 4 x bfloat> %va, %vb87 ret <vscale x 4 x bfloat> %vc88}89 90define <vscale x 4 x bfloat> @vfdiv_vf_nxv4bf16(<vscale x 4 x bfloat> %va, bfloat %b) {91; CHECK-LABEL: vfdiv_vf_nxv4bf16:92; CHECK: # %bb.0:93; CHECK-NEXT: fcvt.s.bf16 fa5, fa094; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma95; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v896; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma97; CHECK-NEXT: vfdiv.vf v10, v10, fa598; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma99; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10100; CHECK-NEXT: ret101 %head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0102 %splat = shufflevector <vscale x 4 x bfloat> %head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer103 %vc = fdiv <vscale x 4 x bfloat> %va, %splat104 ret <vscale x 4 x bfloat> %vc105}106 107define <vscale x 8 x bfloat> @vfdiv_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {108; CHECK-LABEL: vfdiv_vv_nxv8bf16:109; CHECK: # %bb.0:110; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma111; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10112; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8113; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma114; CHECK-NEXT: vfdiv.vv v12, v16, v12115; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma116; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12117; CHECK-NEXT: ret118 %vc = fdiv <vscale x 8 x bfloat> %va, %vb119 ret <vscale x 8 x bfloat> %vc120}121 122define <vscale x 8 x bfloat> @vfdiv_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {123; CHECK-LABEL: vfdiv_vf_nxv8bf16:124; CHECK: # %bb.0:125; CHECK-NEXT: fcvt.s.bf16 fa5, fa0126; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma127; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8128; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma129; CHECK-NEXT: vfdiv.vf v12, v12, fa5130; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma131; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12132; CHECK-NEXT: ret133 %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0134 %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer135 %vc = fdiv <vscale x 8 x bfloat> %va, %splat136 ret <vscale x 8 x bfloat> %vc137}138 139define <vscale x 8 x bfloat> @vfdiv_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {140; CHECK-LABEL: vfdiv_fv_nxv8bf16:141; CHECK: # %bb.0:142; CHECK-NEXT: fcvt.s.bf16 fa5, fa0143; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma144; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8145; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma146; CHECK-NEXT: vfrdiv.vf v12, v12, fa5147; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma148; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12149; CHECK-NEXT: ret150 %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0151 %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer152 %vc = fdiv <vscale x 8 x bfloat> %splat, %va153 ret <vscale x 8 x bfloat> %vc154}155 156define <vscale x 16 x bfloat> @vfdiv_vv_nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb) {157; CHECK-LABEL: vfdiv_vv_nxv16bf16:158; CHECK: # %bb.0:159; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma160; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12161; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v8162; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma163; CHECK-NEXT: vfdiv.vv v16, v24, v16164; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma165; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16166; CHECK-NEXT: ret167 %vc = fdiv <vscale x 16 x bfloat> %va, %vb168 ret <vscale x 16 x bfloat> %vc169}170 171define <vscale x 16 x bfloat> @vfdiv_vf_nxv16bf16(<vscale x 16 x bfloat> %va, bfloat %b) {172; CHECK-LABEL: vfdiv_vf_nxv16bf16:173; CHECK: # %bb.0:174; CHECK-NEXT: fcvt.s.bf16 fa5, fa0175; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma176; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8177; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma178; CHECK-NEXT: vfdiv.vf v16, v16, fa5179; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma180; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16181; CHECK-NEXT: ret182 %head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0183 %splat = shufflevector <vscale x 16 x bfloat> %head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer184 %vc = fdiv <vscale x 16 x bfloat> %va, %splat185 ret <vscale x 16 x bfloat> %vc186}187 188define <vscale x 32 x bfloat> @vfdiv_vv_nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb) {189; CHECK-LABEL: vfdiv_vv_nxv32bf16:190; CHECK: # %bb.0:191; CHECK-NEXT: addi sp, sp, -16192; CHECK-NEXT: .cfi_def_cfa_offset 16193; CHECK-NEXT: csrr a0, vlenb194; CHECK-NEXT: slli a0, a0, 3195; CHECK-NEXT: sub sp, sp, a0196; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb197; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma198; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v16199; CHECK-NEXT: addi a0, sp, 16200; CHECK-NEXT: vs8r.v v24, (a0) # vscale x 64-byte Folded Spill201; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v8202; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v20203; CHECK-NEXT: vl8r.v v16, (a0) # vscale x 64-byte Folded Reload204; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma205; CHECK-NEXT: vfdiv.vv v16, v0, v16206; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma207; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v12208; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma209; CHECK-NEXT: vfdiv.vv v24, v0, v24210; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma211; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16212; CHECK-NEXT: vfncvtbf16.f.f.w v12, v24213; CHECK-NEXT: csrr a0, vlenb214; CHECK-NEXT: slli a0, a0, 3215; CHECK-NEXT: add sp, sp, a0216; CHECK-NEXT: .cfi_def_cfa sp, 16217; CHECK-NEXT: addi sp, sp, 16218; CHECK-NEXT: .cfi_def_cfa_offset 0219; CHECK-NEXT: ret220 %vc = fdiv <vscale x 32 x bfloat> %va, %vb221 ret <vscale x 32 x bfloat> %vc222}223 224define <vscale x 32 x bfloat> @vfdiv_vf_nxv32bf16(<vscale x 32 x bfloat> %va, bfloat %b) {225; CHECK-LABEL: vfdiv_vf_nxv32bf16:226; CHECK: # %bb.0:227; CHECK-NEXT: fmv.x.h a0, fa0228; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma229; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8230; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v12231; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma232; CHECK-NEXT: vmv.v.x v8, a0233; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma234; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v8235; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma236; CHECK-NEXT: vfdiv.vv v16, v16, v0237; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma238; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v12239; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma240; CHECK-NEXT: vfdiv.vv v24, v24, v0241; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma242; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16243; CHECK-NEXT: vfncvtbf16.f.f.w v12, v24244; CHECK-NEXT: ret245 %head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0246 %splat = shufflevector <vscale x 32 x bfloat> %head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer247 %vc = fdiv <vscale x 32 x bfloat> %va, %splat248 ret <vscale x 32 x bfloat> %vc249}250 251define <vscale x 1 x half> @vfdiv_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) {252; ZVFH-LABEL: vfdiv_vv_nxv1f16:253; ZVFH: # %bb.0:254; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma255; ZVFH-NEXT: vfdiv.vv v8, v8, v9256; ZVFH-NEXT: ret257;258; ZVFHMIN-LABEL: vfdiv_vv_nxv1f16:259; ZVFHMIN: # %bb.0:260; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma261; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9262; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8263; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma264; ZVFHMIN-NEXT: vfdiv.vv v9, v9, v10265; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma266; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9267; ZVFHMIN-NEXT: ret268 %vc = fdiv <vscale x 1 x half> %va, %vb269 ret <vscale x 1 x half> %vc270}271 272define <vscale x 1 x half> @vfdiv_vf_nxv1f16(<vscale x 1 x half> %va, half %b) {273; ZVFH-LABEL: vfdiv_vf_nxv1f16:274; ZVFH: # %bb.0:275; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma276; ZVFH-NEXT: vfdiv.vf v8, v8, fa0277; ZVFH-NEXT: ret278;279; ZVFHMIN-LABEL: vfdiv_vf_nxv1f16:280; ZVFHMIN: # %bb.0:281; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0282; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma283; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8284; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma285; ZVFHMIN-NEXT: vfdiv.vf v9, v9, fa5286; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma287; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9288; ZVFHMIN-NEXT: ret289 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0290 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer291 %vc = fdiv <vscale x 1 x half> %va, %splat292 ret <vscale x 1 x half> %vc293}294 295define <vscale x 2 x half> @vfdiv_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) {296; ZVFH-LABEL: vfdiv_vv_nxv2f16:297; ZVFH: # %bb.0:298; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma299; ZVFH-NEXT: vfdiv.vv v8, v8, v9300; ZVFH-NEXT: ret301;302; ZVFHMIN-LABEL: vfdiv_vv_nxv2f16:303; ZVFHMIN: # %bb.0:304; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma305; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9306; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8307; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma308; ZVFHMIN-NEXT: vfdiv.vv v9, v9, v10309; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma310; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9311; ZVFHMIN-NEXT: ret312 %vc = fdiv <vscale x 2 x half> %va, %vb313 ret <vscale x 2 x half> %vc314}315 316define <vscale x 2 x half> @vfdiv_vf_nxv2f16(<vscale x 2 x half> %va, half %b) {317; ZVFH-LABEL: vfdiv_vf_nxv2f16:318; ZVFH: # %bb.0:319; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma320; ZVFH-NEXT: vfdiv.vf v8, v8, fa0321; ZVFH-NEXT: ret322;323; ZVFHMIN-LABEL: vfdiv_vf_nxv2f16:324; ZVFHMIN: # %bb.0:325; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0326; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma327; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8328; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma329; ZVFHMIN-NEXT: vfdiv.vf v9, v9, fa5330; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma331; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9332; ZVFHMIN-NEXT: ret333 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0334 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer335 %vc = fdiv <vscale x 2 x half> %va, %splat336 ret <vscale x 2 x half> %vc337}338 339define <vscale x 4 x half> @vfdiv_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) {340; ZVFH-LABEL: vfdiv_vv_nxv4f16:341; ZVFH: # %bb.0:342; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma343; ZVFH-NEXT: vfdiv.vv v8, v8, v9344; ZVFH-NEXT: ret345;346; ZVFHMIN-LABEL: vfdiv_vv_nxv4f16:347; ZVFHMIN: # %bb.0:348; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma349; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9350; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8351; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma352; ZVFHMIN-NEXT: vfdiv.vv v10, v12, v10353; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma354; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10355; ZVFHMIN-NEXT: ret356 %vc = fdiv <vscale x 4 x half> %va, %vb357 ret <vscale x 4 x half> %vc358}359 360define <vscale x 4 x half> @vfdiv_vf_nxv4f16(<vscale x 4 x half> %va, half %b) {361; ZVFH-LABEL: vfdiv_vf_nxv4f16:362; ZVFH: # %bb.0:363; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma364; ZVFH-NEXT: vfdiv.vf v8, v8, fa0365; ZVFH-NEXT: ret366;367; ZVFHMIN-LABEL: vfdiv_vf_nxv4f16:368; ZVFHMIN: # %bb.0:369; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0370; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma371; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8372; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma373; ZVFHMIN-NEXT: vfdiv.vf v10, v10, fa5374; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma375; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10376; ZVFHMIN-NEXT: ret377 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0378 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer379 %vc = fdiv <vscale x 4 x half> %va, %splat380 ret <vscale x 4 x half> %vc381}382 383define <vscale x 8 x half> @vfdiv_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {384; ZVFH-LABEL: vfdiv_vv_nxv8f16:385; ZVFH: # %bb.0:386; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma387; ZVFH-NEXT: vfdiv.vv v8, v8, v10388; ZVFH-NEXT: ret389;390; ZVFHMIN-LABEL: vfdiv_vv_nxv8f16:391; ZVFHMIN: # %bb.0:392; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma393; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10394; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8395; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma396; ZVFHMIN-NEXT: vfdiv.vv v12, v16, v12397; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma398; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12399; ZVFHMIN-NEXT: ret400 %vc = fdiv <vscale x 8 x half> %va, %vb401 ret <vscale x 8 x half> %vc402}403 404define <vscale x 8 x half> @vfdiv_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {405; ZVFH-LABEL: vfdiv_vf_nxv8f16:406; ZVFH: # %bb.0:407; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma408; ZVFH-NEXT: vfdiv.vf v8, v8, fa0409; ZVFH-NEXT: ret410;411; ZVFHMIN-LABEL: vfdiv_vf_nxv8f16:412; ZVFHMIN: # %bb.0:413; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0414; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma415; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8416; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma417; ZVFHMIN-NEXT: vfdiv.vf v12, v12, fa5418; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma419; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12420; ZVFHMIN-NEXT: ret421 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0422 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer423 %vc = fdiv <vscale x 8 x half> %va, %splat424 ret <vscale x 8 x half> %vc425}426 427define <vscale x 8 x half> @vfdiv_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {428; ZVFH-LABEL: vfdiv_fv_nxv8f16:429; ZVFH: # %bb.0:430; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma431; ZVFH-NEXT: vfrdiv.vf v8, v8, fa0432; ZVFH-NEXT: ret433;434; ZVFHMIN-LABEL: vfdiv_fv_nxv8f16:435; ZVFHMIN: # %bb.0:436; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0437; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma438; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8439; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma440; ZVFHMIN-NEXT: vfrdiv.vf v12, v12, fa5441; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma442; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12443; ZVFHMIN-NEXT: ret444 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0445 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer446 %vc = fdiv <vscale x 8 x half> %splat, %va447 ret <vscale x 8 x half> %vc448}449 450define <vscale x 16 x half> @vfdiv_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) {451; ZVFH-LABEL: vfdiv_vv_nxv16f16:452; ZVFH: # %bb.0:453; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma454; ZVFH-NEXT: vfdiv.vv v8, v8, v12455; ZVFH-NEXT: ret456;457; ZVFHMIN-LABEL: vfdiv_vv_nxv16f16:458; ZVFHMIN: # %bb.0:459; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma460; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12461; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8462; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma463; ZVFHMIN-NEXT: vfdiv.vv v16, v24, v16464; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma465; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16466; ZVFHMIN-NEXT: ret467 %vc = fdiv <vscale x 16 x half> %va, %vb468 ret <vscale x 16 x half> %vc469}470 471define <vscale x 16 x half> @vfdiv_vf_nxv16f16(<vscale x 16 x half> %va, half %b) {472; ZVFH-LABEL: vfdiv_vf_nxv16f16:473; ZVFH: # %bb.0:474; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma475; ZVFH-NEXT: vfdiv.vf v8, v8, fa0476; ZVFH-NEXT: ret477;478; ZVFHMIN-LABEL: vfdiv_vf_nxv16f16:479; ZVFHMIN: # %bb.0:480; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0481; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma482; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8483; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma484; ZVFHMIN-NEXT: vfdiv.vf v16, v16, fa5485; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma486; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16487; ZVFHMIN-NEXT: ret488 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0489 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer490 %vc = fdiv <vscale x 16 x half> %va, %splat491 ret <vscale x 16 x half> %vc492}493 494define <vscale x 32 x half> @vfdiv_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) {495; ZVFH-LABEL: vfdiv_vv_nxv32f16:496; ZVFH: # %bb.0:497; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma498; ZVFH-NEXT: vfdiv.vv v8, v8, v16499; ZVFH-NEXT: ret500;501; ZVFHMIN-LABEL: vfdiv_vv_nxv32f16:502; ZVFHMIN: # %bb.0:503; ZVFHMIN-NEXT: addi sp, sp, -16504; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16505; ZVFHMIN-NEXT: csrr a0, vlenb506; ZVFHMIN-NEXT: slli a0, a0, 3507; ZVFHMIN-NEXT: sub sp, sp, a0508; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb509; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma510; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16511; ZVFHMIN-NEXT: addi a0, sp, 16512; ZVFHMIN-NEXT: vs8r.v v24, (a0) # vscale x 64-byte Folded Spill513; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8514; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20515; ZVFHMIN-NEXT: vl8r.v v16, (a0) # vscale x 64-byte Folded Reload516; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma517; ZVFHMIN-NEXT: vfdiv.vv v16, v0, v16518; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma519; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v12520; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma521; ZVFHMIN-NEXT: vfdiv.vv v24, v0, v24522; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma523; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16524; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v24525; ZVFHMIN-NEXT: csrr a0, vlenb526; ZVFHMIN-NEXT: slli a0, a0, 3527; ZVFHMIN-NEXT: add sp, sp, a0528; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16529; ZVFHMIN-NEXT: addi sp, sp, 16530; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0531; ZVFHMIN-NEXT: ret532 %vc = fdiv <vscale x 32 x half> %va, %vb533 ret <vscale x 32 x half> %vc534}535 536define <vscale x 32 x half> @vfdiv_vf_nxv32f16(<vscale x 32 x half> %va, half %b) {537; ZVFH-LABEL: vfdiv_vf_nxv32f16:538; ZVFH: # %bb.0:539; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma540; ZVFH-NEXT: vfdiv.vf v8, v8, fa0541; ZVFH-NEXT: ret542;543; ZVFHMIN-LABEL: vfdiv_vf_nxv32f16:544; ZVFHMIN: # %bb.0:545; ZVFHMIN-NEXT: fmv.x.h a0, fa0546; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma547; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8548; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12549; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m8, ta, ma550; ZVFHMIN-NEXT: vmv.v.x v8, a0551; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma552; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8553; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma554; ZVFHMIN-NEXT: vfdiv.vv v16, v16, v0555; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma556; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v12557; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma558; ZVFHMIN-NEXT: vfdiv.vv v24, v24, v0559; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma560; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16561; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v24562; ZVFHMIN-NEXT: ret563 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0564 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer565 %vc = fdiv <vscale x 32 x half> %va, %splat566 ret <vscale x 32 x half> %vc567}568 569define <vscale x 1 x float> @vfdiv_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) {570; CHECK-LABEL: vfdiv_vv_nxv1f32:571; CHECK: # %bb.0:572; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma573; CHECK-NEXT: vfdiv.vv v8, v8, v9574; CHECK-NEXT: ret575 %vc = fdiv <vscale x 1 x float> %va, %vb576 ret <vscale x 1 x float> %vc577}578 579define <vscale x 1 x float> @vfdiv_vf_nxv1f32(<vscale x 1 x float> %va, float %b) {580; CHECK-LABEL: vfdiv_vf_nxv1f32:581; CHECK: # %bb.0:582; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma583; CHECK-NEXT: vfdiv.vf v8, v8, fa0584; CHECK-NEXT: ret585 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0586 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer587 %vc = fdiv <vscale x 1 x float> %va, %splat588 ret <vscale x 1 x float> %vc589}590 591define <vscale x 2 x float> @vfdiv_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) {592; CHECK-LABEL: vfdiv_vv_nxv2f32:593; CHECK: # %bb.0:594; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma595; CHECK-NEXT: vfdiv.vv v8, v8, v9596; CHECK-NEXT: ret597 %vc = fdiv <vscale x 2 x float> %va, %vb598 ret <vscale x 2 x float> %vc599}600 601define <vscale x 2 x float> @vfdiv_vf_nxv2f32(<vscale x 2 x float> %va, float %b) {602; CHECK-LABEL: vfdiv_vf_nxv2f32:603; CHECK: # %bb.0:604; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma605; CHECK-NEXT: vfdiv.vf v8, v8, fa0606; CHECK-NEXT: ret607 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0608 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer609 %vc = fdiv <vscale x 2 x float> %va, %splat610 ret <vscale x 2 x float> %vc611}612 613define <vscale x 4 x float> @vfdiv_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) {614; CHECK-LABEL: vfdiv_vv_nxv4f32:615; CHECK: # %bb.0:616; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma617; CHECK-NEXT: vfdiv.vv v8, v8, v10618; CHECK-NEXT: ret619 %vc = fdiv <vscale x 4 x float> %va, %vb620 ret <vscale x 4 x float> %vc621}622 623define <vscale x 4 x float> @vfdiv_vf_nxv4f32(<vscale x 4 x float> %va, float %b) {624; CHECK-LABEL: vfdiv_vf_nxv4f32:625; CHECK: # %bb.0:626; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma627; CHECK-NEXT: vfdiv.vf v8, v8, fa0628; CHECK-NEXT: ret629 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0630 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer631 %vc = fdiv <vscale x 4 x float> %va, %splat632 ret <vscale x 4 x float> %vc633}634 635define <vscale x 8 x float> @vfdiv_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {636; CHECK-LABEL: vfdiv_vv_nxv8f32:637; CHECK: # %bb.0:638; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma639; CHECK-NEXT: vfdiv.vv v8, v8, v12640; CHECK-NEXT: ret641 %vc = fdiv <vscale x 8 x float> %va, %vb642 ret <vscale x 8 x float> %vc643}644 645define <vscale x 8 x float> @vfdiv_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {646; CHECK-LABEL: vfdiv_vf_nxv8f32:647; CHECK: # %bb.0:648; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma649; CHECK-NEXT: vfdiv.vf v8, v8, fa0650; CHECK-NEXT: ret651 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0652 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer653 %vc = fdiv <vscale x 8 x float> %va, %splat654 ret <vscale x 8 x float> %vc655}656 657define <vscale x 8 x float> @vfdiv_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {658; CHECK-LABEL: vfdiv_fv_nxv8f32:659; CHECK: # %bb.0:660; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma661; CHECK-NEXT: vfrdiv.vf v8, v8, fa0662; CHECK-NEXT: ret663 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0664 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer665 %vc = fdiv <vscale x 8 x float> %splat, %va666 ret <vscale x 8 x float> %vc667}668 669define <vscale x 16 x float> @vfdiv_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) {670; CHECK-LABEL: vfdiv_vv_nxv16f32:671; CHECK: # %bb.0:672; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma673; CHECK-NEXT: vfdiv.vv v8, v8, v16674; CHECK-NEXT: ret675 %vc = fdiv <vscale x 16 x float> %va, %vb676 ret <vscale x 16 x float> %vc677}678 679define <vscale x 16 x float> @vfdiv_vf_nxv16f32(<vscale x 16 x float> %va, float %b) {680; CHECK-LABEL: vfdiv_vf_nxv16f32:681; CHECK: # %bb.0:682; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma683; CHECK-NEXT: vfdiv.vf v8, v8, fa0684; CHECK-NEXT: ret685 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0686 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer687 %vc = fdiv <vscale x 16 x float> %va, %splat688 ret <vscale x 16 x float> %vc689}690 691define <vscale x 1 x double> @vfdiv_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) {692; CHECK-LABEL: vfdiv_vv_nxv1f64:693; CHECK: # %bb.0:694; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma695; CHECK-NEXT: vfdiv.vv v8, v8, v9696; CHECK-NEXT: ret697 %vc = fdiv <vscale x 1 x double> %va, %vb698 ret <vscale x 1 x double> %vc699}700 701define <vscale x 1 x double> @vfdiv_vf_nxv1f64(<vscale x 1 x double> %va, double %b) {702; CHECK-LABEL: vfdiv_vf_nxv1f64:703; CHECK: # %bb.0:704; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma705; CHECK-NEXT: vfdiv.vf v8, v8, fa0706; CHECK-NEXT: ret707 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0708 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer709 %vc = fdiv <vscale x 1 x double> %va, %splat710 ret <vscale x 1 x double> %vc711}712 713define <vscale x 2 x double> @vfdiv_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) {714; CHECK-LABEL: vfdiv_vv_nxv2f64:715; CHECK: # %bb.0:716; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma717; CHECK-NEXT: vfdiv.vv v8, v8, v10718; CHECK-NEXT: ret719 %vc = fdiv <vscale x 2 x double> %va, %vb720 ret <vscale x 2 x double> %vc721}722 723define <vscale x 2 x double> @vfdiv_vf_nxv2f64(<vscale x 2 x double> %va, double %b) {724; CHECK-LABEL: vfdiv_vf_nxv2f64:725; CHECK: # %bb.0:726; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma727; CHECK-NEXT: vfdiv.vf v8, v8, fa0728; CHECK-NEXT: ret729 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0730 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer731 %vc = fdiv <vscale x 2 x double> %va, %splat732 ret <vscale x 2 x double> %vc733}734 735define <vscale x 4 x double> @vfdiv_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) {736; CHECK-LABEL: vfdiv_vv_nxv4f64:737; CHECK: # %bb.0:738; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma739; CHECK-NEXT: vfdiv.vv v8, v8, v12740; CHECK-NEXT: ret741 %vc = fdiv <vscale x 4 x double> %va, %vb742 ret <vscale x 4 x double> %vc743}744 745define <vscale x 4 x double> @vfdiv_vf_nxv4f64(<vscale x 4 x double> %va, double %b) {746; CHECK-LABEL: vfdiv_vf_nxv4f64:747; CHECK: # %bb.0:748; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma749; CHECK-NEXT: vfdiv.vf v8, v8, fa0750; CHECK-NEXT: ret751 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0752 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer753 %vc = fdiv <vscale x 4 x double> %va, %splat754 ret <vscale x 4 x double> %vc755}756 757define <vscale x 8 x double> @vfdiv_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {758; CHECK-LABEL: vfdiv_vv_nxv8f64:759; CHECK: # %bb.0:760; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma761; CHECK-NEXT: vfdiv.vv v8, v8, v16762; CHECK-NEXT: ret763 %vc = fdiv <vscale x 8 x double> %va, %vb764 ret <vscale x 8 x double> %vc765}766 767define <vscale x 8 x double> @vfdiv_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {768; CHECK-LABEL: vfdiv_vf_nxv8f64:769; CHECK: # %bb.0:770; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma771; CHECK-NEXT: vfdiv.vf v8, v8, fa0772; CHECK-NEXT: ret773 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0774 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer775 %vc = fdiv <vscale x 8 x double> %va, %splat776 ret <vscale x 8 x double> %vc777}778 779define <vscale x 8 x double> @vfdiv_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {780; CHECK-LABEL: vfdiv_fv_nxv8f64:781; CHECK: # %bb.0:782; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma783; CHECK-NEXT: vfrdiv.vf v8, v8, fa0784; CHECK-NEXT: ret785 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0786 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer787 %vc = fdiv <vscale x 8 x double> %splat, %va788 ret <vscale x 8 x double> %vc789}790 791define <vscale x 8 x float> @vfdiv_vv_mask_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x i1> %mask) {792; CHECK-LABEL: vfdiv_vv_mask_nxv8f32:793; CHECK: # %bb.0:794; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma795; CHECK-NEXT: vmv.v.i v16, 0796; CHECK-NEXT: vmerge.vvm v12, v16, v12, v0797; CHECK-NEXT: vfdiv.vv v8, v8, v12798; CHECK-NEXT: ret799 %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x float> %vb, <vscale x 8 x float> splat (float 0.0)800 %vc = fdiv <vscale x 8 x float> %va, %vs801 ret <vscale x 8 x float> %vc802}803 804define <vscale x 8 x float> @vfdiv_vf_mask_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x i1> %mask) {805; CHECK-LABEL: vfdiv_vf_mask_nxv8f32:806; CHECK: # %bb.0:807; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma808; CHECK-NEXT: vmv.v.i v12, 0809; CHECK-NEXT: vfmerge.vfm v12, v12, fa0, v0810; CHECK-NEXT: vfdiv.vv v8, v8, v12811; CHECK-NEXT: ret812 %head1 = insertelement <vscale x 8 x float> poison, float %b, i32 0813 %splat1 = shufflevector <vscale x 8 x float> %head1, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer814 %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x float> %splat1, <vscale x 8 x float> splat (float 0.0)815 %vc = fdiv <vscale x 8 x float> %va, %vs816 ret <vscale x 8 x float> %vc817}818