1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH 4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \ 5; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH 6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=ilp32d \ 7; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN 8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=lp64d \ 9; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN 10 11declare <2 x half> @llvm.vp.fadd.v2f16(<2 x half>, <2 x half>, <2 x i1>, i32) 12 13define <2 x half> @vfadd_vv_v2f16(<2 x half> %va, <2 x half> %b, <2 x i1> %m, i32 zeroext %evl) { 14; ZVFH-LABEL: vfadd_vv_v2f16: 15; ZVFH: # %bb.0: 16; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 17; ZVFH-NEXT: vfadd.vv v8, v8, v9, v0.t 18; ZVFH-NEXT: ret 19; 20; ZVFHMIN-LABEL: vfadd_vv_v2f16: 21; ZVFHMIN: # %bb.0: 22; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 23; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t 24; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8, v0.t 25; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 26; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10, v0.t 27; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 28; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t 29; ZVFHMIN-NEXT: ret 30 %v = call <2 x half> @llvm.vp.fadd.v2f16(<2 x half> %va, <2 x half> %b, <2 x i1> %m, i32 %evl) 31 ret <2 x half> %v 32} 33 34define <2 x half> @vfadd_vv_v2f16_unmasked(<2 x half> %va, <2 x half> %b, i32 zeroext %evl) { 35; ZVFH-LABEL: vfadd_vv_v2f16_unmasked: 36; ZVFH: # %bb.0: 37; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 38; ZVFH-NEXT: vfadd.vv v8, v8, v9 39; ZVFH-NEXT: ret 40; 41; ZVFHMIN-LABEL: vfadd_vv_v2f16_unmasked: 42; ZVFHMIN: # %bb.0: 43; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 44; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 45; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 46; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 47; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10 48; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 49; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 50; ZVFHMIN-NEXT: ret 51 %v = call <2 x half> @llvm.vp.fadd.v2f16(<2 x half> %va, <2 x half> %b, <2 x i1> splat (i1 true), i32 %evl) 52 ret <2 x half> %v 53} 54 55define <2 x half> @vfadd_vf_v2f16(<2 x half> %va, half %b, <2 x i1> %m, i32 zeroext %evl) { 56; ZVFH-LABEL: vfadd_vf_v2f16: 57; ZVFH: # %bb.0: 58; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 59; ZVFH-NEXT: vfadd.vf v8, v8, fa0, v0.t 60; ZVFH-NEXT: ret 61; 62; ZVFHMIN-LABEL: vfadd_vf_v2f16: 63; ZVFHMIN: # %bb.0: 64; ZVFHMIN-NEXT: fmv.x.h a1, fa0 65; ZVFHMIN-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 66; ZVFHMIN-NEXT: vmv.v.x v9, a1 67; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 68; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t 69; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9, v0.t 70; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 71; ZVFHMIN-NEXT: vfadd.vv v9, v10, v8, v0.t 72; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 73; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t 74; ZVFHMIN-NEXT: ret 75 %elt.head = insertelement <2 x half> poison, half %b, i32 0 76 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer 77 %v = call <2 x half> @llvm.vp.fadd.v2f16(<2 x half> %va, <2 x half> %vb, <2 x i1> %m, i32 %evl) 78 ret <2 x half> %v 79} 80 81define <2 x half> @vfadd_vf_v2f16_unmasked(<2 x half> %va, half %b, i32 zeroext %evl) { 82; ZVFH-LABEL: vfadd_vf_v2f16_unmasked: 83; ZVFH: # %bb.0: 84; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 85; ZVFH-NEXT: vfadd.vf v8, v8, fa0 86; ZVFH-NEXT: ret 87; 88; ZVFHMIN-LABEL: vfadd_vf_v2f16_unmasked: 89; ZVFHMIN: # %bb.0: 90; ZVFHMIN-NEXT: fmv.x.h a1, fa0 91; ZVFHMIN-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 92; ZVFHMIN-NEXT: vmv.v.x v9, a1 93; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 94; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 95; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 96; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 97; ZVFHMIN-NEXT: vfadd.vv v9, v10, v8 98; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 99; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 100; ZVFHMIN-NEXT: ret 101 %elt.head = insertelement <2 x half> poison, half %b, i32 0 102 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer 103 %v = call <2 x half> @llvm.vp.fadd.v2f16(<2 x half> %va, <2 x half> %vb, <2 x i1> splat (i1 true), i32 %evl) 104 ret <2 x half> %v 105} 106 107declare <3 x half> @llvm.vp.fadd.v3f16(<3 x half>, <3 x half>, <3 x i1>, i32) 108 109define <3 x half> @vfadd_vv_v3f16(<3 x half> %va, <3 x half> %b, <3 x i1> %m, i32 zeroext %evl) { 110; ZVFH-LABEL: vfadd_vv_v3f16: 111; ZVFH: # %bb.0: 112; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 113; ZVFH-NEXT: vfadd.vv v8, v8, v9, v0.t 114; ZVFH-NEXT: ret 115; 116; ZVFHMIN-LABEL: vfadd_vv_v3f16: 117; ZVFHMIN: # %bb.0: 118; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 119; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t 120; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8, v0.t 121; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 122; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10, v0.t 123; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 124; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t 125; ZVFHMIN-NEXT: ret 126 %v = call <3 x half> @llvm.vp.fadd.v3f16(<3 x half> %va, <3 x half> %b, <3 x i1> %m, i32 %evl) 127 ret <3 x half> %v 128} 129 130declare <4 x half> @llvm.vp.fadd.v4f16(<4 x half>, <4 x half>, <4 x i1>, i32) 131 132define <4 x half> @vfadd_vv_v4f16(<4 x half> %va, <4 x half> %b, <4 x i1> %m, i32 zeroext %evl) { 133; ZVFH-LABEL: vfadd_vv_v4f16: 134; ZVFH: # %bb.0: 135; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 136; ZVFH-NEXT: vfadd.vv v8, v8, v9, v0.t 137; ZVFH-NEXT: ret 138; 139; ZVFHMIN-LABEL: vfadd_vv_v4f16: 140; ZVFHMIN: # %bb.0: 141; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 142; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t 143; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8, v0.t 144; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 145; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10, v0.t 146; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 147; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t 148; ZVFHMIN-NEXT: ret 149 %v = call <4 x half> @llvm.vp.fadd.v4f16(<4 x half> %va, <4 x half> %b, <4 x i1> %m, i32 %evl) 150 ret <4 x half> %v 151} 152 153define <4 x half> @vfadd_vv_v4f16_unmasked(<4 x half> %va, <4 x half> %b, i32 zeroext %evl) { 154; ZVFH-LABEL: vfadd_vv_v4f16_unmasked: 155; ZVFH: # %bb.0: 156; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 157; ZVFH-NEXT: vfadd.vv v8, v8, v9 158; ZVFH-NEXT: ret 159; 160; ZVFHMIN-LABEL: vfadd_vv_v4f16_unmasked: 161; ZVFHMIN: # %bb.0: 162; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 163; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 164; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 165; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 166; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10 167; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 168; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 169; ZVFHMIN-NEXT: ret 170 %v = call <4 x half> @llvm.vp.fadd.v4f16(<4 x half> %va, <4 x half> %b, <4 x i1> splat (i1 true), i32 %evl) 171 ret <4 x half> %v 172} 173 174define <4 x half> @vfadd_vf_v4f16(<4 x half> %va, half %b, <4 x i1> %m, i32 zeroext %evl) { 175; ZVFH-LABEL: vfadd_vf_v4f16: 176; ZVFH: # %bb.0: 177; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 178; ZVFH-NEXT: vfadd.vf v8, v8, fa0, v0.t 179; ZVFH-NEXT: ret 180; 181; ZVFHMIN-LABEL: vfadd_vf_v4f16: 182; ZVFHMIN: # %bb.0: 183; ZVFHMIN-NEXT: fmv.x.h a1, fa0 184; ZVFHMIN-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 185; ZVFHMIN-NEXT: vmv.v.x v9, a1 186; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 187; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t 188; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9, v0.t 189; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 190; ZVFHMIN-NEXT: vfadd.vv v9, v10, v8, v0.t 191; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 192; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t 193; ZVFHMIN-NEXT: ret 194 %elt.head = insertelement <4 x half> poison, half %b, i32 0 195 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer 196 %v = call <4 x half> @llvm.vp.fadd.v4f16(<4 x half> %va, <4 x half> %vb, <4 x i1> %m, i32 %evl) 197 ret <4 x half> %v 198} 199 200define <4 x half> @vfadd_vf_v4f16_unmasked(<4 x half> %va, half %b, i32 zeroext %evl) { 201; ZVFH-LABEL: vfadd_vf_v4f16_unmasked: 202; ZVFH: # %bb.0: 203; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 204; ZVFH-NEXT: vfadd.vf v8, v8, fa0 205; ZVFH-NEXT: ret 206; 207; ZVFHMIN-LABEL: vfadd_vf_v4f16_unmasked: 208; ZVFHMIN: # %bb.0: 209; ZVFHMIN-NEXT: fmv.x.h a1, fa0 210; ZVFHMIN-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 211; ZVFHMIN-NEXT: vmv.v.x v9, a1 212; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 213; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 214; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 215; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 216; ZVFHMIN-NEXT: vfadd.vv v9, v10, v8 217; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 218; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 219; ZVFHMIN-NEXT: ret 220 %elt.head = insertelement <4 x half> poison, half %b, i32 0 221 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer 222 %v = call <4 x half> @llvm.vp.fadd.v4f16(<4 x half> %va, <4 x half> %vb, <4 x i1> splat (i1 true), i32 %evl) 223 ret <4 x half> %v 224} 225 226declare <8 x half> @llvm.vp.fadd.v8f16(<8 x half>, <8 x half>, <8 x i1>, i32) 227 228define <8 x half> @vfadd_vv_v8f16(<8 x half> %va, <8 x half> %b, <8 x i1> %m, i32 zeroext %evl) { 229; ZVFH-LABEL: vfadd_vv_v8f16: 230; ZVFH: # %bb.0: 231; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma 232; ZVFH-NEXT: vfadd.vv v8, v8, v9, v0.t 233; ZVFH-NEXT: ret 234; 235; ZVFHMIN-LABEL: vfadd_vv_v8f16: 236; ZVFHMIN: # %bb.0: 237; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma 238; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t 239; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t 240; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma 241; ZVFHMIN-NEXT: vfadd.vv v10, v12, v10, v0.t 242; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma 243; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10, v0.t 244; ZVFHMIN-NEXT: ret 245 %v = call <8 x half> @llvm.vp.fadd.v8f16(<8 x half> %va, <8 x half> %b, <8 x i1> %m, i32 %evl) 246 ret <8 x half> %v 247} 248 249define <8 x half> @vfadd_vv_v8f16_unmasked(<8 x half> %va, <8 x half> %b, i32 zeroext %evl) { 250; ZVFH-LABEL: vfadd_vv_v8f16_unmasked: 251; ZVFH: # %bb.0: 252; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma 253; ZVFH-NEXT: vfadd.vv v8, v8, v9 254; ZVFH-NEXT: ret 255; 256; ZVFHMIN-LABEL: vfadd_vv_v8f16_unmasked: 257; ZVFHMIN: # %bb.0: 258; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma 259; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 260; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 261; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma 262; ZVFHMIN-NEXT: vfadd.vv v10, v12, v10 263; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma 264; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10 265; ZVFHMIN-NEXT: ret 266 %v = call <8 x half> @llvm.vp.fadd.v8f16(<8 x half> %va, <8 x half> %b, <8 x i1> splat (i1 true), i32 %evl) 267 ret <8 x half> %v 268} 269 270define <8 x half> @vfadd_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) { 271; ZVFH-LABEL: vfadd_vf_v8f16: 272; ZVFH: # %bb.0: 273; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma 274; ZVFH-NEXT: vfadd.vf v8, v8, fa0, v0.t 275; ZVFH-NEXT: ret 276; 277; ZVFHMIN-LABEL: vfadd_vf_v8f16: 278; ZVFHMIN: # %bb.0: 279; ZVFHMIN-NEXT: fmv.x.h a1, fa0 280; ZVFHMIN-NEXT: vsetivli zero, 8, e16, m1, ta, ma 281; ZVFHMIN-NEXT: vmv.v.x v9, a1 282; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma 283; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t 284; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9, v0.t 285; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma 286; ZVFHMIN-NEXT: vfadd.vv v10, v10, v12, v0.t 287; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma 288; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10, v0.t 289; ZVFHMIN-NEXT: ret 290 %elt.head = insertelement <8 x half> poison, half %b, i32 0 291 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer 292 %v = call <8 x half> @llvm.vp.fadd.v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 %evl) 293 ret <8 x half> %v 294} 295 296define <8 x half> @vfadd_vf_v8f16_unmasked(<8 x half> %va, half %b, i32 zeroext %evl) { 297; ZVFH-LABEL: vfadd_vf_v8f16_unmasked: 298; ZVFH: # %bb.0: 299; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma 300; ZVFH-NEXT: vfadd.vf v8, v8, fa0 301; ZVFH-NEXT: ret 302; 303; ZVFHMIN-LABEL: vfadd_vf_v8f16_unmasked: 304; ZVFHMIN: # %bb.0: 305; ZVFHMIN-NEXT: fmv.x.h a1, fa0 306; ZVFHMIN-NEXT: vsetivli zero, 8, e16, m1, ta, ma 307; ZVFHMIN-NEXT: vmv.v.x v9, a1 308; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma 309; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 310; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9 311; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma 312; ZVFHMIN-NEXT: vfadd.vv v10, v10, v12 313; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma 314; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10 315; ZVFHMIN-NEXT: ret 316 %elt.head = insertelement <8 x half> poison, half %b, i32 0 317 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer 318 %v = call <8 x half> @llvm.vp.fadd.v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> splat (i1 true), i32 %evl) 319 ret <8 x half> %v 320} 321 322declare <16 x half> @llvm.vp.fadd.v16f16(<16 x half>, <16 x half>, <16 x i1>, i32) 323 324define <16 x half> @vfadd_vv_v16f16(<16 x half> %va, <16 x half> %b, <16 x i1> %m, i32 zeroext %evl) { 325; ZVFH-LABEL: vfadd_vv_v16f16: 326; ZVFH: # %bb.0: 327; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 328; ZVFH-NEXT: vfadd.vv v8, v8, v10, v0.t 329; ZVFH-NEXT: ret 330; 331; ZVFHMIN-LABEL: vfadd_vv_v16f16: 332; ZVFHMIN: # %bb.0: 333; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 334; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10, v0.t 335; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t 336; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 337; ZVFHMIN-NEXT: vfadd.vv v12, v16, v12, v0.t 338; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 339; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12, v0.t 340; ZVFHMIN-NEXT: ret 341 %v = call <16 x half> @llvm.vp.fadd.v16f16(<16 x half> %va, <16 x half> %b, <16 x i1> %m, i32 %evl) 342 ret <16 x half> %v 343} 344 345define <16 x half> @vfadd_vv_v16f16_unmasked(<16 x half> %va, <16 x half> %b, i32 zeroext %evl) { 346; ZVFH-LABEL: vfadd_vv_v16f16_unmasked: 347; ZVFH: # %bb.0: 348; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 349; ZVFH-NEXT: vfadd.vv v8, v8, v10 350; ZVFH-NEXT: ret 351; 352; ZVFHMIN-LABEL: vfadd_vv_v16f16_unmasked: 353; ZVFHMIN: # %bb.0: 354; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 355; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 356; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 357; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 358; ZVFHMIN-NEXT: vfadd.vv v12, v16, v12 359; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 360; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12 361; ZVFHMIN-NEXT: ret 362 %v = call <16 x half> @llvm.vp.fadd.v16f16(<16 x half> %va, <16 x half> %b, <16 x i1> splat (i1 true), i32 %evl) 363 ret <16 x half> %v 364} 365 366define <16 x half> @vfadd_vf_v16f16(<16 x half> %va, half %b, <16 x i1> %m, i32 zeroext %evl) { 367; ZVFH-LABEL: vfadd_vf_v16f16: 368; ZVFH: # %bb.0: 369; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 370; ZVFH-NEXT: vfadd.vf v8, v8, fa0, v0.t 371; ZVFH-NEXT: ret 372; 373; ZVFHMIN-LABEL: vfadd_vf_v16f16: 374; ZVFHMIN: # %bb.0: 375; ZVFHMIN-NEXT: fmv.x.h a1, fa0 376; ZVFHMIN-NEXT: vsetivli zero, 16, e16, m2, ta, ma 377; ZVFHMIN-NEXT: vmv.v.x v10, a1 378; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 379; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t 380; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10, v0.t 381; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 382; ZVFHMIN-NEXT: vfadd.vv v12, v12, v16, v0.t 383; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 384; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12, v0.t 385; ZVFHMIN-NEXT: ret 386 %elt.head = insertelement <16 x half> poison, half %b, i32 0 387 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer 388 %v = call <16 x half> @llvm.vp.fadd.v16f16(<16 x half> %va, <16 x half> %vb, <16 x i1> %m, i32 %evl) 389 ret <16 x half> %v 390} 391 392define <16 x half> @vfadd_vf_v16f16_unmasked(<16 x half> %va, half %b, i32 zeroext %evl) { 393; ZVFH-LABEL: vfadd_vf_v16f16_unmasked: 394; ZVFH: # %bb.0: 395; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 396; ZVFH-NEXT: vfadd.vf v8, v8, fa0 397; ZVFH-NEXT: ret 398; 399; ZVFHMIN-LABEL: vfadd_vf_v16f16_unmasked: 400; ZVFHMIN: # %bb.0: 401; ZVFHMIN-NEXT: fmv.x.h a1, fa0 402; ZVFHMIN-NEXT: vsetivli zero, 16, e16, m2, ta, ma 403; ZVFHMIN-NEXT: vmv.v.x v10, a1 404; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 405; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 406; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 407; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 408; ZVFHMIN-NEXT: vfadd.vv v12, v12, v16 409; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 410; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12 411; ZVFHMIN-NEXT: ret 412 %elt.head = insertelement <16 x half> poison, half %b, i32 0 413 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer 414 %v = call <16 x half> @llvm.vp.fadd.v16f16(<16 x half> %va, <16 x half> %vb, <16 x i1> splat (i1 true), i32 %evl) 415 ret <16 x half> %v 416} 417 418declare <2 x float> @llvm.vp.fadd.v2f32(<2 x float>, <2 x float>, <2 x i1>, i32) 419 420define <2 x float> @vfadd_vv_v2f32(<2 x float> %va, <2 x float> %b, <2 x i1> %m, i32 zeroext %evl) { 421; CHECK-LABEL: vfadd_vv_v2f32: 422; CHECK: # %bb.0: 423; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 424; CHECK-NEXT: vfadd.vv v8, v8, v9, v0.t 425; CHECK-NEXT: ret 426 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %va, <2 x float> %b, <2 x i1> %m, i32 %evl) 427 ret <2 x float> %v 428} 429 430define <2 x float> @vfadd_vv_v2f32_unmasked(<2 x float> %va, <2 x float> %b, i32 zeroext %evl) { 431; CHECK-LABEL: vfadd_vv_v2f32_unmasked: 432; CHECK: # %bb.0: 433; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 434; CHECK-NEXT: vfadd.vv v8, v8, v9 435; CHECK-NEXT: ret 436 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %va, <2 x float> %b, <2 x i1> splat (i1 true), i32 %evl) 437 ret <2 x float> %v 438} 439 440define <2 x float> @vfadd_vf_v2f32(<2 x float> %va, float %b, <2 x i1> %m, i32 zeroext %evl) { 441; CHECK-LABEL: vfadd_vf_v2f32: 442; CHECK: # %bb.0: 443; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 444; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t 445; CHECK-NEXT: ret 446 %elt.head = insertelement <2 x float> poison, float %b, i32 0 447 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer 448 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %va, <2 x float> %vb, <2 x i1> %m, i32 %evl) 449 ret <2 x float> %v 450} 451 452define <2 x float> @vfadd_vf_v2f32_commute(<2 x float> %va, float %b, <2 x i1> %m, i32 zeroext %evl) { 453; CHECK-LABEL: vfadd_vf_v2f32_commute: 454; CHECK: # %bb.0: 455; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 456; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t 457; CHECK-NEXT: ret 458 %elt.head = insertelement <2 x float> poison, float %b, i32 0 459 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer 460 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %vb, <2 x float> %va, <2 x i1> %m, i32 %evl) 461 ret <2 x float> %v 462} 463 464define <2 x float> @vfadd_vf_v2f32_unmasked(<2 x float> %va, float %b, i32 zeroext %evl) { 465; CHECK-LABEL: vfadd_vf_v2f32_unmasked: 466; CHECK: # %bb.0: 467; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 468; CHECK-NEXT: vfadd.vf v8, v8, fa0 469; CHECK-NEXT: ret 470 %elt.head = insertelement <2 x float> poison, float %b, i32 0 471 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer 472 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %va, <2 x float> %vb, <2 x i1> splat (i1 true), i32 %evl) 473 ret <2 x float> %v 474} 475 476define <2 x float> @vfadd_vf_v2f32_unmasked_commute(<2 x float> %va, float %b, i32 zeroext %evl) { 477; CHECK-LABEL: vfadd_vf_v2f32_unmasked_commute: 478; CHECK: # %bb.0: 479; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 480; CHECK-NEXT: vfadd.vf v8, v8, fa0 481; CHECK-NEXT: ret 482 %elt.head = insertelement <2 x float> poison, float %b, i32 0 483 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer 484 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %vb, <2 x float> %va, <2 x i1> splat (i1 true), i32 %evl) 485 ret <2 x float> %v 486} 487 488declare <4 x float> @llvm.vp.fadd.v4f32(<4 x float>, <4 x float>, <4 x i1>, i32) 489 490define <4 x float> @vfadd_vv_v4f32(<4 x float> %va, <4 x float> %b, <4 x i1> %m, i32 zeroext %evl) { 491; CHECK-LABEL: vfadd_vv_v4f32: 492; CHECK: # %bb.0: 493; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 494; CHECK-NEXT: vfadd.vv v8, v8, v9, v0.t 495; CHECK-NEXT: ret 496 %v = call <4 x float> @llvm.vp.fadd.v4f32(<4 x float> %va, <4 x float> %b, <4 x i1> %m, i32 %evl) 497 ret <4 x float> %v 498} 499 500define <4 x float> @vfadd_vv_v4f32_unmasked(<4 x float> %va, <4 x float> %b, i32 zeroext %evl) { 501; CHECK-LABEL: vfadd_vv_v4f32_unmasked: 502; CHECK: # %bb.0: 503; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 504; CHECK-NEXT: vfadd.vv v8, v8, v9 505; CHECK-NEXT: ret 506 %v = call <4 x float> @llvm.vp.fadd.v4f32(<4 x float> %va, <4 x float> %b, <4 x i1> splat (i1 true), i32 %evl) 507 ret <4 x float> %v 508} 509 510define <4 x float> @vfadd_vf_v4f32(<4 x float> %va, float %b, <4 x i1> %m, i32 zeroext %evl) { 511; CHECK-LABEL: vfadd_vf_v4f32: 512; CHECK: # %bb.0: 513; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 514; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t 515; CHECK-NEXT: ret 516 %elt.head = insertelement <4 x float> poison, float %b, i32 0 517 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer 518 %v = call <4 x float> @llvm.vp.fadd.v4f32(<4 x float> %va, <4 x float> %vb, <4 x i1> %m, i32 %evl) 519 ret <4 x float> %v 520} 521 522define <4 x float> @vfadd_vf_v4f32_unmasked(<4 x float> %va, float %b, i32 zeroext %evl) { 523; CHECK-LABEL: vfadd_vf_v4f32_unmasked: 524; CHECK: # %bb.0: 525; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 526; CHECK-NEXT: vfadd.vf v8, v8, fa0 527; CHECK-NEXT: ret 528 %elt.head = insertelement <4 x float> poison, float %b, i32 0 529 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer 530 %v = call <4 x float> @llvm.vp.fadd.v4f32(<4 x float> %va, <4 x float> %vb, <4 x i1> splat (i1 true), i32 %evl) 531 ret <4 x float> %v 532} 533 534declare <8 x float> @llvm.vp.fadd.v8f32(<8 x float>, <8 x float>, <8 x i1>, i32) 535 536define <8 x float> @vfadd_vv_v8f32(<8 x float> %va, <8 x float> %b, <8 x i1> %m, i32 zeroext %evl) { 537; CHECK-LABEL: vfadd_vv_v8f32: 538; CHECK: # %bb.0: 539; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 540; CHECK-NEXT: vfadd.vv v8, v8, v10, v0.t 541; CHECK-NEXT: ret 542 %v = call <8 x float> @llvm.vp.fadd.v8f32(<8 x float> %va, <8 x float> %b, <8 x i1> %m, i32 %evl) 543 ret <8 x float> %v 544} 545 546define <8 x float> @vfadd_vv_v8f32_unmasked(<8 x float> %va, <8 x float> %b, i32 zeroext %evl) { 547; CHECK-LABEL: vfadd_vv_v8f32_unmasked: 548; CHECK: # %bb.0: 549; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 550; CHECK-NEXT: vfadd.vv v8, v8, v10 551; CHECK-NEXT: ret 552 %v = call <8 x float> @llvm.vp.fadd.v8f32(<8 x float> %va, <8 x float> %b, <8 x i1> splat (i1 true), i32 %evl) 553 ret <8 x float> %v 554} 555 556define <8 x float> @vfadd_vf_v8f32(<8 x float> %va, float %b, <8 x i1> %m, i32 zeroext %evl) { 557; CHECK-LABEL: vfadd_vf_v8f32: 558; CHECK: # %bb.0: 559; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 560; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t 561; CHECK-NEXT: ret 562 %elt.head = insertelement <8 x float> poison, float %b, i32 0 563 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer 564 %v = call <8 x float> @llvm.vp.fadd.v8f32(<8 x float> %va, <8 x float> %vb, <8 x i1> %m, i32 %evl) 565 ret <8 x float> %v 566} 567 568define <8 x float> @vfadd_vf_v8f32_unmasked(<8 x float> %va, float %b, i32 zeroext %evl) { 569; CHECK-LABEL: vfadd_vf_v8f32_unmasked: 570; CHECK: # %bb.0: 571; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 572; CHECK-NEXT: vfadd.vf v8, v8, fa0 573; CHECK-NEXT: ret 574 %elt.head = insertelement <8 x float> poison, float %b, i32 0 575 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer 576 %v = call <8 x float> @llvm.vp.fadd.v8f32(<8 x float> %va, <8 x float> %vb, <8 x i1> splat (i1 true), i32 %evl) 577 ret <8 x float> %v 578} 579 580declare <16 x float> @llvm.vp.fadd.v16f32(<16 x float>, <16 x float>, <16 x i1>, i32) 581 582define <16 x float> @vfadd_vv_v16f32(<16 x float> %va, <16 x float> %b, <16 x i1> %m, i32 zeroext %evl) { 583; CHECK-LABEL: vfadd_vv_v16f32: 584; CHECK: # %bb.0: 585; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 586; CHECK-NEXT: vfadd.vv v8, v8, v12, v0.t 587; CHECK-NEXT: ret 588 %v = call <16 x float> @llvm.vp.fadd.v16f32(<16 x float> %va, <16 x float> %b, <16 x i1> %m, i32 %evl) 589 ret <16 x float> %v 590} 591 592define <16 x float> @vfadd_vv_v16f32_unmasked(<16 x float> %va, <16 x float> %b, i32 zeroext %evl) { 593; CHECK-LABEL: vfadd_vv_v16f32_unmasked: 594; CHECK: # %bb.0: 595; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 596; CHECK-NEXT: vfadd.vv v8, v8, v12 597; CHECK-NEXT: ret 598 %v = call <16 x float> @llvm.vp.fadd.v16f32(<16 x float> %va, <16 x float> %b, <16 x i1> splat (i1 true), i32 %evl) 599 ret <16 x float> %v 600} 601 602define <16 x float> @vfadd_vf_v16f32(<16 x float> %va, float %b, <16 x i1> %m, i32 zeroext %evl) { 603; CHECK-LABEL: vfadd_vf_v16f32: 604; CHECK: # %bb.0: 605; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 606; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t 607; CHECK-NEXT: ret 608 %elt.head = insertelement <16 x float> poison, float %b, i32 0 609 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer 610 %v = call <16 x float> @llvm.vp.fadd.v16f32(<16 x float> %va, <16 x float> %vb, <16 x i1> %m, i32 %evl) 611 ret <16 x float> %v 612} 613 614define <16 x float> @vfadd_vf_v16f32_unmasked(<16 x float> %va, float %b, i32 zeroext %evl) { 615; CHECK-LABEL: vfadd_vf_v16f32_unmasked: 616; CHECK: # %bb.0: 617; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 618; CHECK-NEXT: vfadd.vf v8, v8, fa0 619; CHECK-NEXT: ret 620 %elt.head = insertelement <16 x float> poison, float %b, i32 0 621 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer 622 %v = call <16 x float> @llvm.vp.fadd.v16f32(<16 x float> %va, <16 x float> %vb, <16 x i1> splat (i1 true), i32 %evl) 623 ret <16 x float> %v 624} 625 626declare <2 x double> @llvm.vp.fadd.v2f64(<2 x double>, <2 x double>, <2 x i1>, i32) 627 628define <2 x double> @vfadd_vv_v2f64(<2 x double> %va, <2 x double> %b, <2 x i1> %m, i32 zeroext %evl) { 629; CHECK-LABEL: vfadd_vv_v2f64: 630; CHECK: # %bb.0: 631; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 632; CHECK-NEXT: vfadd.vv v8, v8, v9, v0.t 633; CHECK-NEXT: ret 634 %v = call <2 x double> @llvm.vp.fadd.v2f64(<2 x double> %va, <2 x double> %b, <2 x i1> %m, i32 %evl) 635 ret <2 x double> %v 636} 637 638define <2 x double> @vfadd_vv_v2f64_unmasked(<2 x double> %va, <2 x double> %b, i32 zeroext %evl) { 639; CHECK-LABEL: vfadd_vv_v2f64_unmasked: 640; CHECK: # %bb.0: 641; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 642; CHECK-NEXT: vfadd.vv v8, v8, v9 643; CHECK-NEXT: ret 644 %v = call <2 x double> @llvm.vp.fadd.v2f64(<2 x double> %va, <2 x double> %b, <2 x i1> splat (i1 true), i32 %evl) 645 ret <2 x double> %v 646} 647 648define <2 x double> @vfadd_vf_v2f64(<2 x double> %va, double %b, <2 x i1> %m, i32 zeroext %evl) { 649; CHECK-LABEL: vfadd_vf_v2f64: 650; CHECK: # %bb.0: 651; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 652; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t 653; CHECK-NEXT: ret 654 %elt.head = insertelement <2 x double> poison, double %b, i32 0 655 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer 656 %v = call <2 x double> @llvm.vp.fadd.v2f64(<2 x double> %va, <2 x double> %vb, <2 x i1> %m, i32 %evl) 657 ret <2 x double> %v 658} 659 660define <2 x double> @vfadd_vf_v2f64_unmasked(<2 x double> %va, double %b, i32 zeroext %evl) { 661; CHECK-LABEL: vfadd_vf_v2f64_unmasked: 662; CHECK: # %bb.0: 663; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 664; CHECK-NEXT: vfadd.vf v8, v8, fa0 665; CHECK-NEXT: ret 666 %elt.head = insertelement <2 x double> poison, double %b, i32 0 667 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer 668 %v = call <2 x double> @llvm.vp.fadd.v2f64(<2 x double> %va, <2 x double> %vb, <2 x i1> splat (i1 true), i32 %evl) 669 ret <2 x double> %v 670} 671 672declare <4 x double> @llvm.vp.fadd.v4f64(<4 x double>, <4 x double>, <4 x i1>, i32) 673 674define <4 x double> @vfadd_vv_v4f64(<4 x double> %va, <4 x double> %b, <4 x i1> %m, i32 zeroext %evl) { 675; CHECK-LABEL: vfadd_vv_v4f64: 676; CHECK: # %bb.0: 677; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 678; CHECK-NEXT: vfadd.vv v8, v8, v10, v0.t 679; CHECK-NEXT: ret 680 %v = call <4 x double> @llvm.vp.fadd.v4f64(<4 x double> %va, <4 x double> %b, <4 x i1> %m, i32 %evl) 681 ret <4 x double> %v 682} 683 684define <4 x double> @vfadd_vv_v4f64_unmasked(<4 x double> %va, <4 x double> %b, i32 zeroext %evl) { 685; CHECK-LABEL: vfadd_vv_v4f64_unmasked: 686; CHECK: # %bb.0: 687; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 688; CHECK-NEXT: vfadd.vv v8, v8, v10 689; CHECK-NEXT: ret 690 %v = call <4 x double> @llvm.vp.fadd.v4f64(<4 x double> %va, <4 x double> %b, <4 x i1> splat (i1 true), i32 %evl) 691 ret <4 x double> %v 692} 693 694define <4 x double> @vfadd_vf_v4f64(<4 x double> %va, double %b, <4 x i1> %m, i32 zeroext %evl) { 695; CHECK-LABEL: vfadd_vf_v4f64: 696; CHECK: # %bb.0: 697; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 698; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t 699; CHECK-NEXT: ret 700 %elt.head = insertelement <4 x double> poison, double %b, i32 0 701 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer 702 %v = call <4 x double> @llvm.vp.fadd.v4f64(<4 x double> %va, <4 x double> %vb, <4 x i1> %m, i32 %evl) 703 ret <4 x double> %v 704} 705 706define <4 x double> @vfadd_vf_v4f64_unmasked(<4 x double> %va, double %b, i32 zeroext %evl) { 707; CHECK-LABEL: vfadd_vf_v4f64_unmasked: 708; CHECK: # %bb.0: 709; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 710; CHECK-NEXT: vfadd.vf v8, v8, fa0 711; CHECK-NEXT: ret 712 %elt.head = insertelement <4 x double> poison, double %b, i32 0 713 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer 714 %v = call <4 x double> @llvm.vp.fadd.v4f64(<4 x double> %va, <4 x double> %vb, <4 x i1> splat (i1 true), i32 %evl) 715 ret <4 x double> %v 716} 717 718declare <8 x double> @llvm.vp.fadd.v8f64(<8 x double>, <8 x double>, <8 x i1>, i32) 719 720define <8 x double> @vfadd_vv_v8f64(<8 x double> %va, <8 x double> %b, <8 x i1> %m, i32 zeroext %evl) { 721; CHECK-LABEL: vfadd_vv_v8f64: 722; CHECK: # %bb.0: 723; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 724; CHECK-NEXT: vfadd.vv v8, v8, v12, v0.t 725; CHECK-NEXT: ret 726 %v = call <8 x double> @llvm.vp.fadd.v8f64(<8 x double> %va, <8 x double> %b, <8 x i1> %m, i32 %evl) 727 ret <8 x double> %v 728} 729 730define <8 x double> @vfadd_vv_v8f64_unmasked(<8 x double> %va, <8 x double> %b, i32 zeroext %evl) { 731; CHECK-LABEL: vfadd_vv_v8f64_unmasked: 732; CHECK: # %bb.0: 733; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 734; CHECK-NEXT: vfadd.vv v8, v8, v12 735; CHECK-NEXT: ret 736 %v = call <8 x double> @llvm.vp.fadd.v8f64(<8 x double> %va, <8 x double> %b, <8 x i1> splat (i1 true), i32 %evl) 737 ret <8 x double> %v 738} 739 740define <8 x double> @vfadd_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) { 741; CHECK-LABEL: vfadd_vf_v8f64: 742; CHECK: # %bb.0: 743; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 744; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t 745; CHECK-NEXT: ret 746 %elt.head = insertelement <8 x double> poison, double %b, i32 0 747 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer 748 %v = call <8 x double> @llvm.vp.fadd.v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 %evl) 749 ret <8 x double> %v 750} 751 752define <8 x double> @vfadd_vf_v8f64_unmasked(<8 x double> %va, double %b, i32 zeroext %evl) { 753; CHECK-LABEL: vfadd_vf_v8f64_unmasked: 754; CHECK: # %bb.0: 755; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 756; CHECK-NEXT: vfadd.vf v8, v8, fa0 757; CHECK-NEXT: ret 758 %elt.head = insertelement <8 x double> poison, double %b, i32 0 759 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer 760 %v = call <8 x double> @llvm.vp.fadd.v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> splat (i1 true), i32 %evl) 761 ret <8 x double> %v 762} 763 764declare <16 x double> @llvm.vp.fadd.v16f64(<16 x double>, <16 x double>, <16 x i1>, i32) 765 766define <16 x double> @vfadd_vv_v16f64(<16 x double> %va, <16 x double> %b, <16 x i1> %m, i32 zeroext %evl) { 767; CHECK-LABEL: vfadd_vv_v16f64: 768; CHECK: # %bb.0: 769; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 770; CHECK-NEXT: vfadd.vv v8, v8, v16, v0.t 771; CHECK-NEXT: ret 772 %v = call <16 x double> @llvm.vp.fadd.v16f64(<16 x double> %va, <16 x double> %b, <16 x i1> %m, i32 %evl) 773 ret <16 x double> %v 774} 775 776define <16 x double> @vfadd_vv_v16f64_unmasked(<16 x double> %va, <16 x double> %b, i32 zeroext %evl) { 777; CHECK-LABEL: vfadd_vv_v16f64_unmasked: 778; CHECK: # %bb.0: 779; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 780; CHECK-NEXT: vfadd.vv v8, v8, v16 781; CHECK-NEXT: ret 782 %v = call <16 x double> @llvm.vp.fadd.v16f64(<16 x double> %va, <16 x double> %b, <16 x i1> splat (i1 true), i32 %evl) 783 ret <16 x double> %v 784} 785 786define <16 x double> @vfadd_vf_v16f64(<16 x double> %va, double %b, <16 x i1> %m, i32 zeroext %evl) { 787; CHECK-LABEL: vfadd_vf_v16f64: 788; CHECK: # %bb.0: 789; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 790; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t 791; CHECK-NEXT: ret 792 %elt.head = insertelement <16 x double> poison, double %b, i32 0 793 %vb = shufflevector <16 x double> %elt.head, <16 x double> poison, <16 x i32> zeroinitializer 794 %v = call <16 x double> @llvm.vp.fadd.v16f64(<16 x double> %va, <16 x double> %vb, <16 x i1> %m, i32 %evl) 795 ret <16 x double> %v 796} 797 798define <16 x double> @vfadd_vf_v16f64_unmasked(<16 x double> %va, double %b, i32 zeroext %evl) { 799; CHECK-LABEL: vfadd_vf_v16f64_unmasked: 800; CHECK: # %bb.0: 801; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 802; CHECK-NEXT: vfadd.vf v8, v8, fa0 803; CHECK-NEXT: ret 804 %elt.head = insertelement <16 x double> poison, double %b, i32 0 805 %vb = shufflevector <16 x double> %elt.head, <16 x double> poison, <16 x i32> zeroinitializer 806 %v = call <16 x double> @llvm.vp.fadd.v16f64(<16 x double> %va, <16 x double> %vb, <16 x i1> splat (i1 true), i32 %evl) 807 ret <16 x double> %v 808} 809