brintos

brintos / llvm-project-archived public Read only

0
0
Text · 41.0 KiB · 6f23723 Raw
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