1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; 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,ZVFH 5; 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,ZVFH 8; 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,ZVFHMIN 11; 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,ZVFHMIN 14 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: # %entry 18; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 19; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 20; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 21; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 22; CHECK-NEXT: vfdiv.vv v9, v9, v10 23; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 24; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9 25; CHECK-NEXT: ret 26entry: 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> %vc 29} 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, fa0 35; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma 36; CHECK-NEXT: vmv.v.x v9, a0 37; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 38; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 39; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 40; CHECK-NEXT: vfdiv.vv v9, v10, v8 41; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 42; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9 43; CHECK-NEXT: ret 44 %head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 45 %splat = shufflevector <vscale x 1 x bfloat> %head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 46 %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> %vc 48} 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: # %entry 53; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 54; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 55; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 56; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma 57; CHECK-NEXT: vfdiv.vv v9, v9, v10 58; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 59; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9 60; CHECK-NEXT: ret 61entry: 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> %vc 64} 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, fa0 70; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma 71; CHECK-NEXT: vmv.v.x v9, a0 72; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 73; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 74; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma 75; CHECK-NEXT: vfdiv.vv v9, v10, v8 76; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 77; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9 78; CHECK-NEXT: ret 79 %head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 0 80 %splat = shufflevector <vscale x 2 x bfloat> %head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer 81 %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> %vc 83} 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: # %entry 88; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 89; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 90; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 91; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma 92; CHECK-NEXT: vfdiv.vv v10, v12, v10 93; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma 94; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10 95; CHECK-NEXT: ret 96entry: 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> %vc 99} 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, fa0 105; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma 106; CHECK-NEXT: vmv.v.x v9, a0 107; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 108; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v9 109; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma 110; CHECK-NEXT: vfdiv.vv v10, v10, v12 111; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma 112; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10 113; CHECK-NEXT: ret 114 %head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0 115 %splat = shufflevector <vscale x 4 x bfloat> %head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer 116 %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> %vc 118} 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: # %entry 123; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 124; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10 125; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 126; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 127; CHECK-NEXT: vfdiv.vv v12, v16, v12 128; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma 129; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12 130; CHECK-NEXT: ret 131entry: 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> %vc 134} 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, fa0 140; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma 141; CHECK-NEXT: vmv.v.x v10, a0 142; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 143; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 144; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 145; CHECK-NEXT: vfdiv.vv v12, v12, v16 146; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma 147; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12 148; CHECK-NEXT: ret 149 %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 150 %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 151 %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> %vc 153} 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, fa0 159; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma 160; CHECK-NEXT: vmv.v.x v10, a0 161; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 162; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 163; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 164; CHECK-NEXT: vfdiv.vv v12, v16, v12 165; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma 166; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12 167; CHECK-NEXT: ret 168 %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 169 %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 170 %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> %vc 172} 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: # %entry 177; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 178; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12 179; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v8 180; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma 181; CHECK-NEXT: vfdiv.vv v16, v24, v16 182; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma 183; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16 184; CHECK-NEXT: ret 185entry: 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> %vc 188} 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, fa0 194; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma 195; CHECK-NEXT: vmv.v.x v12, a0 196; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 197; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v12 198; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma 199; CHECK-NEXT: vfdiv.vv v16, v16, v24 200; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma 201; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16 202; CHECK-NEXT: ret 203 %head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0 204 %splat = shufflevector <vscale x 16 x bfloat> %head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer 205 %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> %vc 207} 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: # %entry 212; CHECK-NEXT: addi sp, sp, -16 213; CHECK-NEXT: .cfi_def_cfa_offset 16 214; CHECK-NEXT: csrr a0, vlenb 215; CHECK-NEXT: slli a0, a0, 3 216; CHECK-NEXT: sub sp, sp, a0 217; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb 218; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 219; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v16 220; CHECK-NEXT: addi a0, sp, 16 221; CHECK-NEXT: vs8r.v v24, (a0) # Unknown-size Folded Spill 222; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v8 223; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v20 224; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12 225; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload 226; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma 227; CHECK-NEXT: vfdiv.vv v0, v0, v8 228; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma 229; CHECK-NEXT: vfncvtbf16.f.f.w v8, v0 230; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma 231; CHECK-NEXT: vfdiv.vv v16, v16, v24 232; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma 233; CHECK-NEXT: vfncvtbf16.f.f.w v12, v16 234; CHECK-NEXT: csrr a0, vlenb 235; CHECK-NEXT: slli a0, a0, 3 236; CHECK-NEXT: add sp, sp, a0 237; CHECK-NEXT: .cfi_def_cfa sp, 16 238; CHECK-NEXT: addi sp, sp, 16 239; CHECK-NEXT: .cfi_def_cfa_offset 0 240; CHECK-NEXT: ret 241entry: 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> %vc 244} 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, -16 250; CHECK-NEXT: .cfi_def_cfa_offset 16 251; CHECK-NEXT: csrr a0, vlenb 252; CHECK-NEXT: slli a0, a0, 3 253; CHECK-NEXT: sub sp, sp, a0 254; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb 255; CHECK-NEXT: fmv.x.h a0, fa0 256; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma 257; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 258; CHECK-NEXT: addi a1, sp, 16 259; CHECK-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill 260; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v12 261; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma 262; CHECK-NEXT: vmv.v.x v8, a0 263; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 264; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v8 265; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12 266; CHECK-NEXT: addi a0, sp, 16 267; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload 268; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma 269; CHECK-NEXT: vfdiv.vv v0, v8, v0 270; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma 271; CHECK-NEXT: vfncvtbf16.f.f.w v8, v0 272; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma 273; CHECK-NEXT: vfdiv.vv v16, v24, v16 274; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma 275; CHECK-NEXT: vfncvtbf16.f.f.w v12, v16 276; CHECK-NEXT: csrr a0, vlenb 277; CHECK-NEXT: slli a0, a0, 3 278; CHECK-NEXT: add sp, sp, a0 279; CHECK-NEXT: .cfi_def_cfa sp, 16 280; CHECK-NEXT: addi sp, sp, 16 281; CHECK-NEXT: .cfi_def_cfa_offset 0 282; CHECK-NEXT: ret 283 %head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0 284 %splat = shufflevector <vscale x 32 x bfloat> %head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer 285 %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> %vc 287} 288 289declare <vscale x 1 x half> @llvm.experimental.constrained.fdiv.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, metadata, metadata) 290define <vscale x 1 x half> @vfdiv_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) strictfp { 291; ZVFH-LABEL: vfdiv_vv_nxv1f16: 292; ZVFH: # %bb.0: # %entry 293; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 294; ZVFH-NEXT: vfdiv.vv v8, v8, v9 295; ZVFH-NEXT: ret 296; 297; ZVFHMIN-LABEL: vfdiv_vv_nxv1f16: 298; ZVFHMIN: # %bb.0: # %entry 299; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 300; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 301; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 302; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 303; ZVFHMIN-NEXT: vfdiv.vv v9, v9, v10 304; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 305; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 306; ZVFHMIN-NEXT: ret 307entry: 308 %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") 309 ret <vscale x 1 x half> %vc 310} 311 312define <vscale x 1 x half> @vfdiv_vf_nxv1f16(<vscale x 1 x half> %va, half %b) strictfp { 313; ZVFH-LABEL: vfdiv_vf_nxv1f16: 314; ZVFH: # %bb.0: 315; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 316; ZVFH-NEXT: vfdiv.vf v8, v8, fa0 317; ZVFH-NEXT: ret 318; 319; ZVFHMIN-LABEL: vfdiv_vf_nxv1f16: 320; ZVFHMIN: # %bb.0: 321; ZVFHMIN-NEXT: fmv.x.h a0, fa0 322; ZVFHMIN-NEXT: vsetvli a1, zero, e16, mf4, ta, ma 323; ZVFHMIN-NEXT: vmv.v.x v9, a0 324; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 325; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 326; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 327; ZVFHMIN-NEXT: vfdiv.vv v9, v10, v8 328; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 329; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 330; ZVFHMIN-NEXT: ret 331 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 332 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 333 %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") 334 ret <vscale x 1 x half> %vc 335} 336 337declare <vscale x 2 x half> @llvm.experimental.constrained.fdiv.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, metadata, metadata) 338define <vscale x 2 x half> @vfdiv_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) strictfp { 339; ZVFH-LABEL: vfdiv_vv_nxv2f16: 340; ZVFH: # %bb.0: # %entry 341; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 342; ZVFH-NEXT: vfdiv.vv v8, v8, v9 343; ZVFH-NEXT: ret 344; 345; ZVFHMIN-LABEL: vfdiv_vv_nxv2f16: 346; ZVFHMIN: # %bb.0: # %entry 347; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 348; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 349; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 350; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 351; ZVFHMIN-NEXT: vfdiv.vv v9, v9, v10 352; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 353; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 354; ZVFHMIN-NEXT: ret 355entry: 356 %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") 357 ret <vscale x 2 x half> %vc 358} 359 360define <vscale x 2 x half> @vfdiv_vf_nxv2f16(<vscale x 2 x half> %va, half %b) strictfp { 361; ZVFH-LABEL: vfdiv_vf_nxv2f16: 362; ZVFH: # %bb.0: 363; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 364; ZVFH-NEXT: vfdiv.vf v8, v8, fa0 365; ZVFH-NEXT: ret 366; 367; ZVFHMIN-LABEL: vfdiv_vf_nxv2f16: 368; ZVFHMIN: # %bb.0: 369; ZVFHMIN-NEXT: fmv.x.h a0, fa0 370; ZVFHMIN-NEXT: vsetvli a1, zero, e16, mf2, ta, ma 371; ZVFHMIN-NEXT: vmv.v.x v9, a0 372; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 373; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 374; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 375; ZVFHMIN-NEXT: vfdiv.vv v9, v10, v8 376; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 377; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 378; ZVFHMIN-NEXT: ret 379 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 380 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 381 %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") 382 ret <vscale x 2 x half> %vc 383} 384 385declare <vscale x 4 x half> @llvm.experimental.constrained.fdiv.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, metadata, metadata) 386define <vscale x 4 x half> @vfdiv_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) strictfp { 387; ZVFH-LABEL: vfdiv_vv_nxv4f16: 388; ZVFH: # %bb.0: # %entry 389; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma 390; ZVFH-NEXT: vfdiv.vv v8, v8, v9 391; ZVFH-NEXT: ret 392; 393; ZVFHMIN-LABEL: vfdiv_vv_nxv4f16: 394; ZVFHMIN: # %bb.0: # %entry 395; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma 396; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 397; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 398; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma 399; ZVFHMIN-NEXT: vfdiv.vv v10, v12, v10 400; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma 401; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10 402; ZVFHMIN-NEXT: ret 403entry: 404 %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") 405 ret <vscale x 4 x half> %vc 406} 407 408define <vscale x 4 x half> @vfdiv_vf_nxv4f16(<vscale x 4 x half> %va, half %b) strictfp { 409; ZVFH-LABEL: vfdiv_vf_nxv4f16: 410; ZVFH: # %bb.0: 411; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma 412; ZVFH-NEXT: vfdiv.vf v8, v8, fa0 413; ZVFH-NEXT: ret 414; 415; ZVFHMIN-LABEL: vfdiv_vf_nxv4f16: 416; ZVFHMIN: # %bb.0: 417; ZVFHMIN-NEXT: fmv.x.h a0, fa0 418; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m1, ta, ma 419; ZVFHMIN-NEXT: vmv.v.x v9, a0 420; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 421; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9 422; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma 423; ZVFHMIN-NEXT: vfdiv.vv v10, v10, v12 424; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma 425; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10 426; ZVFHMIN-NEXT: ret 427 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 428 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 429 %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") 430 ret <vscale x 4 x half> %vc 431} 432 433declare <vscale x 8 x half> @llvm.experimental.constrained.fdiv.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, metadata, metadata) 434define <vscale x 8 x half> @vfdiv_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) strictfp { 435; ZVFH-LABEL: vfdiv_vv_nxv8f16: 436; ZVFH: # %bb.0: # %entry 437; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma 438; ZVFH-NEXT: vfdiv.vv v8, v8, v10 439; ZVFH-NEXT: ret 440; 441; ZVFHMIN-LABEL: vfdiv_vv_nxv8f16: 442; ZVFHMIN: # %bb.0: # %entry 443; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma 444; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 445; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 446; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 447; ZVFHMIN-NEXT: vfdiv.vv v12, v16, v12 448; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 449; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12 450; ZVFHMIN-NEXT: ret 451entry: 452 %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") 453 ret <vscale x 8 x half> %vc 454} 455 456define <vscale x 8 x half> @vfdiv_vf_nxv8f16(<vscale x 8 x half> %va, half %b) strictfp { 457; ZVFH-LABEL: vfdiv_vf_nxv8f16: 458; ZVFH: # %bb.0: 459; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma 460; ZVFH-NEXT: vfdiv.vf v8, v8, fa0 461; ZVFH-NEXT: ret 462; 463; ZVFHMIN-LABEL: vfdiv_vf_nxv8f16: 464; ZVFHMIN: # %bb.0: 465; ZVFHMIN-NEXT: fmv.x.h a0, fa0 466; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma 467; ZVFHMIN-NEXT: vmv.v.x v10, a0 468; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 469; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 470; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 471; ZVFHMIN-NEXT: vfdiv.vv v12, v12, v16 472; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 473; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12 474; ZVFHMIN-NEXT: ret 475 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 476 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 477 %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") 478 ret <vscale x 8 x half> %vc 479} 480 481define <vscale x 8 x half> @vfdiv_fv_nxv8f16(<vscale x 8 x half> %va, half %b) strictfp { 482; ZVFH-LABEL: vfdiv_fv_nxv8f16: 483; ZVFH: # %bb.0: 484; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma 485; ZVFH-NEXT: vfrdiv.vf v8, v8, fa0 486; ZVFH-NEXT: ret 487; 488; ZVFHMIN-LABEL: vfdiv_fv_nxv8f16: 489; ZVFHMIN: # %bb.0: 490; ZVFHMIN-NEXT: fmv.x.h a0, fa0 491; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma 492; ZVFHMIN-NEXT: vmv.v.x v10, a0 493; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 494; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 495; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 496; ZVFHMIN-NEXT: vfdiv.vv v12, v16, v12 497; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 498; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12 499; ZVFHMIN-NEXT: ret 500 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 501 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 502 %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") 503 ret <vscale x 8 x half> %vc 504} 505 506declare <vscale x 16 x half> @llvm.experimental.constrained.fdiv.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, metadata, metadata) 507define <vscale x 16 x half> @vfdiv_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) strictfp { 508; ZVFH-LABEL: vfdiv_vv_nxv16f16: 509; ZVFH: # %bb.0: # %entry 510; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma 511; ZVFH-NEXT: vfdiv.vv v8, v8, v12 512; ZVFH-NEXT: ret 513; 514; ZVFHMIN-LABEL: vfdiv_vv_nxv16f16: 515; ZVFHMIN: # %bb.0: # %entry 516; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma 517; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 518; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8 519; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 520; ZVFHMIN-NEXT: vfdiv.vv v16, v24, v16 521; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 522; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16 523; ZVFHMIN-NEXT: ret 524entry: 525 %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") 526 ret <vscale x 16 x half> %vc 527} 528 529define <vscale x 16 x half> @vfdiv_vf_nxv16f16(<vscale x 16 x half> %va, half %b) strictfp { 530; ZVFH-LABEL: vfdiv_vf_nxv16f16: 531; ZVFH: # %bb.0: 532; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma 533; ZVFH-NEXT: vfdiv.vf v8, v8, fa0 534; ZVFH-NEXT: ret 535; 536; ZVFHMIN-LABEL: vfdiv_vf_nxv16f16: 537; ZVFHMIN: # %bb.0: 538; ZVFHMIN-NEXT: fmv.x.h a0, fa0 539; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma 540; ZVFHMIN-NEXT: vmv.v.x v12, a0 541; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 542; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12 543; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 544; ZVFHMIN-NEXT: vfdiv.vv v16, v16, v24 545; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 546; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16 547; ZVFHMIN-NEXT: ret 548 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 549 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 550 %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") 551 ret <vscale x 16 x half> %vc 552} 553 554declare <vscale x 32 x half> @llvm.experimental.constrained.fdiv.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, metadata, metadata) 555define <vscale x 32 x half> @vfdiv_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) strictfp { 556; ZVFH-LABEL: vfdiv_vv_nxv32f16: 557; ZVFH: # %bb.0: # %entry 558; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma 559; ZVFH-NEXT: vfdiv.vv v8, v8, v16 560; ZVFH-NEXT: ret 561; 562; ZVFHMIN-LABEL: vfdiv_vv_nxv32f16: 563; ZVFHMIN: # %bb.0: # %entry 564; ZVFHMIN-NEXT: addi sp, sp, -16 565; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16 566; ZVFHMIN-NEXT: csrr a0, vlenb 567; ZVFHMIN-NEXT: slli a0, a0, 3 568; ZVFHMIN-NEXT: sub sp, sp, a0 569; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb 570; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma 571; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16 572; ZVFHMIN-NEXT: addi a0, sp, 16 573; ZVFHMIN-NEXT: vs8r.v v24, (a0) # Unknown-size Folded Spill 574; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8 575; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20 576; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 577; ZVFHMIN-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload 578; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 579; ZVFHMIN-NEXT: vfdiv.vv v0, v0, v8 580; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 581; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v0 582; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 583; ZVFHMIN-NEXT: vfdiv.vv v16, v16, v24 584; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 585; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16 586; ZVFHMIN-NEXT: csrr a0, vlenb 587; ZVFHMIN-NEXT: slli a0, a0, 3 588; ZVFHMIN-NEXT: add sp, sp, a0 589; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16 590; ZVFHMIN-NEXT: addi sp, sp, 16 591; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0 592; ZVFHMIN-NEXT: ret 593entry: 594 %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") 595 ret <vscale x 32 x half> %vc 596} 597 598define <vscale x 32 x half> @vfdiv_vf_nxv32f16(<vscale x 32 x half> %va, half %b) strictfp { 599; ZVFH-LABEL: vfdiv_vf_nxv32f16: 600; ZVFH: # %bb.0: 601; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma 602; ZVFH-NEXT: vfdiv.vf v8, v8, fa0 603; ZVFH-NEXT: ret 604; 605; ZVFHMIN-LABEL: vfdiv_vf_nxv32f16: 606; ZVFHMIN: # %bb.0: 607; ZVFHMIN-NEXT: addi sp, sp, -16 608; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16 609; ZVFHMIN-NEXT: csrr a0, vlenb 610; ZVFHMIN-NEXT: slli a0, a0, 3 611; ZVFHMIN-NEXT: sub sp, sp, a0 612; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb 613; ZVFHMIN-NEXT: fmv.x.h a0, fa0 614; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma 615; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 616; ZVFHMIN-NEXT: addi a1, sp, 16 617; ZVFHMIN-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill 618; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12 619; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m8, ta, ma 620; ZVFHMIN-NEXT: vmv.v.x v8, a0 621; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma 622; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8 623; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 624; ZVFHMIN-NEXT: addi a0, sp, 16 625; ZVFHMIN-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload 626; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 627; ZVFHMIN-NEXT: vfdiv.vv v0, v8, v0 628; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 629; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v0 630; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 631; ZVFHMIN-NEXT: vfdiv.vv v16, v24, v16 632; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 633; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16 634; ZVFHMIN-NEXT: csrr a0, vlenb 635; ZVFHMIN-NEXT: slli a0, a0, 3 636; ZVFHMIN-NEXT: add sp, sp, a0 637; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16 638; ZVFHMIN-NEXT: addi sp, sp, 16 639; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0 640; ZVFHMIN-NEXT: ret 641 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 642 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 643 %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") 644 ret <vscale x 32 x half> %vc 645} 646 647declare <vscale x 1 x float> @llvm.experimental.constrained.fdiv.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, metadata, metadata) 648define <vscale x 1 x float> @vfdiv_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) strictfp { 649; CHECK-LABEL: vfdiv_vv_nxv1f32: 650; CHECK: # %bb.0: # %entry 651; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 652; CHECK-NEXT: vfdiv.vv v8, v8, v9 653; CHECK-NEXT: ret 654entry: 655 %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") 656 ret <vscale x 1 x float> %vc 657} 658 659define <vscale x 1 x float> @vfdiv_vf_nxv1f32(<vscale x 1 x float> %va, float %b) strictfp { 660; CHECK-LABEL: vfdiv_vf_nxv1f32: 661; CHECK: # %bb.0: 662; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 663; CHECK-NEXT: vfdiv.vf v8, v8, fa0 664; CHECK-NEXT: ret 665 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 666 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 667 %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") 668 ret <vscale x 1 x float> %vc 669} 670 671declare <vscale x 2 x float> @llvm.experimental.constrained.fdiv.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, metadata, metadata) 672define <vscale x 2 x float> @vfdiv_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) strictfp { 673; CHECK-LABEL: vfdiv_vv_nxv2f32: 674; CHECK: # %bb.0: # %entry 675; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 676; CHECK-NEXT: vfdiv.vv v8, v8, v9 677; CHECK-NEXT: ret 678entry: 679 %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") 680 ret <vscale x 2 x float> %vc 681} 682 683define <vscale x 2 x float> @vfdiv_vf_nxv2f32(<vscale x 2 x float> %va, float %b) strictfp { 684; CHECK-LABEL: vfdiv_vf_nxv2f32: 685; CHECK: # %bb.0: 686; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 687; CHECK-NEXT: vfdiv.vf v8, v8, fa0 688; CHECK-NEXT: ret 689 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 690 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 691 %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") 692 ret <vscale x 2 x float> %vc 693} 694 695declare <vscale x 4 x float> @llvm.experimental.constrained.fdiv.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, metadata, metadata) 696define <vscale x 4 x float> @vfdiv_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) strictfp { 697; CHECK-LABEL: vfdiv_vv_nxv4f32: 698; CHECK: # %bb.0: # %entry 699; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 700; CHECK-NEXT: vfdiv.vv v8, v8, v10 701; CHECK-NEXT: ret 702entry: 703 %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") 704 ret <vscale x 4 x float> %vc 705} 706 707define <vscale x 4 x float> @vfdiv_vf_nxv4f32(<vscale x 4 x float> %va, float %b) strictfp { 708; CHECK-LABEL: vfdiv_vf_nxv4f32: 709; CHECK: # %bb.0: 710; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 711; CHECK-NEXT: vfdiv.vf v8, v8, fa0 712; CHECK-NEXT: ret 713 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 714 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 715 %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") 716 ret <vscale x 4 x float> %vc 717} 718 719declare <vscale x 8 x float> @llvm.experimental.constrained.fdiv.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, metadata, metadata) 720define <vscale x 8 x float> @vfdiv_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) strictfp { 721; CHECK-LABEL: vfdiv_vv_nxv8f32: 722; CHECK: # %bb.0: # %entry 723; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 724; CHECK-NEXT: vfdiv.vv v8, v8, v12 725; CHECK-NEXT: ret 726entry: 727 %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") 728 ret <vscale x 8 x float> %vc 729} 730 731define <vscale x 8 x float> @vfdiv_vf_nxv8f32(<vscale x 8 x float> %va, float %b) strictfp { 732; CHECK-LABEL: vfdiv_vf_nxv8f32: 733; CHECK: # %bb.0: 734; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 735; CHECK-NEXT: vfdiv.vf v8, v8, fa0 736; CHECK-NEXT: ret 737 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 738 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 739 %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") 740 ret <vscale x 8 x float> %vc 741} 742 743define <vscale x 8 x float> @vfdiv_fv_nxv8f32(<vscale x 8 x float> %va, float %b) strictfp { 744; CHECK-LABEL: vfdiv_fv_nxv8f32: 745; CHECK: # %bb.0: 746; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 747; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 748; CHECK-NEXT: ret 749 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 750 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 751 %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") 752 ret <vscale x 8 x float> %vc 753} 754 755declare <vscale x 16 x float> @llvm.experimental.constrained.fdiv.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, metadata, metadata) 756define <vscale x 16 x float> @vfdiv_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) strictfp { 757; CHECK-LABEL: vfdiv_vv_nxv16f32: 758; CHECK: # %bb.0: # %entry 759; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 760; CHECK-NEXT: vfdiv.vv v8, v8, v16 761; CHECK-NEXT: ret 762entry: 763 %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") 764 ret <vscale x 16 x float> %vc 765} 766 767define <vscale x 16 x float> @vfdiv_vf_nxv16f32(<vscale x 16 x float> %va, float %b) strictfp { 768; CHECK-LABEL: vfdiv_vf_nxv16f32: 769; CHECK: # %bb.0: 770; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 771; CHECK-NEXT: vfdiv.vf v8, v8, fa0 772; CHECK-NEXT: ret 773 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 774 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 775 %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") 776 ret <vscale x 16 x float> %vc 777} 778 779declare <vscale x 1 x double> @llvm.experimental.constrained.fdiv.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, metadata, metadata) 780define <vscale x 1 x double> @vfdiv_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) strictfp { 781; CHECK-LABEL: vfdiv_vv_nxv1f64: 782; CHECK: # %bb.0: # %entry 783; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 784; CHECK-NEXT: vfdiv.vv v8, v8, v9 785; CHECK-NEXT: ret 786entry: 787 %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") 788 ret <vscale x 1 x double> %vc 789} 790 791define <vscale x 1 x double> @vfdiv_vf_nxv1f64(<vscale x 1 x double> %va, double %b) strictfp { 792; CHECK-LABEL: vfdiv_vf_nxv1f64: 793; CHECK: # %bb.0: 794; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 795; CHECK-NEXT: vfdiv.vf v8, v8, fa0 796; CHECK-NEXT: ret 797 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 798 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 799 %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") 800 ret <vscale x 1 x double> %vc 801} 802 803declare <vscale x 2 x double> @llvm.experimental.constrained.fdiv.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, metadata, metadata) 804define <vscale x 2 x double> @vfdiv_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) strictfp { 805; CHECK-LABEL: vfdiv_vv_nxv2f64: 806; CHECK: # %bb.0: # %entry 807; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 808; CHECK-NEXT: vfdiv.vv v8, v8, v10 809; CHECK-NEXT: ret 810entry: 811 %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") 812 ret <vscale x 2 x double> %vc 813} 814 815define <vscale x 2 x double> @vfdiv_vf_nxv2f64(<vscale x 2 x double> %va, double %b) strictfp { 816; CHECK-LABEL: vfdiv_vf_nxv2f64: 817; CHECK: # %bb.0: 818; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 819; CHECK-NEXT: vfdiv.vf v8, v8, fa0 820; CHECK-NEXT: ret 821 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 822 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 823 %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") 824 ret <vscale x 2 x double> %vc 825} 826 827declare <vscale x 4 x double> @llvm.experimental.constrained.fdiv.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, metadata, metadata) 828define <vscale x 4 x double> @vfdiv_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) strictfp { 829; CHECK-LABEL: vfdiv_vv_nxv4f64: 830; CHECK: # %bb.0: # %entry 831; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 832; CHECK-NEXT: vfdiv.vv v8, v8, v12 833; CHECK-NEXT: ret 834entry: 835 %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") 836 ret <vscale x 4 x double> %vc 837} 838 839define <vscale x 4 x double> @vfdiv_vf_nxv4f64(<vscale x 4 x double> %va, double %b) strictfp { 840; CHECK-LABEL: vfdiv_vf_nxv4f64: 841; CHECK: # %bb.0: 842; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 843; CHECK-NEXT: vfdiv.vf v8, v8, fa0 844; CHECK-NEXT: ret 845 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 846 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 847 %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") 848 ret <vscale x 4 x double> %vc 849} 850 851declare <vscale x 8 x double> @llvm.experimental.constrained.fdiv.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, metadata, metadata) 852define <vscale x 8 x double> @vfdiv_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) strictfp { 853; CHECK-LABEL: vfdiv_vv_nxv8f64: 854; CHECK: # %bb.0: # %entry 855; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 856; CHECK-NEXT: vfdiv.vv v8, v8, v16 857; CHECK-NEXT: ret 858entry: 859 %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") 860 ret <vscale x 8 x double> %vc 861} 862 863define <vscale x 8 x double> @vfdiv_vf_nxv8f64(<vscale x 8 x double> %va, double %b) strictfp { 864; CHECK-LABEL: vfdiv_vf_nxv8f64: 865; CHECK: # %bb.0: 866; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 867; CHECK-NEXT: vfdiv.vf v8, v8, fa0 868; CHECK-NEXT: ret 869 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 870 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 871 %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") 872 ret <vscale x 8 x double> %vc 873} 874 875define <vscale x 8 x double> @vfdiv_fv_nxv8f64(<vscale x 8 x double> %va, double %b) strictfp { 876; CHECK-LABEL: vfdiv_fv_nxv8f64: 877; CHECK: # %bb.0: 878; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 879; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 880; CHECK-NEXT: ret 881 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 882 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 883 %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") 884 ret <vscale x 8 x double> %vc 885} 886