871 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 \3; RUN: -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \4; RUN: --check-prefixes=CHECK,ZVFH5; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v \6; RUN: -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \7; RUN: --check-prefixes=CHECK,ZVFH8; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \9; RUN: -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \10; RUN: --check-prefixes=CHECK,ZVFHMIN11; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \12; RUN: -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \13; RUN: --check-prefixes=CHECK,ZVFHMIN14 15define <vscale x 1 x bfloat> @vfdiv_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb) strictfp {16; CHECK-LABEL: vfdiv_vv_nxv1bf16:17; CHECK: # %bb.0: # %entry18; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma19; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v920; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v821; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma22; CHECK-NEXT: vfdiv.vv v9, v9, v1023; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma24; CHECK-NEXT: vfncvtbf16.f.f.w v8, v925; CHECK-NEXT: ret26entry:27 %vc = call <vscale x 1 x bfloat> @llvm.experimental.constrained.fdiv.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")28 ret <vscale x 1 x bfloat> %vc29}30 31define <vscale x 1 x bfloat> @vfdiv_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b) strictfp {32; CHECK-LABEL: vfdiv_vf_nxv1bf16:33; CHECK: # %bb.0:34; CHECK-NEXT: fmv.x.h a0, fa035; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma36; CHECK-NEXT: vmv.v.x v9, a037; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v838; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v939; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma40; CHECK-NEXT: vfdiv.vv v9, v10, v841; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma42; CHECK-NEXT: vfncvtbf16.f.f.w v8, v943; CHECK-NEXT: ret44 %head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 045 %splat = shufflevector <vscale x 1 x bfloat> %head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer46 %vc = call <vscale x 1 x bfloat> @llvm.experimental.constrained.fdiv.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")47 ret <vscale x 1 x bfloat> %vc48}49 50define <vscale x 2 x bfloat> @vfdiv_vv_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb) strictfp {51; CHECK-LABEL: vfdiv_vv_nxv2bf16:52; CHECK: # %bb.0: # %entry53; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma54; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v955; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v856; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma57; CHECK-NEXT: vfdiv.vv v9, v9, v1058; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma59; CHECK-NEXT: vfncvtbf16.f.f.w v8, v960; CHECK-NEXT: ret61entry:62 %vc = call <vscale x 2 x bfloat> @llvm.experimental.constrained.fdiv.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")63 ret <vscale x 2 x bfloat> %vc64}65 66define <vscale x 2 x bfloat> @vfdiv_vf_nxv2bf16(<vscale x 2 x bfloat> %va, bfloat %b) strictfp {67; CHECK-LABEL: vfdiv_vf_nxv2bf16:68; CHECK: # %bb.0:69; CHECK-NEXT: fmv.x.h a0, fa070; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma71; CHECK-NEXT: vmv.v.x v9, a072; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v873; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v974; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma75; CHECK-NEXT: vfdiv.vv v9, v10, v876; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma77; CHECK-NEXT: vfncvtbf16.f.f.w v8, v978; CHECK-NEXT: ret79 %head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 080 %splat = shufflevector <vscale x 2 x bfloat> %head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer81 %vc = call <vscale x 2 x bfloat> @llvm.experimental.constrained.fdiv.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")82 ret <vscale x 2 x bfloat> %vc83}84 85define <vscale x 4 x bfloat> @vfdiv_vv_nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb) strictfp {86; CHECK-LABEL: vfdiv_vv_nxv4bf16:87; CHECK: # %bb.0: # %entry88; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma89; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v990; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v891; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma92; CHECK-NEXT: vfdiv.vv v10, v12, v1093; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma94; CHECK-NEXT: vfncvtbf16.f.f.w v8, v1095; CHECK-NEXT: ret96entry:97 %vc = call <vscale x 4 x bfloat> @llvm.experimental.constrained.fdiv.nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")98 ret <vscale x 4 x bfloat> %vc99}100 101define <vscale x 4 x bfloat> @vfdiv_vf_nxv4bf16(<vscale x 4 x bfloat> %va, bfloat %b) strictfp {102; CHECK-LABEL: vfdiv_vf_nxv4bf16:103; CHECK: # %bb.0:104; CHECK-NEXT: fmv.x.h a0, fa0105; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma106; CHECK-NEXT: vmv.v.x v12, a0107; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8108; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v12109; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma110; CHECK-NEXT: vfdiv.vv v10, v10, v8111; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma112; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10113; CHECK-NEXT: ret114 %head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0115 %splat = shufflevector <vscale x 4 x bfloat> %head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer116 %vc = call <vscale x 4 x bfloat> @llvm.experimental.constrained.fdiv.nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")117 ret <vscale x 4 x bfloat> %vc118}119 120define <vscale x 8 x bfloat> @vfdiv_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) strictfp {121; CHECK-LABEL: vfdiv_vv_nxv8bf16:122; CHECK: # %bb.0: # %entry123; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma124; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10125; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8126; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma127; CHECK-NEXT: vfdiv.vv v12, v16, v12128; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma129; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12130; CHECK-NEXT: ret131entry:132 %vc = call <vscale x 8 x bfloat> @llvm.experimental.constrained.fdiv.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")133 ret <vscale x 8 x bfloat> %vc134}135 136define <vscale x 8 x bfloat> @vfdiv_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) strictfp {137; CHECK-LABEL: vfdiv_vf_nxv8bf16:138; CHECK: # %bb.0:139; CHECK-NEXT: fmv.x.h a0, fa0140; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma141; CHECK-NEXT: vmv.v.x v16, a0142; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8143; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v16144; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma145; CHECK-NEXT: vfdiv.vv v12, v12, v8146; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma147; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12148; CHECK-NEXT: ret149 %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0150 %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer151 %vc = call <vscale x 8 x bfloat> @llvm.experimental.constrained.fdiv.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")152 ret <vscale x 8 x bfloat> %vc153}154 155define <vscale x 8 x bfloat> @vfdiv_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) strictfp {156; CHECK-LABEL: vfdiv_fv_nxv8bf16:157; CHECK: # %bb.0:158; CHECK-NEXT: fmv.x.h a0, fa0159; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma160; CHECK-NEXT: vmv.v.x v16, a0161; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8162; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v16163; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma164; CHECK-NEXT: vfdiv.vv v12, v8, v12165; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma166; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12167; CHECK-NEXT: ret168 %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0169 %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer170 %vc = call <vscale x 8 x bfloat> @llvm.experimental.constrained.fdiv.nxv8bf16(<vscale x 8 x bfloat> %splat, <vscale x 8 x bfloat> %va, metadata !"round.dynamic", metadata !"fpexcept.ignore")171 ret <vscale x 8 x bfloat> %vc172}173 174define <vscale x 16 x bfloat> @vfdiv_vv_nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb) strictfp {175; CHECK-LABEL: vfdiv_vv_nxv16bf16:176; CHECK: # %bb.0: # %entry177; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma178; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12179; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v8180; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma181; CHECK-NEXT: vfdiv.vv v16, v24, v16182; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma183; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16184; CHECK-NEXT: ret185entry:186 %vc = call <vscale x 16 x bfloat> @llvm.experimental.constrained.fdiv.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")187 ret <vscale x 16 x bfloat> %vc188}189 190define <vscale x 16 x bfloat> @vfdiv_vf_nxv16bf16(<vscale x 16 x bfloat> %va, bfloat %b) strictfp {191; CHECK-LABEL: vfdiv_vf_nxv16bf16:192; CHECK: # %bb.0:193; CHECK-NEXT: fmv.x.h a0, fa0194; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma195; CHECK-NEXT: vmv.v.x v24, a0196; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8197; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v24198; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma199; CHECK-NEXT: vfdiv.vv v16, v16, v8200; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma201; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16202; CHECK-NEXT: ret203 %head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0204 %splat = shufflevector <vscale x 16 x bfloat> %head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer205 %vc = call <vscale x 16 x bfloat> @llvm.experimental.constrained.fdiv.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")206 ret <vscale x 16 x bfloat> %vc207}208 209define <vscale x 32 x bfloat> @vfdiv_vv_nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb) strictfp {210; CHECK-LABEL: vfdiv_vv_nxv32bf16:211; CHECK: # %bb.0: # %entry212; CHECK-NEXT: addi sp, sp, -16213; CHECK-NEXT: .cfi_def_cfa_offset 16214; CHECK-NEXT: csrr a0, vlenb215; CHECK-NEXT: slli a0, a0, 3216; CHECK-NEXT: sub sp, sp, a0217; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb218; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma219; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v16220; CHECK-NEXT: addi a0, sp, 16221; CHECK-NEXT: vs8r.v v24, (a0) # vscale x 64-byte Folded Spill222; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v8223; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v20224; CHECK-NEXT: vl8r.v v16, (a0) # vscale x 64-byte Folded Reload225; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma226; CHECK-NEXT: vfdiv.vv v16, v0, v16227; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma228; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v12229; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma230; CHECK-NEXT: vfdiv.vv v24, v0, v24231; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma232; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16233; CHECK-NEXT: vfncvtbf16.f.f.w v12, v24234; CHECK-NEXT: csrr a0, vlenb235; CHECK-NEXT: slli a0, a0, 3236; CHECK-NEXT: add sp, sp, a0237; CHECK-NEXT: .cfi_def_cfa sp, 16238; CHECK-NEXT: addi sp, sp, 16239; CHECK-NEXT: .cfi_def_cfa_offset 0240; CHECK-NEXT: ret241entry:242 %vc = call <vscale x 32 x bfloat> @llvm.experimental.constrained.fdiv.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")243 ret <vscale x 32 x bfloat> %vc244}245 246define <vscale x 32 x bfloat> @vfdiv_vf_nxv32bf16(<vscale x 32 x bfloat> %va, bfloat %b) strictfp {247; CHECK-LABEL: vfdiv_vf_nxv32bf16:248; CHECK: # %bb.0:249; CHECK-NEXT: addi sp, sp, -16250; CHECK-NEXT: .cfi_def_cfa_offset 16251; CHECK-NEXT: csrr a0, vlenb252; CHECK-NEXT: slli a0, a0, 3253; CHECK-NEXT: sub sp, sp, a0254; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb255; CHECK-NEXT: fmv.x.h a0, fa0256; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma257; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8258; CHECK-NEXT: addi a1, sp, 16259; CHECK-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill260; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma261; CHECK-NEXT: vmv.v.x v24, a0262; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma263; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v24264; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v28265; CHECK-NEXT: addi a0, sp, 16266; CHECK-NEXT: vl8r.v v24, (a0) # vscale x 64-byte Folded Reload267; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma268; CHECK-NEXT: vfdiv.vv v24, v24, v0269; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma270; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v12271; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma272; CHECK-NEXT: vfdiv.vv v16, v0, v16273; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma274; CHECK-NEXT: vfncvtbf16.f.f.w v8, v24275; CHECK-NEXT: vfncvtbf16.f.f.w v12, v16276; CHECK-NEXT: csrr a0, vlenb277; CHECK-NEXT: slli a0, a0, 3278; CHECK-NEXT: add sp, sp, a0279; CHECK-NEXT: .cfi_def_cfa sp, 16280; CHECK-NEXT: addi sp, sp, 16281; CHECK-NEXT: .cfi_def_cfa_offset 0282; CHECK-NEXT: ret283 %head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0284 %splat = shufflevector <vscale x 32 x bfloat> %head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer285 %vc = call <vscale x 32 x bfloat> @llvm.experimental.constrained.fdiv.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")286 ret <vscale x 32 x bfloat> %vc287}288 289define <vscale x 1 x half> @vfdiv_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) strictfp {290; ZVFH-LABEL: vfdiv_vv_nxv1f16:291; ZVFH: # %bb.0: # %entry292; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma293; ZVFH-NEXT: vfdiv.vv v8, v8, v9294; ZVFH-NEXT: ret295;296; ZVFHMIN-LABEL: vfdiv_vv_nxv1f16:297; ZVFHMIN: # %bb.0: # %entry298; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma299; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9300; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8301; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma302; ZVFHMIN-NEXT: vfdiv.vv v9, v9, v10303; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma304; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9305; ZVFHMIN-NEXT: ret306entry:307 %vc = call <vscale x 1 x half> @llvm.experimental.constrained.fdiv.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")308 ret <vscale x 1 x half> %vc309}310 311define <vscale x 1 x half> @vfdiv_vf_nxv1f16(<vscale x 1 x half> %va, half %b) strictfp {312; ZVFH-LABEL: vfdiv_vf_nxv1f16:313; ZVFH: # %bb.0:314; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma315; ZVFH-NEXT: vfdiv.vf v8, v8, fa0316; ZVFH-NEXT: ret317;318; ZVFHMIN-LABEL: vfdiv_vf_nxv1f16:319; ZVFHMIN: # %bb.0:320; ZVFHMIN-NEXT: fmv.x.h a0, fa0321; ZVFHMIN-NEXT: vsetvli a1, zero, e16, mf4, ta, ma322; ZVFHMIN-NEXT: vmv.v.x v9, a0323; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8324; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9325; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma326; ZVFHMIN-NEXT: vfdiv.vv v9, v10, v8327; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma328; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9329; ZVFHMIN-NEXT: ret330 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0331 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer332 %vc = call <vscale x 1 x half> @llvm.experimental.constrained.fdiv.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")333 ret <vscale x 1 x half> %vc334}335 336define <vscale x 2 x half> @vfdiv_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) strictfp {337; ZVFH-LABEL: vfdiv_vv_nxv2f16:338; ZVFH: # %bb.0: # %entry339; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma340; ZVFH-NEXT: vfdiv.vv v8, v8, v9341; ZVFH-NEXT: ret342;343; ZVFHMIN-LABEL: vfdiv_vv_nxv2f16:344; ZVFHMIN: # %bb.0: # %entry345; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma346; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9347; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8348; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma349; ZVFHMIN-NEXT: vfdiv.vv v9, v9, v10350; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma351; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9352; ZVFHMIN-NEXT: ret353entry:354 %vc = call <vscale x 2 x half> @llvm.experimental.constrained.fdiv.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")355 ret <vscale x 2 x half> %vc356}357 358define <vscale x 2 x half> @vfdiv_vf_nxv2f16(<vscale x 2 x half> %va, half %b) strictfp {359; ZVFH-LABEL: vfdiv_vf_nxv2f16:360; ZVFH: # %bb.0:361; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma362; ZVFH-NEXT: vfdiv.vf v8, v8, fa0363; ZVFH-NEXT: ret364;365; ZVFHMIN-LABEL: vfdiv_vf_nxv2f16:366; ZVFHMIN: # %bb.0:367; ZVFHMIN-NEXT: fmv.x.h a0, fa0368; ZVFHMIN-NEXT: vsetvli a1, zero, e16, mf2, ta, ma369; ZVFHMIN-NEXT: vmv.v.x v9, a0370; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8371; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9372; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma373; ZVFHMIN-NEXT: vfdiv.vv v9, v10, v8374; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma375; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9376; ZVFHMIN-NEXT: ret377 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0378 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer379 %vc = call <vscale x 2 x half> @llvm.experimental.constrained.fdiv.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")380 ret <vscale x 2 x half> %vc381}382 383define <vscale x 4 x half> @vfdiv_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) strictfp {384; ZVFH-LABEL: vfdiv_vv_nxv4f16:385; ZVFH: # %bb.0: # %entry386; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma387; ZVFH-NEXT: vfdiv.vv v8, v8, v9388; ZVFH-NEXT: ret389;390; ZVFHMIN-LABEL: vfdiv_vv_nxv4f16:391; ZVFHMIN: # %bb.0: # %entry392; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma393; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9394; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8395; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma396; ZVFHMIN-NEXT: vfdiv.vv v10, v12, v10397; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma398; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10399; ZVFHMIN-NEXT: ret400entry:401 %vc = call <vscale x 4 x half> @llvm.experimental.constrained.fdiv.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")402 ret <vscale x 4 x half> %vc403}404 405define <vscale x 4 x half> @vfdiv_vf_nxv4f16(<vscale x 4 x half> %va, half %b) strictfp {406; ZVFH-LABEL: vfdiv_vf_nxv4f16:407; ZVFH: # %bb.0:408; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma409; ZVFH-NEXT: vfdiv.vf v8, v8, fa0410; ZVFH-NEXT: ret411;412; ZVFHMIN-LABEL: vfdiv_vf_nxv4f16:413; ZVFHMIN: # %bb.0:414; ZVFHMIN-NEXT: fmv.x.h a0, fa0415; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m1, ta, ma416; ZVFHMIN-NEXT: vmv.v.x v12, a0417; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8418; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v12419; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma420; ZVFHMIN-NEXT: vfdiv.vv v10, v10, v8421; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma422; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10423; ZVFHMIN-NEXT: ret424 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0425 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer426 %vc = call <vscale x 4 x half> @llvm.experimental.constrained.fdiv.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")427 ret <vscale x 4 x half> %vc428}429 430define <vscale x 8 x half> @vfdiv_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) strictfp {431; ZVFH-LABEL: vfdiv_vv_nxv8f16:432; ZVFH: # %bb.0: # %entry433; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma434; ZVFH-NEXT: vfdiv.vv v8, v8, v10435; ZVFH-NEXT: ret436;437; ZVFHMIN-LABEL: vfdiv_vv_nxv8f16:438; ZVFHMIN: # %bb.0: # %entry439; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma440; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10441; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8442; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma443; ZVFHMIN-NEXT: vfdiv.vv v12, v16, v12444; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma445; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12446; ZVFHMIN-NEXT: ret447entry:448 %vc = call <vscale x 8 x half> @llvm.experimental.constrained.fdiv.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")449 ret <vscale x 8 x half> %vc450}451 452define <vscale x 8 x half> @vfdiv_vf_nxv8f16(<vscale x 8 x half> %va, half %b) strictfp {453; ZVFH-LABEL: vfdiv_vf_nxv8f16:454; ZVFH: # %bb.0:455; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma456; ZVFH-NEXT: vfdiv.vf v8, v8, fa0457; ZVFH-NEXT: ret458;459; ZVFHMIN-LABEL: vfdiv_vf_nxv8f16:460; ZVFHMIN: # %bb.0:461; ZVFHMIN-NEXT: fmv.x.h a0, fa0462; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma463; ZVFHMIN-NEXT: vmv.v.x v16, a0464; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8465; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16466; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma467; ZVFHMIN-NEXT: vfdiv.vv v12, v12, v8468; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma469; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12470; ZVFHMIN-NEXT: ret471 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0472 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer473 %vc = call <vscale x 8 x half> @llvm.experimental.constrained.fdiv.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")474 ret <vscale x 8 x half> %vc475}476 477define <vscale x 8 x half> @vfdiv_fv_nxv8f16(<vscale x 8 x half> %va, half %b) strictfp {478; ZVFH-LABEL: vfdiv_fv_nxv8f16:479; ZVFH: # %bb.0:480; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma481; ZVFH-NEXT: vfrdiv.vf v8, v8, fa0482; ZVFH-NEXT: ret483;484; ZVFHMIN-LABEL: vfdiv_fv_nxv8f16:485; ZVFHMIN: # %bb.0:486; ZVFHMIN-NEXT: fmv.x.h a0, fa0487; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma488; ZVFHMIN-NEXT: vmv.v.x v16, a0489; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8490; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16491; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma492; ZVFHMIN-NEXT: vfdiv.vv v12, v8, v12493; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma494; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12495; ZVFHMIN-NEXT: ret496 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0497 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer498 %vc = call <vscale x 8 x half> @llvm.experimental.constrained.fdiv.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"round.dynamic", metadata !"fpexcept.ignore")499 ret <vscale x 8 x half> %vc500}501 502define <vscale x 16 x half> @vfdiv_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) strictfp {503; ZVFH-LABEL: vfdiv_vv_nxv16f16:504; ZVFH: # %bb.0: # %entry505; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma506; ZVFH-NEXT: vfdiv.vv v8, v8, v12507; ZVFH-NEXT: ret508;509; ZVFHMIN-LABEL: vfdiv_vv_nxv16f16:510; ZVFHMIN: # %bb.0: # %entry511; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma512; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12513; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8514; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma515; ZVFHMIN-NEXT: vfdiv.vv v16, v24, v16516; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma517; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16518; ZVFHMIN-NEXT: ret519entry:520 %vc = call <vscale x 16 x half> @llvm.experimental.constrained.fdiv.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")521 ret <vscale x 16 x half> %vc522}523 524define <vscale x 16 x half> @vfdiv_vf_nxv16f16(<vscale x 16 x half> %va, half %b) strictfp {525; ZVFH-LABEL: vfdiv_vf_nxv16f16:526; ZVFH: # %bb.0:527; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma528; ZVFH-NEXT: vfdiv.vf v8, v8, fa0529; ZVFH-NEXT: ret530;531; ZVFHMIN-LABEL: vfdiv_vf_nxv16f16:532; ZVFHMIN: # %bb.0:533; ZVFHMIN-NEXT: fmv.x.h a0, fa0534; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma535; ZVFHMIN-NEXT: vmv.v.x v24, a0536; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8537; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v24538; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma539; ZVFHMIN-NEXT: vfdiv.vv v16, v16, v8540; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma541; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16542; ZVFHMIN-NEXT: ret543 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0544 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer545 %vc = call <vscale x 16 x half> @llvm.experimental.constrained.fdiv.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")546 ret <vscale x 16 x half> %vc547}548 549define <vscale x 32 x half> @vfdiv_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) strictfp {550; ZVFH-LABEL: vfdiv_vv_nxv32f16:551; ZVFH: # %bb.0: # %entry552; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma553; ZVFH-NEXT: vfdiv.vv v8, v8, v16554; ZVFH-NEXT: ret555;556; ZVFHMIN-LABEL: vfdiv_vv_nxv32f16:557; ZVFHMIN: # %bb.0: # %entry558; ZVFHMIN-NEXT: addi sp, sp, -16559; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16560; ZVFHMIN-NEXT: csrr a0, vlenb561; ZVFHMIN-NEXT: slli a0, a0, 3562; ZVFHMIN-NEXT: sub sp, sp, a0563; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb564; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma565; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16566; ZVFHMIN-NEXT: addi a0, sp, 16567; ZVFHMIN-NEXT: vs8r.v v24, (a0) # vscale x 64-byte Folded Spill568; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8569; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20570; ZVFHMIN-NEXT: vl8r.v v16, (a0) # vscale x 64-byte Folded Reload571; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma572; ZVFHMIN-NEXT: vfdiv.vv v16, v0, v16573; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma574; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v12575; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma576; ZVFHMIN-NEXT: vfdiv.vv v24, v0, v24577; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma578; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16579; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v24580; ZVFHMIN-NEXT: csrr a0, vlenb581; ZVFHMIN-NEXT: slli a0, a0, 3582; ZVFHMIN-NEXT: add sp, sp, a0583; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16584; ZVFHMIN-NEXT: addi sp, sp, 16585; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0586; ZVFHMIN-NEXT: ret587entry:588 %vc = call <vscale x 32 x half> @llvm.experimental.constrained.fdiv.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")589 ret <vscale x 32 x half> %vc590}591 592define <vscale x 32 x half> @vfdiv_vf_nxv32f16(<vscale x 32 x half> %va, half %b) strictfp {593; ZVFH-LABEL: vfdiv_vf_nxv32f16:594; ZVFH: # %bb.0:595; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma596; ZVFH-NEXT: vfdiv.vf v8, v8, fa0597; ZVFH-NEXT: ret598;599; ZVFHMIN-LABEL: vfdiv_vf_nxv32f16:600; ZVFHMIN: # %bb.0:601; ZVFHMIN-NEXT: addi sp, sp, -16602; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16603; ZVFHMIN-NEXT: csrr a0, vlenb604; ZVFHMIN-NEXT: slli a0, a0, 3605; ZVFHMIN-NEXT: sub sp, sp, a0606; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb607; ZVFHMIN-NEXT: fmv.x.h a0, fa0608; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma609; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8610; ZVFHMIN-NEXT: addi a1, sp, 16611; ZVFHMIN-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill612; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m8, ta, ma613; ZVFHMIN-NEXT: vmv.v.x v24, a0614; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma615; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v24616; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v28617; ZVFHMIN-NEXT: addi a0, sp, 16618; ZVFHMIN-NEXT: vl8r.v v24, (a0) # vscale x 64-byte Folded Reload619; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma620; ZVFHMIN-NEXT: vfdiv.vv v24, v24, v0621; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma622; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v12623; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma624; ZVFHMIN-NEXT: vfdiv.vv v16, v0, v16625; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma626; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v24627; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16628; ZVFHMIN-NEXT: csrr a0, vlenb629; ZVFHMIN-NEXT: slli a0, a0, 3630; ZVFHMIN-NEXT: add sp, sp, a0631; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16632; ZVFHMIN-NEXT: addi sp, sp, 16633; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0634; ZVFHMIN-NEXT: ret635 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0636 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer637 %vc = call <vscale x 32 x half> @llvm.experimental.constrained.fdiv.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")638 ret <vscale x 32 x half> %vc639}640 641define <vscale x 1 x float> @vfdiv_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) strictfp {642; CHECK-LABEL: vfdiv_vv_nxv1f32:643; CHECK: # %bb.0: # %entry644; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma645; CHECK-NEXT: vfdiv.vv v8, v8, v9646; CHECK-NEXT: ret647entry:648 %vc = call <vscale x 1 x float> @llvm.experimental.constrained.fdiv.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")649 ret <vscale x 1 x float> %vc650}651 652define <vscale x 1 x float> @vfdiv_vf_nxv1f32(<vscale x 1 x float> %va, float %b) strictfp {653; CHECK-LABEL: vfdiv_vf_nxv1f32:654; CHECK: # %bb.0:655; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma656; CHECK-NEXT: vfdiv.vf v8, v8, fa0657; CHECK-NEXT: ret658 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0659 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer660 %vc = call <vscale x 1 x float> @llvm.experimental.constrained.fdiv.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")661 ret <vscale x 1 x float> %vc662}663 664define <vscale x 2 x float> @vfdiv_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) strictfp {665; CHECK-LABEL: vfdiv_vv_nxv2f32:666; CHECK: # %bb.0: # %entry667; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma668; CHECK-NEXT: vfdiv.vv v8, v8, v9669; CHECK-NEXT: ret670entry:671 %vc = call <vscale x 2 x float> @llvm.experimental.constrained.fdiv.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")672 ret <vscale x 2 x float> %vc673}674 675define <vscale x 2 x float> @vfdiv_vf_nxv2f32(<vscale x 2 x float> %va, float %b) strictfp {676; CHECK-LABEL: vfdiv_vf_nxv2f32:677; CHECK: # %bb.0:678; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma679; CHECK-NEXT: vfdiv.vf v8, v8, fa0680; CHECK-NEXT: ret681 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0682 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer683 %vc = call <vscale x 2 x float> @llvm.experimental.constrained.fdiv.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")684 ret <vscale x 2 x float> %vc685}686 687define <vscale x 4 x float> @vfdiv_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) strictfp {688; CHECK-LABEL: vfdiv_vv_nxv4f32:689; CHECK: # %bb.0: # %entry690; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma691; CHECK-NEXT: vfdiv.vv v8, v8, v10692; CHECK-NEXT: ret693entry:694 %vc = call <vscale x 4 x float> @llvm.experimental.constrained.fdiv.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")695 ret <vscale x 4 x float> %vc696}697 698define <vscale x 4 x float> @vfdiv_vf_nxv4f32(<vscale x 4 x float> %va, float %b) strictfp {699; CHECK-LABEL: vfdiv_vf_nxv4f32:700; CHECK: # %bb.0:701; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma702; CHECK-NEXT: vfdiv.vf v8, v8, fa0703; CHECK-NEXT: ret704 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0705 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer706 %vc = call <vscale x 4 x float> @llvm.experimental.constrained.fdiv.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")707 ret <vscale x 4 x float> %vc708}709 710define <vscale x 8 x float> @vfdiv_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) strictfp {711; CHECK-LABEL: vfdiv_vv_nxv8f32:712; CHECK: # %bb.0: # %entry713; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma714; CHECK-NEXT: vfdiv.vv v8, v8, v12715; CHECK-NEXT: ret716entry:717 %vc = call <vscale x 8 x float> @llvm.experimental.constrained.fdiv.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")718 ret <vscale x 8 x float> %vc719}720 721define <vscale x 8 x float> @vfdiv_vf_nxv8f32(<vscale x 8 x float> %va, float %b) strictfp {722; CHECK-LABEL: vfdiv_vf_nxv8f32:723; CHECK: # %bb.0:724; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma725; CHECK-NEXT: vfdiv.vf v8, v8, fa0726; CHECK-NEXT: ret727 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0728 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer729 %vc = call <vscale x 8 x float> @llvm.experimental.constrained.fdiv.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")730 ret <vscale x 8 x float> %vc731}732 733define <vscale x 8 x float> @vfdiv_fv_nxv8f32(<vscale x 8 x float> %va, float %b) strictfp {734; CHECK-LABEL: vfdiv_fv_nxv8f32:735; CHECK: # %bb.0:736; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma737; CHECK-NEXT: vfrdiv.vf v8, v8, fa0738; CHECK-NEXT: ret739 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0740 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer741 %vc = call <vscale x 8 x float> @llvm.experimental.constrained.fdiv.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.ignore")742 ret <vscale x 8 x float> %vc743}744 745define <vscale x 16 x float> @vfdiv_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) strictfp {746; CHECK-LABEL: vfdiv_vv_nxv16f32:747; CHECK: # %bb.0: # %entry748; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma749; CHECK-NEXT: vfdiv.vv v8, v8, v16750; CHECK-NEXT: ret751entry:752 %vc = call <vscale x 16 x float> @llvm.experimental.constrained.fdiv.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")753 ret <vscale x 16 x float> %vc754}755 756define <vscale x 16 x float> @vfdiv_vf_nxv16f32(<vscale x 16 x float> %va, float %b) strictfp {757; CHECK-LABEL: vfdiv_vf_nxv16f32:758; CHECK: # %bb.0:759; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma760; CHECK-NEXT: vfdiv.vf v8, v8, fa0761; CHECK-NEXT: ret762 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0763 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer764 %vc = call <vscale x 16 x float> @llvm.experimental.constrained.fdiv.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")765 ret <vscale x 16 x float> %vc766}767 768define <vscale x 1 x double> @vfdiv_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) strictfp {769; CHECK-LABEL: vfdiv_vv_nxv1f64:770; CHECK: # %bb.0: # %entry771; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma772; CHECK-NEXT: vfdiv.vv v8, v8, v9773; CHECK-NEXT: ret774entry:775 %vc = call <vscale x 1 x double> @llvm.experimental.constrained.fdiv.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")776 ret <vscale x 1 x double> %vc777}778 779define <vscale x 1 x double> @vfdiv_vf_nxv1f64(<vscale x 1 x double> %va, double %b) strictfp {780; CHECK-LABEL: vfdiv_vf_nxv1f64:781; CHECK: # %bb.0:782; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma783; CHECK-NEXT: vfdiv.vf v8, v8, fa0784; CHECK-NEXT: ret785 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0786 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer787 %vc = call <vscale x 1 x double> @llvm.experimental.constrained.fdiv.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")788 ret <vscale x 1 x double> %vc789}790 791define <vscale x 2 x double> @vfdiv_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) strictfp {792; CHECK-LABEL: vfdiv_vv_nxv2f64:793; CHECK: # %bb.0: # %entry794; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma795; CHECK-NEXT: vfdiv.vv v8, v8, v10796; CHECK-NEXT: ret797entry:798 %vc = call <vscale x 2 x double> @llvm.experimental.constrained.fdiv.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")799 ret <vscale x 2 x double> %vc800}801 802define <vscale x 2 x double> @vfdiv_vf_nxv2f64(<vscale x 2 x double> %va, double %b) strictfp {803; CHECK-LABEL: vfdiv_vf_nxv2f64:804; CHECK: # %bb.0:805; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma806; CHECK-NEXT: vfdiv.vf v8, v8, fa0807; CHECK-NEXT: ret808 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0809 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer810 %vc = call <vscale x 2 x double> @llvm.experimental.constrained.fdiv.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")811 ret <vscale x 2 x double> %vc812}813 814define <vscale x 4 x double> @vfdiv_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) strictfp {815; CHECK-LABEL: vfdiv_vv_nxv4f64:816; CHECK: # %bb.0: # %entry817; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma818; CHECK-NEXT: vfdiv.vv v8, v8, v12819; CHECK-NEXT: ret820entry:821 %vc = call <vscale x 4 x double> @llvm.experimental.constrained.fdiv.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")822 ret <vscale x 4 x double> %vc823}824 825define <vscale x 4 x double> @vfdiv_vf_nxv4f64(<vscale x 4 x double> %va, double %b) strictfp {826; CHECK-LABEL: vfdiv_vf_nxv4f64:827; CHECK: # %bb.0:828; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma829; CHECK-NEXT: vfdiv.vf v8, v8, fa0830; CHECK-NEXT: ret831 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0832 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer833 %vc = call <vscale x 4 x double> @llvm.experimental.constrained.fdiv.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")834 ret <vscale x 4 x double> %vc835}836 837define <vscale x 8 x double> @vfdiv_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) strictfp {838; CHECK-LABEL: vfdiv_vv_nxv8f64:839; CHECK: # %bb.0: # %entry840; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma841; CHECK-NEXT: vfdiv.vv v8, v8, v16842; CHECK-NEXT: ret843entry:844 %vc = call <vscale x 8 x double> @llvm.experimental.constrained.fdiv.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")845 ret <vscale x 8 x double> %vc846}847 848define <vscale x 8 x double> @vfdiv_vf_nxv8f64(<vscale x 8 x double> %va, double %b) strictfp {849; CHECK-LABEL: vfdiv_vf_nxv8f64:850; CHECK: # %bb.0:851; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma852; CHECK-NEXT: vfdiv.vf v8, v8, fa0853; CHECK-NEXT: ret854 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0855 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer856 %vc = call <vscale x 8 x double> @llvm.experimental.constrained.fdiv.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")857 ret <vscale x 8 x double> %vc858}859 860define <vscale x 8 x double> @vfdiv_fv_nxv8f64(<vscale x 8 x double> %va, double %b) strictfp {861; CHECK-LABEL: vfdiv_fv_nxv8f64:862; CHECK: # %bb.0:863; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma864; CHECK-NEXT: vfrdiv.vf v8, v8, fa0865; CHECK-NEXT: ret866 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0867 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer868 %vc = call <vscale x 8 x double> @llvm.experimental.constrained.fdiv.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.ignore")869 ret <vscale x 8 x double> %vc870}871