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