brintos

brintos / llvm-project-archived public Read only

0
0
Text · 37.6 KiB · 8d10b21 Raw
803 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> @vfadd_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb) strictfp {16; CHECK-LABEL: vfadd_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:    vfadd.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.fadd.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> @vfadd_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b) strictfp {32; CHECK-LABEL: vfadd_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:    vfadd.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.fadd.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> @vfadd_vv_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb) strictfp {51; CHECK-LABEL: vfadd_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:    vfadd.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.fadd.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> @vfadd_vf_nxv2bf16(<vscale x 2 x bfloat> %va, bfloat %b) strictfp {67; CHECK-LABEL: vfadd_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:    vfadd.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.fadd.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> @vfadd_vv_nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb) strictfp {86; CHECK-LABEL: vfadd_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:    vfadd.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.fadd.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> @vfadd_vf_nxv4bf16(<vscale x 4 x bfloat> %va, bfloat %b) strictfp {102; CHECK-LABEL: vfadd_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:    vfadd.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.fadd.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> @vfadd_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) strictfp {121; CHECK-LABEL: vfadd_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:    vfadd.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.fadd.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> @vfadd_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) strictfp {137; CHECK-LABEL: vfadd_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:    vfadd.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.fadd.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 16 x bfloat> @vfadd_vv_nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb) strictfp {156; CHECK-LABEL: vfadd_vv_nxv16bf16:157; CHECK:       # %bb.0: # %entry158; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma159; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12160; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8161; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma162; CHECK-NEXT:    vfadd.vv v16, v24, v16163; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma164; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16165; CHECK-NEXT:    ret166entry:167  %vc = call <vscale x 16 x bfloat> @llvm.experimental.constrained.fadd.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")168  ret <vscale x 16 x bfloat> %vc169}170 171define <vscale x 16 x bfloat> @vfadd_vf_nxv16bf16(<vscale x 16 x bfloat> %va, bfloat %b) strictfp {172; CHECK-LABEL: vfadd_vf_nxv16bf16:173; CHECK:       # %bb.0:174; CHECK-NEXT:    fmv.x.h a0, fa0175; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma176; CHECK-NEXT:    vmv.v.x v24, a0177; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8178; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v24179; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma180; CHECK-NEXT:    vfadd.vv v16, v16, v8181; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma182; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16183; CHECK-NEXT:    ret184  %head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0185  %splat = shufflevector <vscale x 16 x bfloat> %head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer186  %vc = call <vscale x 16 x bfloat> @llvm.experimental.constrained.fadd.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")187  ret <vscale x 16 x bfloat> %vc188}189 190define <vscale x 32 x bfloat> @vfadd_vv_nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb) strictfp {191; CHECK-LABEL: vfadd_vv_nxv32bf16:192; CHECK:       # %bb.0: # %entry193; CHECK-NEXT:    addi sp, sp, -16194; CHECK-NEXT:    .cfi_def_cfa_offset 16195; CHECK-NEXT:    csrr a0, vlenb196; CHECK-NEXT:    slli a0, a0, 3197; CHECK-NEXT:    sub sp, sp, a0198; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb199; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma200; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v16201; CHECK-NEXT:    addi a0, sp, 16202; CHECK-NEXT:    vs8r.v v24, (a0) # vscale x 64-byte Folded Spill203; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v8204; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v20205; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12206; CHECK-NEXT:    vl8r.v v8, (a0) # vscale x 64-byte Folded Reload207; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma208; CHECK-NEXT:    vfadd.vv v0, v0, v8209; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma210; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v0211; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma212; CHECK-NEXT:    vfadd.vv v16, v16, v24213; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma214; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16215; CHECK-NEXT:    csrr a0, vlenb216; CHECK-NEXT:    slli a0, a0, 3217; CHECK-NEXT:    add sp, sp, a0218; CHECK-NEXT:    .cfi_def_cfa sp, 16219; CHECK-NEXT:    addi sp, sp, 16220; CHECK-NEXT:    .cfi_def_cfa_offset 0221; CHECK-NEXT:    ret222entry:223  %vc = call <vscale x 32 x bfloat> @llvm.experimental.constrained.fadd.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")224  ret <vscale x 32 x bfloat> %vc225}226 227define <vscale x 32 x bfloat> @vfadd_vf_nxv32bf16(<vscale x 32 x bfloat> %va, bfloat %b) strictfp {228; CHECK-LABEL: vfadd_vf_nxv32bf16:229; CHECK:       # %bb.0:230; CHECK-NEXT:    addi sp, sp, -16231; CHECK-NEXT:    .cfi_def_cfa_offset 16232; CHECK-NEXT:    csrr a0, vlenb233; CHECK-NEXT:    slli a0, a0, 3234; CHECK-NEXT:    sub sp, sp, a0235; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb236; CHECK-NEXT:    fmv.x.h a0, fa0237; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma238; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8239; CHECK-NEXT:    addi a1, sp, 16240; CHECK-NEXT:    vs8r.v v16, (a1) # vscale x 64-byte Folded Spill241; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12242; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma243; CHECK-NEXT:    vmv.v.x v8, a0244; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma245; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v8246; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12247; CHECK-NEXT:    addi a0, sp, 16248; CHECK-NEXT:    vl8r.v v8, (a0) # vscale x 64-byte Folded Reload249; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma250; CHECK-NEXT:    vfadd.vv v0, v8, v0251; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma252; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v0253; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma254; CHECK-NEXT:    vfadd.vv v16, v24, v16255; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma256; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16257; CHECK-NEXT:    csrr a0, vlenb258; CHECK-NEXT:    slli a0, a0, 3259; CHECK-NEXT:    add sp, sp, a0260; CHECK-NEXT:    .cfi_def_cfa sp, 16261; CHECK-NEXT:    addi sp, sp, 16262; CHECK-NEXT:    .cfi_def_cfa_offset 0263; CHECK-NEXT:    ret264  %head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0265  %splat = shufflevector <vscale x 32 x bfloat> %head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer266  %vc = call <vscale x 32 x bfloat> @llvm.experimental.constrained.fadd.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")267  ret <vscale x 32 x bfloat> %vc268}269 270define <vscale x 1 x half> @vfadd_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) strictfp {271; ZVFH-LABEL: vfadd_vv_nxv1f16:272; ZVFH:       # %bb.0: # %entry273; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma274; ZVFH-NEXT:    vfadd.vv v8, v8, v9275; ZVFH-NEXT:    ret276;277; ZVFHMIN-LABEL: vfadd_vv_nxv1f16:278; ZVFHMIN:       # %bb.0: # %entry279; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma280; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9281; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8282; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma283; ZVFHMIN-NEXT:    vfadd.vv v9, v9, v10284; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma285; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9286; ZVFHMIN-NEXT:    ret287entry:288  %vc = call <vscale x 1 x half> @llvm.experimental.constrained.fadd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")289  ret <vscale x 1 x half> %vc290}291 292define <vscale x 1 x half> @vfadd_vf_nxv1f16(<vscale x 1 x half> %va, half %b) strictfp {293; ZVFH-LABEL: vfadd_vf_nxv1f16:294; ZVFH:       # %bb.0:295; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma296; ZVFH-NEXT:    vfadd.vf v8, v8, fa0297; ZVFH-NEXT:    ret298;299; ZVFHMIN-LABEL: vfadd_vf_nxv1f16:300; ZVFHMIN:       # %bb.0:301; ZVFHMIN-NEXT:    fmv.x.h a0, fa0302; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma303; ZVFHMIN-NEXT:    vmv.v.x v9, a0304; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8305; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9306; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma307; ZVFHMIN-NEXT:    vfadd.vv v9, v10, v8308; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma309; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9310; ZVFHMIN-NEXT:    ret311  %head = insertelement <vscale x 1 x half> poison, half %b, i32 0312  %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer313  %vc = call <vscale x 1 x half> @llvm.experimental.constrained.fadd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")314  ret <vscale x 1 x half> %vc315}316 317define <vscale x 2 x half> @vfadd_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) strictfp {318; ZVFH-LABEL: vfadd_vv_nxv2f16:319; ZVFH:       # %bb.0: # %entry320; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma321; ZVFH-NEXT:    vfadd.vv v8, v8, v9322; ZVFH-NEXT:    ret323;324; ZVFHMIN-LABEL: vfadd_vv_nxv2f16:325; ZVFHMIN:       # %bb.0: # %entry326; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma327; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9328; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8329; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma330; ZVFHMIN-NEXT:    vfadd.vv v9, v9, v10331; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma332; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9333; ZVFHMIN-NEXT:    ret334entry:335  %vc = call <vscale x 2 x half> @llvm.experimental.constrained.fadd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")336  ret <vscale x 2 x half> %vc337}338 339define <vscale x 2 x half> @vfadd_vf_nxv2f16(<vscale x 2 x half> %va, half %b) strictfp {340; ZVFH-LABEL: vfadd_vf_nxv2f16:341; ZVFH:       # %bb.0:342; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma343; ZVFH-NEXT:    vfadd.vf v8, v8, fa0344; ZVFH-NEXT:    ret345;346; ZVFHMIN-LABEL: vfadd_vf_nxv2f16:347; ZVFHMIN:       # %bb.0:348; ZVFHMIN-NEXT:    fmv.x.h a0, fa0349; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma350; ZVFHMIN-NEXT:    vmv.v.x v9, a0351; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8352; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9353; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma354; ZVFHMIN-NEXT:    vfadd.vv v9, v10, v8355; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma356; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9357; ZVFHMIN-NEXT:    ret358  %head = insertelement <vscale x 2 x half> poison, half %b, i32 0359  %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer360  %vc = call <vscale x 2 x half> @llvm.experimental.constrained.fadd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")361  ret <vscale x 2 x half> %vc362}363 364define <vscale x 4 x half> @vfadd_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) strictfp {365; ZVFH-LABEL: vfadd_vv_nxv4f16:366; ZVFH:       # %bb.0: # %entry367; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma368; ZVFH-NEXT:    vfadd.vv v8, v8, v9369; ZVFH-NEXT:    ret370;371; ZVFHMIN-LABEL: vfadd_vv_nxv4f16:372; ZVFHMIN:       # %bb.0: # %entry373; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma374; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9375; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8376; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma377; ZVFHMIN-NEXT:    vfadd.vv v10, v12, v10378; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma379; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10380; ZVFHMIN-NEXT:    ret381entry:382  %vc = call <vscale x 4 x half> @llvm.experimental.constrained.fadd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")383  ret <vscale x 4 x half> %vc384}385 386define <vscale x 4 x half> @vfadd_vf_nxv4f16(<vscale x 4 x half> %va, half %b) strictfp {387; ZVFH-LABEL: vfadd_vf_nxv4f16:388; ZVFH:       # %bb.0:389; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma390; ZVFH-NEXT:    vfadd.vf v8, v8, fa0391; ZVFH-NEXT:    ret392;393; ZVFHMIN-LABEL: vfadd_vf_nxv4f16:394; ZVFHMIN:       # %bb.0:395; ZVFHMIN-NEXT:    fmv.x.h a0, fa0396; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma397; ZVFHMIN-NEXT:    vmv.v.x v12, a0398; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8399; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12400; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma401; ZVFHMIN-NEXT:    vfadd.vv v10, v10, v8402; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma403; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10404; ZVFHMIN-NEXT:    ret405  %head = insertelement <vscale x 4 x half> poison, half %b, i32 0406  %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer407  %vc = call <vscale x 4 x half> @llvm.experimental.constrained.fadd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")408  ret <vscale x 4 x half> %vc409}410 411define <vscale x 8 x half> @vfadd_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) strictfp {412; ZVFH-LABEL: vfadd_vv_nxv8f16:413; ZVFH:       # %bb.0: # %entry414; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma415; ZVFH-NEXT:    vfadd.vv v8, v8, v10416; ZVFH-NEXT:    ret417;418; ZVFHMIN-LABEL: vfadd_vv_nxv8f16:419; ZVFHMIN:       # %bb.0: # %entry420; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma421; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10422; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8423; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma424; ZVFHMIN-NEXT:    vfadd.vv v12, v16, v12425; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma426; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12427; ZVFHMIN-NEXT:    ret428entry:429  %vc = call <vscale x 8 x half> @llvm.experimental.constrained.fadd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")430  ret <vscale x 8 x half> %vc431}432 433define <vscale x 8 x half> @vfadd_vf_nxv8f16(<vscale x 8 x half> %va, half %b) strictfp {434; ZVFH-LABEL: vfadd_vf_nxv8f16:435; ZVFH:       # %bb.0:436; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma437; ZVFH-NEXT:    vfadd.vf v8, v8, fa0438; ZVFH-NEXT:    ret439;440; ZVFHMIN-LABEL: vfadd_vf_nxv8f16:441; ZVFHMIN:       # %bb.0:442; ZVFHMIN-NEXT:    fmv.x.h a0, fa0443; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma444; ZVFHMIN-NEXT:    vmv.v.x v16, a0445; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8446; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16447; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma448; ZVFHMIN-NEXT:    vfadd.vv v12, v12, v8449; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma450; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12451; ZVFHMIN-NEXT:    ret452  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0453  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer454  %vc = call <vscale x 8 x half> @llvm.experimental.constrained.fadd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")455  ret <vscale x 8 x half> %vc456}457 458define <vscale x 16 x half> @vfadd_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) strictfp {459; ZVFH-LABEL: vfadd_vv_nxv16f16:460; ZVFH:       # %bb.0: # %entry461; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma462; ZVFH-NEXT:    vfadd.vv v8, v8, v12463; ZVFH-NEXT:    ret464;465; ZVFHMIN-LABEL: vfadd_vv_nxv16f16:466; ZVFHMIN:       # %bb.0: # %entry467; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma468; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12469; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8470; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma471; ZVFHMIN-NEXT:    vfadd.vv v16, v24, v16472; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma473; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16474; ZVFHMIN-NEXT:    ret475entry:476  %vc = call <vscale x 16 x half> @llvm.experimental.constrained.fadd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")477  ret <vscale x 16 x half> %vc478}479 480define <vscale x 16 x half> @vfadd_vf_nxv16f16(<vscale x 16 x half> %va, half %b) strictfp {481; ZVFH-LABEL: vfadd_vf_nxv16f16:482; ZVFH:       # %bb.0:483; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma484; ZVFH-NEXT:    vfadd.vf v8, v8, fa0485; ZVFH-NEXT:    ret486;487; ZVFHMIN-LABEL: vfadd_vf_nxv16f16:488; ZVFHMIN:       # %bb.0:489; ZVFHMIN-NEXT:    fmv.x.h a0, fa0490; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma491; ZVFHMIN-NEXT:    vmv.v.x v24, a0492; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8493; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24494; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma495; ZVFHMIN-NEXT:    vfadd.vv v16, v16, v8496; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma497; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16498; ZVFHMIN-NEXT:    ret499  %head = insertelement <vscale x 16 x half> poison, half %b, i32 0500  %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer501  %vc = call <vscale x 16 x half> @llvm.experimental.constrained.fadd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")502  ret <vscale x 16 x half> %vc503}504 505define <vscale x 32 x half> @vfadd_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) strictfp {506; ZVFH-LABEL: vfadd_vv_nxv32f16:507; ZVFH:       # %bb.0: # %entry508; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma509; ZVFH-NEXT:    vfadd.vv v8, v8, v16510; ZVFH-NEXT:    ret511;512; ZVFHMIN-LABEL: vfadd_vv_nxv32f16:513; ZVFHMIN:       # %bb.0: # %entry514; ZVFHMIN-NEXT:    addi sp, sp, -16515; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16516; ZVFHMIN-NEXT:    csrr a0, vlenb517; ZVFHMIN-NEXT:    slli a0, a0, 3518; ZVFHMIN-NEXT:    sub sp, sp, a0519; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb520; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma521; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16522; ZVFHMIN-NEXT:    addi a0, sp, 16523; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # vscale x 64-byte Folded Spill524; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8525; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20526; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12527; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # vscale x 64-byte Folded Reload528; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma529; ZVFHMIN-NEXT:    vfadd.vv v0, v0, v8530; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma531; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0532; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma533; ZVFHMIN-NEXT:    vfadd.vv v16, v16, v24534; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma535; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16536; ZVFHMIN-NEXT:    csrr a0, vlenb537; ZVFHMIN-NEXT:    slli a0, a0, 3538; ZVFHMIN-NEXT:    add sp, sp, a0539; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16540; ZVFHMIN-NEXT:    addi sp, sp, 16541; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0542; ZVFHMIN-NEXT:    ret543entry:544  %vc = call <vscale x 32 x half> @llvm.experimental.constrained.fadd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")545  ret <vscale x 32 x half> %vc546}547 548define <vscale x 32 x half> @vfadd_vf_nxv32f16(<vscale x 32 x half> %va, half %b) strictfp {549; ZVFH-LABEL: vfadd_vf_nxv32f16:550; ZVFH:       # %bb.0:551; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma552; ZVFH-NEXT:    vfadd.vf v8, v8, fa0553; ZVFH-NEXT:    ret554;555; ZVFHMIN-LABEL: vfadd_vf_nxv32f16:556; ZVFHMIN:       # %bb.0:557; ZVFHMIN-NEXT:    addi sp, sp, -16558; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16559; ZVFHMIN-NEXT:    csrr a0, vlenb560; ZVFHMIN-NEXT:    slli a0, a0, 3561; ZVFHMIN-NEXT:    sub sp, sp, a0562; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb563; ZVFHMIN-NEXT:    fmv.x.h a0, fa0564; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma565; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8566; ZVFHMIN-NEXT:    addi a1, sp, 16567; ZVFHMIN-NEXT:    vs8r.v v16, (a1) # vscale x 64-byte Folded Spill568; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12569; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma570; ZVFHMIN-NEXT:    vmv.v.x v8, a0571; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma572; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8573; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12574; ZVFHMIN-NEXT:    addi a0, sp, 16575; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # vscale x 64-byte Folded Reload576; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma577; ZVFHMIN-NEXT:    vfadd.vv v0, v8, v0578; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma579; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0580; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma581; ZVFHMIN-NEXT:    vfadd.vv v16, v24, v16582; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma583; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16584; ZVFHMIN-NEXT:    csrr a0, vlenb585; ZVFHMIN-NEXT:    slli a0, a0, 3586; ZVFHMIN-NEXT:    add sp, sp, a0587; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16588; ZVFHMIN-NEXT:    addi sp, sp, 16589; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0590; ZVFHMIN-NEXT:    ret591  %head = insertelement <vscale x 32 x half> poison, half %b, i32 0592  %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer593  %vc = call <vscale x 32 x half> @llvm.experimental.constrained.fadd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")594  ret <vscale x 32 x half> %vc595}596 597define <vscale x 1 x float> @vfadd_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) strictfp {598; CHECK-LABEL: vfadd_vv_nxv1f32:599; CHECK:       # %bb.0: # %entry600; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma601; CHECK-NEXT:    vfadd.vv v8, v8, v9602; CHECK-NEXT:    ret603entry:604  %vc = call <vscale x 1 x float> @llvm.experimental.constrained.fadd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")605  ret <vscale x 1 x float> %vc606}607 608define <vscale x 1 x float> @vfadd_vf_nxv1f32(<vscale x 1 x float> %va, float %b) strictfp {609; CHECK-LABEL: vfadd_vf_nxv1f32:610; CHECK:       # %bb.0:611; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma612; CHECK-NEXT:    vfadd.vf v8, v8, fa0613; CHECK-NEXT:    ret614  %head = insertelement <vscale x 1 x float> poison, float %b, i32 0615  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer616  %vc = call <vscale x 1 x float> @llvm.experimental.constrained.fadd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")617  ret <vscale x 1 x float> %vc618}619 620define <vscale x 2 x float> @vfadd_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) strictfp {621; CHECK-LABEL: vfadd_vv_nxv2f32:622; CHECK:       # %bb.0: # %entry623; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma624; CHECK-NEXT:    vfadd.vv v8, v8, v9625; CHECK-NEXT:    ret626entry:627  %vc = call <vscale x 2 x float> @llvm.experimental.constrained.fadd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")628  ret <vscale x 2 x float> %vc629}630 631define <vscale x 2 x float> @vfadd_vf_nxv2f32(<vscale x 2 x float> %va, float %b) strictfp {632; CHECK-LABEL: vfadd_vf_nxv2f32:633; CHECK:       # %bb.0:634; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma635; CHECK-NEXT:    vfadd.vf v8, v8, fa0636; CHECK-NEXT:    ret637  %head = insertelement <vscale x 2 x float> poison, float %b, i32 0638  %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer639  %vc = call <vscale x 2 x float> @llvm.experimental.constrained.fadd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")640  ret <vscale x 2 x float> %vc641}642 643define <vscale x 4 x float> @vfadd_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) strictfp {644; CHECK-LABEL: vfadd_vv_nxv4f32:645; CHECK:       # %bb.0: # %entry646; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma647; CHECK-NEXT:    vfadd.vv v8, v8, v10648; CHECK-NEXT:    ret649entry:650  %vc = call <vscale x 4 x float> @llvm.experimental.constrained.fadd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")651  ret <vscale x 4 x float> %vc652}653 654define <vscale x 4 x float> @vfadd_vf_nxv4f32(<vscale x 4 x float> %va, float %b) strictfp {655; CHECK-LABEL: vfadd_vf_nxv4f32:656; CHECK:       # %bb.0:657; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma658; CHECK-NEXT:    vfadd.vf v8, v8, fa0659; CHECK-NEXT:    ret660  %head = insertelement <vscale x 4 x float> poison, float %b, i32 0661  %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer662  %vc = call <vscale x 4 x float> @llvm.experimental.constrained.fadd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")663  ret <vscale x 4 x float> %vc664}665 666define <vscale x 8 x float> @vfadd_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) strictfp {667; CHECK-LABEL: vfadd_vv_nxv8f32:668; CHECK:       # %bb.0: # %entry669; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma670; CHECK-NEXT:    vfadd.vv v8, v8, v12671; CHECK-NEXT:    ret672entry:673  %vc = call <vscale x 8 x float> @llvm.experimental.constrained.fadd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")674  ret <vscale x 8 x float> %vc675}676 677define <vscale x 8 x float> @vfadd_vf_nxv8f32(<vscale x 8 x float> %va, float %b) strictfp {678; CHECK-LABEL: vfadd_vf_nxv8f32:679; CHECK:       # %bb.0:680; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma681; CHECK-NEXT:    vfadd.vf v8, v8, fa0682; CHECK-NEXT:    ret683  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0684  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer685  %vc = call <vscale x 8 x float> @llvm.experimental.constrained.fadd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")686  ret <vscale x 8 x float> %vc687}688 689define <vscale x 16 x float> @vfadd_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) strictfp {690; CHECK-LABEL: vfadd_vv_nxv16f32:691; CHECK:       # %bb.0: # %entry692; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma693; CHECK-NEXT:    vfadd.vv v8, v8, v16694; CHECK-NEXT:    ret695entry:696  %vc = call <vscale x 16 x float> @llvm.experimental.constrained.fadd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")697  ret <vscale x 16 x float> %vc698}699 700define <vscale x 16 x float> @vfadd_vf_nxv16f32(<vscale x 16 x float> %va, float %b) strictfp {701; CHECK-LABEL: vfadd_vf_nxv16f32:702; CHECK:       # %bb.0:703; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma704; CHECK-NEXT:    vfadd.vf v8, v8, fa0705; CHECK-NEXT:    ret706  %head = insertelement <vscale x 16 x float> poison, float %b, i32 0707  %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer708  %vc = call <vscale x 16 x float> @llvm.experimental.constrained.fadd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")709  ret <vscale x 16 x float> %vc710}711 712define <vscale x 1 x double> @vfadd_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) strictfp {713; CHECK-LABEL: vfadd_vv_nxv1f64:714; CHECK:       # %bb.0: # %entry715; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma716; CHECK-NEXT:    vfadd.vv v8, v8, v9717; CHECK-NEXT:    ret718entry:719  %vc = call <vscale x 1 x double> @llvm.experimental.constrained.fadd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")720  ret <vscale x 1 x double> %vc721}722 723define <vscale x 1 x double> @vfadd_vf_nxv1f64(<vscale x 1 x double> %va, double %b) strictfp {724; CHECK-LABEL: vfadd_vf_nxv1f64:725; CHECK:       # %bb.0:726; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma727; CHECK-NEXT:    vfadd.vf v8, v8, fa0728; CHECK-NEXT:    ret729  %head = insertelement <vscale x 1 x double> poison, double %b, i32 0730  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer731  %vc = call <vscale x 1 x double> @llvm.experimental.constrained.fadd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")732  ret <vscale x 1 x double> %vc733}734 735define <vscale x 2 x double> @vfadd_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) strictfp {736; CHECK-LABEL: vfadd_vv_nxv2f64:737; CHECK:       # %bb.0: # %entry738; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma739; CHECK-NEXT:    vfadd.vv v8, v8, v10740; CHECK-NEXT:    ret741entry:742  %vc = call <vscale x 2 x double> @llvm.experimental.constrained.fadd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")743  ret <vscale x 2 x double> %vc744}745 746define <vscale x 2 x double> @vfadd_vf_nxv2f64(<vscale x 2 x double> %va, double %b) strictfp {747; CHECK-LABEL: vfadd_vf_nxv2f64:748; CHECK:       # %bb.0:749; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma750; CHECK-NEXT:    vfadd.vf v8, v8, fa0751; CHECK-NEXT:    ret752  %head = insertelement <vscale x 2 x double> poison, double %b, i32 0753  %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer754  %vc = call <vscale x 2 x double> @llvm.experimental.constrained.fadd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")755  ret <vscale x 2 x double> %vc756}757 758define <vscale x 4 x double> @vfadd_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) strictfp {759; CHECK-LABEL: vfadd_vv_nxv4f64:760; CHECK:       # %bb.0: # %entry761; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma762; CHECK-NEXT:    vfadd.vv v8, v8, v12763; CHECK-NEXT:    ret764entry:765  %vc = call <vscale x 4 x double> @llvm.experimental.constrained.fadd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")766  ret <vscale x 4 x double> %vc767}768 769define <vscale x 4 x double> @vfadd_vf_nxv4f64(<vscale x 4 x double> %va, double %b) strictfp {770; CHECK-LABEL: vfadd_vf_nxv4f64:771; CHECK:       # %bb.0:772; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma773; CHECK-NEXT:    vfadd.vf v8, v8, fa0774; CHECK-NEXT:    ret775  %head = insertelement <vscale x 4 x double> poison, double %b, i32 0776  %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer777  %vc = call <vscale x 4 x double> @llvm.experimental.constrained.fadd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")778  ret <vscale x 4 x double> %vc779}780 781define <vscale x 8 x double> @vfadd_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) strictfp {782; CHECK-LABEL: vfadd_vv_nxv8f64:783; CHECK:       # %bb.0: # %entry784; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma785; CHECK-NEXT:    vfadd.vv v8, v8, v16786; CHECK-NEXT:    ret787entry:788  %vc = call <vscale x 8 x double> @llvm.experimental.constrained.fadd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")789  ret <vscale x 8 x double> %vc790}791 792define <vscale x 8 x double> @vfadd_vf_nxv8f64(<vscale x 8 x double> %va, double %b) strictfp {793; CHECK-LABEL: vfadd_vf_nxv8f64:794; CHECK:       # %bb.0:795; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma796; CHECK-NEXT:    vfadd.vf v8, v8, fa0797; CHECK-NEXT:    ret798  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0799  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer800  %vc = call <vscale x 8 x double> @llvm.experimental.constrained.fadd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")801  ret <vscale x 8 x double> %vc802}803