1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v \ 3; RUN: -verify-machineinstrs | FileCheck %s 4; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v \ 5; RUN: -verify-machineinstrs | FileCheck %s 6 7declare <vscale x 1 x i16> @llvm.riscv.vwmul.nxv1i16.nxv1i8.nxv1i8( 8 <vscale x 1 x i16>, 9 <vscale x 1 x i8>, 10 <vscale x 1 x i8>, 11 iXLen); 12 13define <vscale x 1 x i16> @intrinsic_vwmul_vv_nxv1i16_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, iXLen %2) nounwind { 14; CHECK-LABEL: intrinsic_vwmul_vv_nxv1i16_nxv1i8_nxv1i8: 15; CHECK: # %bb.0: # %entry 16; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 17; CHECK-NEXT: vwmul.vv v10, v8, v9 18; CHECK-NEXT: vmv1r.v v8, v10 19; CHECK-NEXT: ret 20entry: 21 %a = call <vscale x 1 x i16> @llvm.riscv.vwmul.nxv1i16.nxv1i8.nxv1i8( 22 <vscale x 1 x i16> undef, 23 <vscale x 1 x i8> %0, 24 <vscale x 1 x i8> %1, 25 iXLen %2) 26 27 ret <vscale x 1 x i16> %a 28} 29 30declare <vscale x 1 x i16> @llvm.riscv.vwmul.mask.nxv1i16.nxv1i8.nxv1i8( 31 <vscale x 1 x i16>, 32 <vscale x 1 x i8>, 33 <vscale x 1 x i8>, 34 <vscale x 1 x i1>, 35 iXLen, 36 iXLen); 37 38define <vscale x 1 x i16> @intrinsic_vwmul_mask_vv_nxv1i16_nxv1i8_nxv1i8(<vscale x 1 x i16> %0, <vscale x 1 x i8> %1, <vscale x 1 x i8> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind { 39; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv1i16_nxv1i8_nxv1i8: 40; CHECK: # %bb.0: # %entry 41; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu 42; CHECK-NEXT: vwmul.vv v8, v9, v10, v0.t 43; CHECK-NEXT: ret 44entry: 45 %a = call <vscale x 1 x i16> @llvm.riscv.vwmul.mask.nxv1i16.nxv1i8.nxv1i8( 46 <vscale x 1 x i16> %0, 47 <vscale x 1 x i8> %1, 48 <vscale x 1 x i8> %2, 49 <vscale x 1 x i1> %3, 50 iXLen %4, iXLen 1) 51 52 ret <vscale x 1 x i16> %a 53} 54 55declare <vscale x 2 x i16> @llvm.riscv.vwmul.nxv2i16.nxv2i8.nxv2i8( 56 <vscale x 2 x i16>, 57 <vscale x 2 x i8>, 58 <vscale x 2 x i8>, 59 iXLen); 60 61define <vscale x 2 x i16> @intrinsic_vwmul_vv_nxv2i16_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, iXLen %2) nounwind { 62; CHECK-LABEL: intrinsic_vwmul_vv_nxv2i16_nxv2i8_nxv2i8: 63; CHECK: # %bb.0: # %entry 64; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 65; CHECK-NEXT: vwmul.vv v10, v8, v9 66; CHECK-NEXT: vmv1r.v v8, v10 67; CHECK-NEXT: ret 68entry: 69 %a = call <vscale x 2 x i16> @llvm.riscv.vwmul.nxv2i16.nxv2i8.nxv2i8( 70 <vscale x 2 x i16> undef, 71 <vscale x 2 x i8> %0, 72 <vscale x 2 x i8> %1, 73 iXLen %2) 74 75 ret <vscale x 2 x i16> %a 76} 77 78declare <vscale x 2 x i16> @llvm.riscv.vwmul.mask.nxv2i16.nxv2i8.nxv2i8( 79 <vscale x 2 x i16>, 80 <vscale x 2 x i8>, 81 <vscale x 2 x i8>, 82 <vscale x 2 x i1>, 83 iXLen, 84 iXLen); 85 86define <vscale x 2 x i16> @intrinsic_vwmul_mask_vv_nxv2i16_nxv2i8_nxv2i8(<vscale x 2 x i16> %0, <vscale x 2 x i8> %1, <vscale x 2 x i8> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind { 87; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv2i16_nxv2i8_nxv2i8: 88; CHECK: # %bb.0: # %entry 89; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, mu 90; CHECK-NEXT: vwmul.vv v8, v9, v10, v0.t 91; CHECK-NEXT: ret 92entry: 93 %a = call <vscale x 2 x i16> @llvm.riscv.vwmul.mask.nxv2i16.nxv2i8.nxv2i8( 94 <vscale x 2 x i16> %0, 95 <vscale x 2 x i8> %1, 96 <vscale x 2 x i8> %2, 97 <vscale x 2 x i1> %3, 98 iXLen %4, iXLen 1) 99 100 ret <vscale x 2 x i16> %a 101} 102 103declare <vscale x 4 x i16> @llvm.riscv.vwmul.nxv4i16.nxv4i8.nxv4i8( 104 <vscale x 4 x i16>, 105 <vscale x 4 x i8>, 106 <vscale x 4 x i8>, 107 iXLen); 108 109define <vscale x 4 x i16> @intrinsic_vwmul_vv_nxv4i16_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, iXLen %2) nounwind { 110; CHECK-LABEL: intrinsic_vwmul_vv_nxv4i16_nxv4i8_nxv4i8: 111; CHECK: # %bb.0: # %entry 112; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 113; CHECK-NEXT: vwmul.vv v10, v8, v9 114; CHECK-NEXT: vmv1r.v v8, v10 115; CHECK-NEXT: ret 116entry: 117 %a = call <vscale x 4 x i16> @llvm.riscv.vwmul.nxv4i16.nxv4i8.nxv4i8( 118 <vscale x 4 x i16> undef, 119 <vscale x 4 x i8> %0, 120 <vscale x 4 x i8> %1, 121 iXLen %2) 122 123 ret <vscale x 4 x i16> %a 124} 125 126declare <vscale x 4 x i16> @llvm.riscv.vwmul.mask.nxv4i16.nxv4i8.nxv4i8( 127 <vscale x 4 x i16>, 128 <vscale x 4 x i8>, 129 <vscale x 4 x i8>, 130 <vscale x 4 x i1>, 131 iXLen, 132 iXLen); 133 134define <vscale x 4 x i16> @intrinsic_vwmul_mask_vv_nxv4i16_nxv4i8_nxv4i8(<vscale x 4 x i16> %0, <vscale x 4 x i8> %1, <vscale x 4 x i8> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind { 135; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv4i16_nxv4i8_nxv4i8: 136; CHECK: # %bb.0: # %entry 137; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, mu 138; CHECK-NEXT: vwmul.vv v8, v9, v10, v0.t 139; CHECK-NEXT: ret 140entry: 141 %a = call <vscale x 4 x i16> @llvm.riscv.vwmul.mask.nxv4i16.nxv4i8.nxv4i8( 142 <vscale x 4 x i16> %0, 143 <vscale x 4 x i8> %1, 144 <vscale x 4 x i8> %2, 145 <vscale x 4 x i1> %3, 146 iXLen %4, iXLen 1) 147 148 ret <vscale x 4 x i16> %a 149} 150 151declare <vscale x 8 x i16> @llvm.riscv.vwmul.nxv8i16.nxv8i8.nxv8i8( 152 <vscale x 8 x i16>, 153 <vscale x 8 x i8>, 154 <vscale x 8 x i8>, 155 iXLen); 156 157define <vscale x 8 x i16> @intrinsic_vwmul_vv_nxv8i16_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, iXLen %2) nounwind { 158; CHECK-LABEL: intrinsic_vwmul_vv_nxv8i16_nxv8i8_nxv8i8: 159; CHECK: # %bb.0: # %entry 160; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 161; CHECK-NEXT: vwmul.vv v10, v8, v9 162; CHECK-NEXT: vmv2r.v v8, v10 163; CHECK-NEXT: ret 164entry: 165 %a = call <vscale x 8 x i16> @llvm.riscv.vwmul.nxv8i16.nxv8i8.nxv8i8( 166 <vscale x 8 x i16> undef, 167 <vscale x 8 x i8> %0, 168 <vscale x 8 x i8> %1, 169 iXLen %2) 170 171 ret <vscale x 8 x i16> %a 172} 173 174declare <vscale x 8 x i16> @llvm.riscv.vwmul.mask.nxv8i16.nxv8i8.nxv8i8( 175 <vscale x 8 x i16>, 176 <vscale x 8 x i8>, 177 <vscale x 8 x i8>, 178 <vscale x 8 x i1>, 179 iXLen, 180 iXLen); 181 182define <vscale x 8 x i16> @intrinsic_vwmul_mask_vv_nxv8i16_nxv8i8_nxv8i8(<vscale x 8 x i16> %0, <vscale x 8 x i8> %1, <vscale x 8 x i8> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind { 183; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv8i16_nxv8i8_nxv8i8: 184; CHECK: # %bb.0: # %entry 185; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu 186; CHECK-NEXT: vwmul.vv v8, v10, v11, v0.t 187; CHECK-NEXT: ret 188entry: 189 %a = call <vscale x 8 x i16> @llvm.riscv.vwmul.mask.nxv8i16.nxv8i8.nxv8i8( 190 <vscale x 8 x i16> %0, 191 <vscale x 8 x i8> %1, 192 <vscale x 8 x i8> %2, 193 <vscale x 8 x i1> %3, 194 iXLen %4, iXLen 1) 195 196 ret <vscale x 8 x i16> %a 197} 198 199declare <vscale x 16 x i16> @llvm.riscv.vwmul.nxv16i16.nxv16i8.nxv16i8( 200 <vscale x 16 x i16>, 201 <vscale x 16 x i8>, 202 <vscale x 16 x i8>, 203 iXLen); 204 205define <vscale x 16 x i16> @intrinsic_vwmul_vv_nxv16i16_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, iXLen %2) nounwind { 206; CHECK-LABEL: intrinsic_vwmul_vv_nxv16i16_nxv16i8_nxv16i8: 207; CHECK: # %bb.0: # %entry 208; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 209; CHECK-NEXT: vwmul.vv v12, v8, v10 210; CHECK-NEXT: vmv4r.v v8, v12 211; CHECK-NEXT: ret 212entry: 213 %a = call <vscale x 16 x i16> @llvm.riscv.vwmul.nxv16i16.nxv16i8.nxv16i8( 214 <vscale x 16 x i16> undef, 215 <vscale x 16 x i8> %0, 216 <vscale x 16 x i8> %1, 217 iXLen %2) 218 219 ret <vscale x 16 x i16> %a 220} 221 222declare <vscale x 16 x i16> @llvm.riscv.vwmul.mask.nxv16i16.nxv16i8.nxv16i8( 223 <vscale x 16 x i16>, 224 <vscale x 16 x i8>, 225 <vscale x 16 x i8>, 226 <vscale x 16 x i1>, 227 iXLen, 228 iXLen); 229 230define <vscale x 16 x i16> @intrinsic_vwmul_mask_vv_nxv16i16_nxv16i8_nxv16i8(<vscale x 16 x i16> %0, <vscale x 16 x i8> %1, <vscale x 16 x i8> %2, <vscale x 16 x i1> %3, iXLen %4) nounwind { 231; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv16i16_nxv16i8_nxv16i8: 232; CHECK: # %bb.0: # %entry 233; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu 234; CHECK-NEXT: vwmul.vv v8, v12, v14, v0.t 235; CHECK-NEXT: ret 236entry: 237 %a = call <vscale x 16 x i16> @llvm.riscv.vwmul.mask.nxv16i16.nxv16i8.nxv16i8( 238 <vscale x 16 x i16> %0, 239 <vscale x 16 x i8> %1, 240 <vscale x 16 x i8> %2, 241 <vscale x 16 x i1> %3, 242 iXLen %4, iXLen 1) 243 244 ret <vscale x 16 x i16> %a 245} 246 247declare <vscale x 32 x i16> @llvm.riscv.vwmul.nxv32i16.nxv32i8.nxv32i8( 248 <vscale x 32 x i16>, 249 <vscale x 32 x i8>, 250 <vscale x 32 x i8>, 251 iXLen); 252 253define <vscale x 32 x i16> @intrinsic_vwmul_vv_nxv32i16_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, iXLen %2) nounwind { 254; CHECK-LABEL: intrinsic_vwmul_vv_nxv32i16_nxv32i8_nxv32i8: 255; CHECK: # %bb.0: # %entry 256; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 257; CHECK-NEXT: vwmul.vv v16, v8, v12 258; CHECK-NEXT: vmv8r.v v8, v16 259; CHECK-NEXT: ret 260entry: 261 %a = call <vscale x 32 x i16> @llvm.riscv.vwmul.nxv32i16.nxv32i8.nxv32i8( 262 <vscale x 32 x i16> undef, 263 <vscale x 32 x i8> %0, 264 <vscale x 32 x i8> %1, 265 iXLen %2) 266 267 ret <vscale x 32 x i16> %a 268} 269 270declare <vscale x 32 x i16> @llvm.riscv.vwmul.mask.nxv32i16.nxv32i8.nxv32i8( 271 <vscale x 32 x i16>, 272 <vscale x 32 x i8>, 273 <vscale x 32 x i8>, 274 <vscale x 32 x i1>, 275 iXLen, 276 iXLen); 277 278define <vscale x 32 x i16> @intrinsic_vwmul_mask_vv_nxv32i16_nxv32i8_nxv32i8(<vscale x 32 x i16> %0, <vscale x 32 x i8> %1, <vscale x 32 x i8> %2, <vscale x 32 x i1> %3, iXLen %4) nounwind { 279; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv32i16_nxv32i8_nxv32i8: 280; CHECK: # %bb.0: # %entry 281; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu 282; CHECK-NEXT: vwmul.vv v8, v16, v20, v0.t 283; CHECK-NEXT: ret 284entry: 285 %a = call <vscale x 32 x i16> @llvm.riscv.vwmul.mask.nxv32i16.nxv32i8.nxv32i8( 286 <vscale x 32 x i16> %0, 287 <vscale x 32 x i8> %1, 288 <vscale x 32 x i8> %2, 289 <vscale x 32 x i1> %3, 290 iXLen %4, iXLen 1) 291 292 ret <vscale x 32 x i16> %a 293} 294 295declare <vscale x 1 x i32> @llvm.riscv.vwmul.nxv1i32.nxv1i16.nxv1i16( 296 <vscale x 1 x i32>, 297 <vscale x 1 x i16>, 298 <vscale x 1 x i16>, 299 iXLen); 300 301define <vscale x 1 x i32> @intrinsic_vwmul_vv_nxv1i32_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, iXLen %2) nounwind { 302; CHECK-LABEL: intrinsic_vwmul_vv_nxv1i32_nxv1i16_nxv1i16: 303; CHECK: # %bb.0: # %entry 304; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 305; CHECK-NEXT: vwmul.vv v10, v8, v9 306; CHECK-NEXT: vmv1r.v v8, v10 307; CHECK-NEXT: ret 308entry: 309 %a = call <vscale x 1 x i32> @llvm.riscv.vwmul.nxv1i32.nxv1i16.nxv1i16( 310 <vscale x 1 x i32> undef, 311 <vscale x 1 x i16> %0, 312 <vscale x 1 x i16> %1, 313 iXLen %2) 314 315 ret <vscale x 1 x i32> %a 316} 317 318declare <vscale x 1 x i32> @llvm.riscv.vwmul.mask.nxv1i32.nxv1i16.nxv1i16( 319 <vscale x 1 x i32>, 320 <vscale x 1 x i16>, 321 <vscale x 1 x i16>, 322 <vscale x 1 x i1>, 323 iXLen, 324 iXLen); 325 326define <vscale x 1 x i32> @intrinsic_vwmul_mask_vv_nxv1i32_nxv1i16_nxv1i16(<vscale x 1 x i32> %0, <vscale x 1 x i16> %1, <vscale x 1 x i16> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind { 327; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv1i32_nxv1i16_nxv1i16: 328; CHECK: # %bb.0: # %entry 329; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu 330; CHECK-NEXT: vwmul.vv v8, v9, v10, v0.t 331; CHECK-NEXT: ret 332entry: 333 %a = call <vscale x 1 x i32> @llvm.riscv.vwmul.mask.nxv1i32.nxv1i16.nxv1i16( 334 <vscale x 1 x i32> %0, 335 <vscale x 1 x i16> %1, 336 <vscale x 1 x i16> %2, 337 <vscale x 1 x i1> %3, 338 iXLen %4, iXLen 1) 339 340 ret <vscale x 1 x i32> %a 341} 342 343declare <vscale x 2 x i32> @llvm.riscv.vwmul.nxv2i32.nxv2i16.nxv2i16( 344 <vscale x 2 x i32>, 345 <vscale x 2 x i16>, 346 <vscale x 2 x i16>, 347 iXLen); 348 349define <vscale x 2 x i32> @intrinsic_vwmul_vv_nxv2i32_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, iXLen %2) nounwind { 350; CHECK-LABEL: intrinsic_vwmul_vv_nxv2i32_nxv2i16_nxv2i16: 351; CHECK: # %bb.0: # %entry 352; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 353; CHECK-NEXT: vwmul.vv v10, v8, v9 354; CHECK-NEXT: vmv1r.v v8, v10 355; CHECK-NEXT: ret 356entry: 357 %a = call <vscale x 2 x i32> @llvm.riscv.vwmul.nxv2i32.nxv2i16.nxv2i16( 358 <vscale x 2 x i32> undef, 359 <vscale x 2 x i16> %0, 360 <vscale x 2 x i16> %1, 361 iXLen %2) 362 363 ret <vscale x 2 x i32> %a 364} 365 366declare <vscale x 2 x i32> @llvm.riscv.vwmul.mask.nxv2i32.nxv2i16.nxv2i16( 367 <vscale x 2 x i32>, 368 <vscale x 2 x i16>, 369 <vscale x 2 x i16>, 370 <vscale x 2 x i1>, 371 iXLen, 372 iXLen); 373 374define <vscale x 2 x i32> @intrinsic_vwmul_mask_vv_nxv2i32_nxv2i16_nxv2i16(<vscale x 2 x i32> %0, <vscale x 2 x i16> %1, <vscale x 2 x i16> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind { 375; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv2i32_nxv2i16_nxv2i16: 376; CHECK: # %bb.0: # %entry 377; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu 378; CHECK-NEXT: vwmul.vv v8, v9, v10, v0.t 379; CHECK-NEXT: ret 380entry: 381 %a = call <vscale x 2 x i32> @llvm.riscv.vwmul.mask.nxv2i32.nxv2i16.nxv2i16( 382 <vscale x 2 x i32> %0, 383 <vscale x 2 x i16> %1, 384 <vscale x 2 x i16> %2, 385 <vscale x 2 x i1> %3, 386 iXLen %4, iXLen 1) 387 388 ret <vscale x 2 x i32> %a 389} 390 391declare <vscale x 4 x i32> @llvm.riscv.vwmul.nxv4i32.nxv4i16.nxv4i16( 392 <vscale x 4 x i32>, 393 <vscale x 4 x i16>, 394 <vscale x 4 x i16>, 395 iXLen); 396 397define <vscale x 4 x i32> @intrinsic_vwmul_vv_nxv4i32_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, iXLen %2) nounwind { 398; CHECK-LABEL: intrinsic_vwmul_vv_nxv4i32_nxv4i16_nxv4i16: 399; CHECK: # %bb.0: # %entry 400; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 401; CHECK-NEXT: vwmul.vv v10, v8, v9 402; CHECK-NEXT: vmv2r.v v8, v10 403; CHECK-NEXT: ret 404entry: 405 %a = call <vscale x 4 x i32> @llvm.riscv.vwmul.nxv4i32.nxv4i16.nxv4i16( 406 <vscale x 4 x i32> undef, 407 <vscale x 4 x i16> %0, 408 <vscale x 4 x i16> %1, 409 iXLen %2) 410 411 ret <vscale x 4 x i32> %a 412} 413 414declare <vscale x 4 x i32> @llvm.riscv.vwmul.mask.nxv4i32.nxv4i16.nxv4i16( 415 <vscale x 4 x i32>, 416 <vscale x 4 x i16>, 417 <vscale x 4 x i16>, 418 <vscale x 4 x i1>, 419 iXLen, 420 iXLen); 421 422define <vscale x 4 x i32> @intrinsic_vwmul_mask_vv_nxv4i32_nxv4i16_nxv4i16(<vscale x 4 x i32> %0, <vscale x 4 x i16> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind { 423; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv4i32_nxv4i16_nxv4i16: 424; CHECK: # %bb.0: # %entry 425; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu 426; CHECK-NEXT: vwmul.vv v8, v10, v11, v0.t 427; CHECK-NEXT: ret 428entry: 429 %a = call <vscale x 4 x i32> @llvm.riscv.vwmul.mask.nxv4i32.nxv4i16.nxv4i16( 430 <vscale x 4 x i32> %0, 431 <vscale x 4 x i16> %1, 432 <vscale x 4 x i16> %2, 433 <vscale x 4 x i1> %3, 434 iXLen %4, iXLen 1) 435 436 ret <vscale x 4 x i32> %a 437} 438 439declare <vscale x 8 x i32> @llvm.riscv.vwmul.nxv8i32.nxv8i16.nxv8i16( 440 <vscale x 8 x i32>, 441 <vscale x 8 x i16>, 442 <vscale x 8 x i16>, 443 iXLen); 444 445define <vscale x 8 x i32> @intrinsic_vwmul_vv_nxv8i32_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, iXLen %2) nounwind { 446; CHECK-LABEL: intrinsic_vwmul_vv_nxv8i32_nxv8i16_nxv8i16: 447; CHECK: # %bb.0: # %entry 448; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 449; CHECK-NEXT: vwmul.vv v12, v8, v10 450; CHECK-NEXT: vmv4r.v v8, v12 451; CHECK-NEXT: ret 452entry: 453 %a = call <vscale x 8 x i32> @llvm.riscv.vwmul.nxv8i32.nxv8i16.nxv8i16( 454 <vscale x 8 x i32> undef, 455 <vscale x 8 x i16> %0, 456 <vscale x 8 x i16> %1, 457 iXLen %2) 458 459 ret <vscale x 8 x i32> %a 460} 461 462declare <vscale x 8 x i32> @llvm.riscv.vwmul.mask.nxv8i32.nxv8i16.nxv8i16( 463 <vscale x 8 x i32>, 464 <vscale x 8 x i16>, 465 <vscale x 8 x i16>, 466 <vscale x 8 x i1>, 467 iXLen, 468 iXLen); 469 470define <vscale x 8 x i32> @intrinsic_vwmul_mask_vv_nxv8i32_nxv8i16_nxv8i16(<vscale x 8 x i32> %0, <vscale x 8 x i16> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind { 471; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv8i32_nxv8i16_nxv8i16: 472; CHECK: # %bb.0: # %entry 473; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu 474; CHECK-NEXT: vwmul.vv v8, v12, v14, v0.t 475; CHECK-NEXT: ret 476entry: 477 %a = call <vscale x 8 x i32> @llvm.riscv.vwmul.mask.nxv8i32.nxv8i16.nxv8i16( 478 <vscale x 8 x i32> %0, 479 <vscale x 8 x i16> %1, 480 <vscale x 8 x i16> %2, 481 <vscale x 8 x i1> %3, 482 iXLen %4, iXLen 1) 483 484 ret <vscale x 8 x i32> %a 485} 486 487declare <vscale x 16 x i32> @llvm.riscv.vwmul.nxv16i32.nxv16i16.nxv16i16( 488 <vscale x 16 x i32>, 489 <vscale x 16 x i16>, 490 <vscale x 16 x i16>, 491 iXLen); 492 493define <vscale x 16 x i32> @intrinsic_vwmul_vv_nxv16i32_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, iXLen %2) nounwind { 494; CHECK-LABEL: intrinsic_vwmul_vv_nxv16i32_nxv16i16_nxv16i16: 495; CHECK: # %bb.0: # %entry 496; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 497; CHECK-NEXT: vwmul.vv v16, v8, v12 498; CHECK-NEXT: vmv8r.v v8, v16 499; CHECK-NEXT: ret 500entry: 501 %a = call <vscale x 16 x i32> @llvm.riscv.vwmul.nxv16i32.nxv16i16.nxv16i16( 502 <vscale x 16 x i32> undef, 503 <vscale x 16 x i16> %0, 504 <vscale x 16 x i16> %1, 505 iXLen %2) 506 507 ret <vscale x 16 x i32> %a 508} 509 510declare <vscale x 16 x i32> @llvm.riscv.vwmul.mask.nxv16i32.nxv16i16.nxv16i16( 511 <vscale x 16 x i32>, 512 <vscale x 16 x i16>, 513 <vscale x 16 x i16>, 514 <vscale x 16 x i1>, 515 iXLen, 516 iXLen); 517 518define <vscale x 16 x i32> @intrinsic_vwmul_mask_vv_nxv16i32_nxv16i16_nxv16i16(<vscale x 16 x i32> %0, <vscale x 16 x i16> %1, <vscale x 16 x i16> %2, <vscale x 16 x i1> %3, iXLen %4) nounwind { 519; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv16i32_nxv16i16_nxv16i16: 520; CHECK: # %bb.0: # %entry 521; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 522; CHECK-NEXT: vwmul.vv v8, v16, v20, v0.t 523; CHECK-NEXT: ret 524entry: 525 %a = call <vscale x 16 x i32> @llvm.riscv.vwmul.mask.nxv16i32.nxv16i16.nxv16i16( 526 <vscale x 16 x i32> %0, 527 <vscale x 16 x i16> %1, 528 <vscale x 16 x i16> %2, 529 <vscale x 16 x i1> %3, 530 iXLen %4, iXLen 1) 531 532 ret <vscale x 16 x i32> %a 533} 534 535declare <vscale x 1 x i64> @llvm.riscv.vwmul.nxv1i64.nxv1i32.nxv1i32( 536 <vscale x 1 x i64>, 537 <vscale x 1 x i32>, 538 <vscale x 1 x i32>, 539 iXLen); 540 541define <vscale x 1 x i64> @intrinsic_vwmul_vv_nxv1i64_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, iXLen %2) nounwind { 542; CHECK-LABEL: intrinsic_vwmul_vv_nxv1i64_nxv1i32_nxv1i32: 543; CHECK: # %bb.0: # %entry 544; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 545; CHECK-NEXT: vwmul.vv v10, v8, v9 546; CHECK-NEXT: vmv1r.v v8, v10 547; CHECK-NEXT: ret 548entry: 549 %a = call <vscale x 1 x i64> @llvm.riscv.vwmul.nxv1i64.nxv1i32.nxv1i32( 550 <vscale x 1 x i64> undef, 551 <vscale x 1 x i32> %0, 552 <vscale x 1 x i32> %1, 553 iXLen %2) 554 555 ret <vscale x 1 x i64> %a 556} 557 558declare <vscale x 1 x i64> @llvm.riscv.vwmul.mask.nxv1i64.nxv1i32.nxv1i32( 559 <vscale x 1 x i64>, 560 <vscale x 1 x i32>, 561 <vscale x 1 x i32>, 562 <vscale x 1 x i1>, 563 iXLen, 564 iXLen); 565 566define <vscale x 1 x i64> @intrinsic_vwmul_mask_vv_nxv1i64_nxv1i32_nxv1i32(<vscale x 1 x i64> %0, <vscale x 1 x i32> %1, <vscale x 1 x i32> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind { 567; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv1i64_nxv1i32_nxv1i32: 568; CHECK: # %bb.0: # %entry 569; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu 570; CHECK-NEXT: vwmul.vv v8, v9, v10, v0.t 571; CHECK-NEXT: ret 572entry: 573 %a = call <vscale x 1 x i64> @llvm.riscv.vwmul.mask.nxv1i64.nxv1i32.nxv1i32( 574 <vscale x 1 x i64> %0, 575 <vscale x 1 x i32> %1, 576 <vscale x 1 x i32> %2, 577 <vscale x 1 x i1> %3, 578 iXLen %4, iXLen 1) 579 580 ret <vscale x 1 x i64> %a 581} 582 583declare <vscale x 2 x i64> @llvm.riscv.vwmul.nxv2i64.nxv2i32.nxv2i32( 584 <vscale x 2 x i64>, 585 <vscale x 2 x i32>, 586 <vscale x 2 x i32>, 587 iXLen); 588 589define <vscale x 2 x i64> @intrinsic_vwmul_vv_nxv2i64_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, iXLen %2) nounwind { 590; CHECK-LABEL: intrinsic_vwmul_vv_nxv2i64_nxv2i32_nxv2i32: 591; CHECK: # %bb.0: # %entry 592; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 593; CHECK-NEXT: vwmul.vv v10, v8, v9 594; CHECK-NEXT: vmv2r.v v8, v10 595; CHECK-NEXT: ret 596entry: 597 %a = call <vscale x 2 x i64> @llvm.riscv.vwmul.nxv2i64.nxv2i32.nxv2i32( 598 <vscale x 2 x i64> undef, 599 <vscale x 2 x i32> %0, 600 <vscale x 2 x i32> %1, 601 iXLen %2) 602 603 ret <vscale x 2 x i64> %a 604} 605 606declare <vscale x 2 x i64> @llvm.riscv.vwmul.mask.nxv2i64.nxv2i32.nxv2i32( 607 <vscale x 2 x i64>, 608 <vscale x 2 x i32>, 609 <vscale x 2 x i32>, 610 <vscale x 2 x i1>, 611 iXLen, 612 iXLen); 613 614define <vscale x 2 x i64> @intrinsic_vwmul_mask_vv_nxv2i64_nxv2i32_nxv2i32(<vscale x 2 x i64> %0, <vscale x 2 x i32> %1, <vscale x 2 x i32> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind { 615; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv2i64_nxv2i32_nxv2i32: 616; CHECK: # %bb.0: # %entry 617; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu 618; CHECK-NEXT: vwmul.vv v8, v10, v11, v0.t 619; CHECK-NEXT: ret 620entry: 621 %a = call <vscale x 2 x i64> @llvm.riscv.vwmul.mask.nxv2i64.nxv2i32.nxv2i32( 622 <vscale x 2 x i64> %0, 623 <vscale x 2 x i32> %1, 624 <vscale x 2 x i32> %2, 625 <vscale x 2 x i1> %3, 626 iXLen %4, iXLen 1) 627 628 ret <vscale x 2 x i64> %a 629} 630 631declare <vscale x 4 x i64> @llvm.riscv.vwmul.nxv4i64.nxv4i32.nxv4i32( 632 <vscale x 4 x i64>, 633 <vscale x 4 x i32>, 634 <vscale x 4 x i32>, 635 iXLen); 636 637define <vscale x 4 x i64> @intrinsic_vwmul_vv_nxv4i64_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, iXLen %2) nounwind { 638; CHECK-LABEL: intrinsic_vwmul_vv_nxv4i64_nxv4i32_nxv4i32: 639; CHECK: # %bb.0: # %entry 640; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 641; CHECK-NEXT: vwmul.vv v12, v8, v10 642; CHECK-NEXT: vmv4r.v v8, v12 643; CHECK-NEXT: ret 644entry: 645 %a = call <vscale x 4 x i64> @llvm.riscv.vwmul.nxv4i64.nxv4i32.nxv4i32( 646 <vscale x 4 x i64> undef, 647 <vscale x 4 x i32> %0, 648 <vscale x 4 x i32> %1, 649 iXLen %2) 650 651 ret <vscale x 4 x i64> %a 652} 653 654declare <vscale x 4 x i64> @llvm.riscv.vwmul.mask.nxv4i64.nxv4i32.nxv4i32( 655 <vscale x 4 x i64>, 656 <vscale x 4 x i32>, 657 <vscale x 4 x i32>, 658 <vscale x 4 x i1>, 659 iXLen, 660 iXLen); 661 662define <vscale x 4 x i64> @intrinsic_vwmul_mask_vv_nxv4i64_nxv4i32_nxv4i32(<vscale x 4 x i64> %0, <vscale x 4 x i32> %1, <vscale x 4 x i32> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind { 663; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv4i64_nxv4i32_nxv4i32: 664; CHECK: # %bb.0: # %entry 665; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu 666; CHECK-NEXT: vwmul.vv v8, v12, v14, v0.t 667; CHECK-NEXT: ret 668entry: 669 %a = call <vscale x 4 x i64> @llvm.riscv.vwmul.mask.nxv4i64.nxv4i32.nxv4i32( 670 <vscale x 4 x i64> %0, 671 <vscale x 4 x i32> %1, 672 <vscale x 4 x i32> %2, 673 <vscale x 4 x i1> %3, 674 iXLen %4, iXLen 1) 675 676 ret <vscale x 4 x i64> %a 677} 678 679declare <vscale x 8 x i64> @llvm.riscv.vwmul.nxv8i64.nxv8i32.nxv8i32( 680 <vscale x 8 x i64>, 681 <vscale x 8 x i32>, 682 <vscale x 8 x i32>, 683 iXLen); 684 685define <vscale x 8 x i64> @intrinsic_vwmul_vv_nxv8i64_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, iXLen %2) nounwind { 686; CHECK-LABEL: intrinsic_vwmul_vv_nxv8i64_nxv8i32_nxv8i32: 687; CHECK: # %bb.0: # %entry 688; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 689; CHECK-NEXT: vwmul.vv v16, v8, v12 690; CHECK-NEXT: vmv8r.v v8, v16 691; CHECK-NEXT: ret 692entry: 693 %a = call <vscale x 8 x i64> @llvm.riscv.vwmul.nxv8i64.nxv8i32.nxv8i32( 694 <vscale x 8 x i64> undef, 695 <vscale x 8 x i32> %0, 696 <vscale x 8 x i32> %1, 697 iXLen %2) 698 699 ret <vscale x 8 x i64> %a 700} 701 702declare <vscale x 8 x i64> @llvm.riscv.vwmul.mask.nxv8i64.nxv8i32.nxv8i32( 703 <vscale x 8 x i64>, 704 <vscale x 8 x i32>, 705 <vscale x 8 x i32>, 706 <vscale x 8 x i1>, 707 iXLen, 708 iXLen); 709 710define <vscale x 8 x i64> @intrinsic_vwmul_mask_vv_nxv8i64_nxv8i32_nxv8i32(<vscale x 8 x i64> %0, <vscale x 8 x i32> %1, <vscale x 8 x i32> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind { 711; CHECK-LABEL: intrinsic_vwmul_mask_vv_nxv8i64_nxv8i32_nxv8i32: 712; CHECK: # %bb.0: # %entry 713; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu 714; CHECK-NEXT: vwmul.vv v8, v16, v20, v0.t 715; CHECK-NEXT: ret 716entry: 717 %a = call <vscale x 8 x i64> @llvm.riscv.vwmul.mask.nxv8i64.nxv8i32.nxv8i32( 718 <vscale x 8 x i64> %0, 719 <vscale x 8 x i32> %1, 720 <vscale x 8 x i32> %2, 721 <vscale x 8 x i1> %3, 722 iXLen %4, iXLen 1) 723 724 ret <vscale x 8 x i64> %a 725} 726 727declare <vscale x 1 x i16> @llvm.riscv.vwmul.nxv1i16.nxv1i8.i8( 728 <vscale x 1 x i16>, 729 <vscale x 1 x i8>, 730 i8, 731 iXLen); 732 733define <vscale x 1 x i16> @intrinsic_vwmul_vx_nxv1i16_nxv1i8_i8(<vscale x 1 x i8> %0, i8 %1, iXLen %2) nounwind { 734; CHECK-LABEL: intrinsic_vwmul_vx_nxv1i16_nxv1i8_i8: 735; CHECK: # %bb.0: # %entry 736; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 737; CHECK-NEXT: vwmul.vx v9, v8, a0 738; CHECK-NEXT: vmv1r.v v8, v9 739; CHECK-NEXT: ret 740entry: 741 %a = call <vscale x 1 x i16> @llvm.riscv.vwmul.nxv1i16.nxv1i8.i8( 742 <vscale x 1 x i16> undef, 743 <vscale x 1 x i8> %0, 744 i8 %1, 745 iXLen %2) 746 747 ret <vscale x 1 x i16> %a 748} 749 750declare <vscale x 1 x i16> @llvm.riscv.vwmul.mask.nxv1i16.nxv1i8.i8( 751 <vscale x 1 x i16>, 752 <vscale x 1 x i8>, 753 i8, 754 <vscale x 1 x i1>, 755 iXLen, 756 iXLen); 757 758define <vscale x 1 x i16> @intrinsic_vwmul_mask_vx_nxv1i16_nxv1i8_i8(<vscale x 1 x i16> %0, <vscale x 1 x i8> %1, i8 %2, <vscale x 1 x i1> %3, iXLen %4) nounwind { 759; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv1i16_nxv1i8_i8: 760; CHECK: # %bb.0: # %entry 761; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu 762; CHECK-NEXT: vwmul.vx v8, v9, a0, v0.t 763; CHECK-NEXT: ret 764entry: 765 %a = call <vscale x 1 x i16> @llvm.riscv.vwmul.mask.nxv1i16.nxv1i8.i8( 766 <vscale x 1 x i16> %0, 767 <vscale x 1 x i8> %1, 768 i8 %2, 769 <vscale x 1 x i1> %3, 770 iXLen %4, iXLen 1) 771 772 ret <vscale x 1 x i16> %a 773} 774 775declare <vscale x 2 x i16> @llvm.riscv.vwmul.nxv2i16.nxv2i8.i8( 776 <vscale x 2 x i16>, 777 <vscale x 2 x i8>, 778 i8, 779 iXLen); 780 781define <vscale x 2 x i16> @intrinsic_vwmul_vx_nxv2i16_nxv2i8_i8(<vscale x 2 x i8> %0, i8 %1, iXLen %2) nounwind { 782; CHECK-LABEL: intrinsic_vwmul_vx_nxv2i16_nxv2i8_i8: 783; CHECK: # %bb.0: # %entry 784; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 785; CHECK-NEXT: vwmul.vx v9, v8, a0 786; CHECK-NEXT: vmv1r.v v8, v9 787; CHECK-NEXT: ret 788entry: 789 %a = call <vscale x 2 x i16> @llvm.riscv.vwmul.nxv2i16.nxv2i8.i8( 790 <vscale x 2 x i16> undef, 791 <vscale x 2 x i8> %0, 792 i8 %1, 793 iXLen %2) 794 795 ret <vscale x 2 x i16> %a 796} 797 798declare <vscale x 2 x i16> @llvm.riscv.vwmul.mask.nxv2i16.nxv2i8.i8( 799 <vscale x 2 x i16>, 800 <vscale x 2 x i8>, 801 i8, 802 <vscale x 2 x i1>, 803 iXLen, 804 iXLen); 805 806define <vscale x 2 x i16> @intrinsic_vwmul_mask_vx_nxv2i16_nxv2i8_i8(<vscale x 2 x i16> %0, <vscale x 2 x i8> %1, i8 %2, <vscale x 2 x i1> %3, iXLen %4) nounwind { 807; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv2i16_nxv2i8_i8: 808; CHECK: # %bb.0: # %entry 809; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu 810; CHECK-NEXT: vwmul.vx v8, v9, a0, v0.t 811; CHECK-NEXT: ret 812entry: 813 %a = call <vscale x 2 x i16> @llvm.riscv.vwmul.mask.nxv2i16.nxv2i8.i8( 814 <vscale x 2 x i16> %0, 815 <vscale x 2 x i8> %1, 816 i8 %2, 817 <vscale x 2 x i1> %3, 818 iXLen %4, iXLen 1) 819 820 ret <vscale x 2 x i16> %a 821} 822 823declare <vscale x 4 x i16> @llvm.riscv.vwmul.nxv4i16.nxv4i8.i8( 824 <vscale x 4 x i16>, 825 <vscale x 4 x i8>, 826 i8, 827 iXLen); 828 829define <vscale x 4 x i16> @intrinsic_vwmul_vx_nxv4i16_nxv4i8_i8(<vscale x 4 x i8> %0, i8 %1, iXLen %2) nounwind { 830; CHECK-LABEL: intrinsic_vwmul_vx_nxv4i16_nxv4i8_i8: 831; CHECK: # %bb.0: # %entry 832; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 833; CHECK-NEXT: vwmul.vx v9, v8, a0 834; CHECK-NEXT: vmv1r.v v8, v9 835; CHECK-NEXT: ret 836entry: 837 %a = call <vscale x 4 x i16> @llvm.riscv.vwmul.nxv4i16.nxv4i8.i8( 838 <vscale x 4 x i16> undef, 839 <vscale x 4 x i8> %0, 840 i8 %1, 841 iXLen %2) 842 843 ret <vscale x 4 x i16> %a 844} 845 846declare <vscale x 4 x i16> @llvm.riscv.vwmul.mask.nxv4i16.nxv4i8.i8( 847 <vscale x 4 x i16>, 848 <vscale x 4 x i8>, 849 i8, 850 <vscale x 4 x i1>, 851 iXLen, 852 iXLen); 853 854define <vscale x 4 x i16> @intrinsic_vwmul_mask_vx_nxv4i16_nxv4i8_i8(<vscale x 4 x i16> %0, <vscale x 4 x i8> %1, i8 %2, <vscale x 4 x i1> %3, iXLen %4) nounwind { 855; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv4i16_nxv4i8_i8: 856; CHECK: # %bb.0: # %entry 857; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu 858; CHECK-NEXT: vwmul.vx v8, v9, a0, v0.t 859; CHECK-NEXT: ret 860entry: 861 %a = call <vscale x 4 x i16> @llvm.riscv.vwmul.mask.nxv4i16.nxv4i8.i8( 862 <vscale x 4 x i16> %0, 863 <vscale x 4 x i8> %1, 864 i8 %2, 865 <vscale x 4 x i1> %3, 866 iXLen %4, iXLen 1) 867 868 ret <vscale x 4 x i16> %a 869} 870 871declare <vscale x 8 x i16> @llvm.riscv.vwmul.nxv8i16.nxv8i8.i8( 872 <vscale x 8 x i16>, 873 <vscale x 8 x i8>, 874 i8, 875 iXLen); 876 877define <vscale x 8 x i16> @intrinsic_vwmul_vx_nxv8i16_nxv8i8_i8(<vscale x 8 x i8> %0, i8 %1, iXLen %2) nounwind { 878; CHECK-LABEL: intrinsic_vwmul_vx_nxv8i16_nxv8i8_i8: 879; CHECK: # %bb.0: # %entry 880; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 881; CHECK-NEXT: vwmul.vx v10, v8, a0 882; CHECK-NEXT: vmv2r.v v8, v10 883; CHECK-NEXT: ret 884entry: 885 %a = call <vscale x 8 x i16> @llvm.riscv.vwmul.nxv8i16.nxv8i8.i8( 886 <vscale x 8 x i16> undef, 887 <vscale x 8 x i8> %0, 888 i8 %1, 889 iXLen %2) 890 891 ret <vscale x 8 x i16> %a 892} 893 894declare <vscale x 8 x i16> @llvm.riscv.vwmul.mask.nxv8i16.nxv8i8.i8( 895 <vscale x 8 x i16>, 896 <vscale x 8 x i8>, 897 i8, 898 <vscale x 8 x i1>, 899 iXLen, 900 iXLen); 901 902define <vscale x 8 x i16> @intrinsic_vwmul_mask_vx_nxv8i16_nxv8i8_i8(<vscale x 8 x i16> %0, <vscale x 8 x i8> %1, i8 %2, <vscale x 8 x i1> %3, iXLen %4) nounwind { 903; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv8i16_nxv8i8_i8: 904; CHECK: # %bb.0: # %entry 905; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu 906; CHECK-NEXT: vwmul.vx v8, v10, a0, v0.t 907; CHECK-NEXT: ret 908entry: 909 %a = call <vscale x 8 x i16> @llvm.riscv.vwmul.mask.nxv8i16.nxv8i8.i8( 910 <vscale x 8 x i16> %0, 911 <vscale x 8 x i8> %1, 912 i8 %2, 913 <vscale x 8 x i1> %3, 914 iXLen %4, iXLen 1) 915 916 ret <vscale x 8 x i16> %a 917} 918 919declare <vscale x 16 x i16> @llvm.riscv.vwmul.nxv16i16.nxv16i8.i8( 920 <vscale x 16 x i16>, 921 <vscale x 16 x i8>, 922 i8, 923 iXLen); 924 925define <vscale x 16 x i16> @intrinsic_vwmul_vx_nxv16i16_nxv16i8_i8(<vscale x 16 x i8> %0, i8 %1, iXLen %2) nounwind { 926; CHECK-LABEL: intrinsic_vwmul_vx_nxv16i16_nxv16i8_i8: 927; CHECK: # %bb.0: # %entry 928; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma 929; CHECK-NEXT: vwmul.vx v12, v8, a0 930; CHECK-NEXT: vmv4r.v v8, v12 931; CHECK-NEXT: ret 932entry: 933 %a = call <vscale x 16 x i16> @llvm.riscv.vwmul.nxv16i16.nxv16i8.i8( 934 <vscale x 16 x i16> undef, 935 <vscale x 16 x i8> %0, 936 i8 %1, 937 iXLen %2) 938 939 ret <vscale x 16 x i16> %a 940} 941 942declare <vscale x 16 x i16> @llvm.riscv.vwmul.mask.nxv16i16.nxv16i8.i8( 943 <vscale x 16 x i16>, 944 <vscale x 16 x i8>, 945 i8, 946 <vscale x 16 x i1>, 947 iXLen, 948 iXLen); 949 950define <vscale x 16 x i16> @intrinsic_vwmul_mask_vx_nxv16i16_nxv16i8_i8(<vscale x 16 x i16> %0, <vscale x 16 x i8> %1, i8 %2, <vscale x 16 x i1> %3, iXLen %4) nounwind { 951; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv16i16_nxv16i8_i8: 952; CHECK: # %bb.0: # %entry 953; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu 954; CHECK-NEXT: vwmul.vx v8, v12, a0, v0.t 955; CHECK-NEXT: ret 956entry: 957 %a = call <vscale x 16 x i16> @llvm.riscv.vwmul.mask.nxv16i16.nxv16i8.i8( 958 <vscale x 16 x i16> %0, 959 <vscale x 16 x i8> %1, 960 i8 %2, 961 <vscale x 16 x i1> %3, 962 iXLen %4, iXLen 1) 963 964 ret <vscale x 16 x i16> %a 965} 966 967declare <vscale x 32 x i16> @llvm.riscv.vwmul.nxv32i16.nxv32i8.i8( 968 <vscale x 32 x i16>, 969 <vscale x 32 x i8>, 970 i8, 971 iXLen); 972 973define <vscale x 32 x i16> @intrinsic_vwmul_vx_nxv32i16_nxv32i8_i8(<vscale x 32 x i8> %0, i8 %1, iXLen %2) nounwind { 974; CHECK-LABEL: intrinsic_vwmul_vx_nxv32i16_nxv32i8_i8: 975; CHECK: # %bb.0: # %entry 976; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma 977; CHECK-NEXT: vwmul.vx v16, v8, a0 978; CHECK-NEXT: vmv8r.v v8, v16 979; CHECK-NEXT: ret 980entry: 981 %a = call <vscale x 32 x i16> @llvm.riscv.vwmul.nxv32i16.nxv32i8.i8( 982 <vscale x 32 x i16> undef, 983 <vscale x 32 x i8> %0, 984 i8 %1, 985 iXLen %2) 986 987 ret <vscale x 32 x i16> %a 988} 989 990declare <vscale x 32 x i16> @llvm.riscv.vwmul.mask.nxv32i16.nxv32i8.i8( 991 <vscale x 32 x i16>, 992 <vscale x 32 x i8>, 993 i8, 994 <vscale x 32 x i1>, 995 iXLen, 996 iXLen); 997 998define <vscale x 32 x i16> @intrinsic_vwmul_mask_vx_nxv32i16_nxv32i8_i8(<vscale x 32 x i16> %0, <vscale x 32 x i8> %1, i8 %2, <vscale x 32 x i1> %3, iXLen %4) nounwind { 999; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv32i16_nxv32i8_i8: 1000; CHECK: # %bb.0: # %entry 1001; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu 1002; CHECK-NEXT: vwmul.vx v8, v16, a0, v0.t 1003; CHECK-NEXT: ret 1004entry: 1005 %a = call <vscale x 32 x i16> @llvm.riscv.vwmul.mask.nxv32i16.nxv32i8.i8( 1006 <vscale x 32 x i16> %0, 1007 <vscale x 32 x i8> %1, 1008 i8 %2, 1009 <vscale x 32 x i1> %3, 1010 iXLen %4, iXLen 1) 1011 1012 ret <vscale x 32 x i16> %a 1013} 1014 1015declare <vscale x 1 x i32> @llvm.riscv.vwmul.nxv1i32.nxv1i16.i16( 1016 <vscale x 1 x i32>, 1017 <vscale x 1 x i16>, 1018 i16, 1019 iXLen); 1020 1021define <vscale x 1 x i32> @intrinsic_vwmul_vx_nxv1i32_nxv1i16_i16(<vscale x 1 x i16> %0, i16 %1, iXLen %2) nounwind { 1022; CHECK-LABEL: intrinsic_vwmul_vx_nxv1i32_nxv1i16_i16: 1023; CHECK: # %bb.0: # %entry 1024; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 1025; CHECK-NEXT: vwmul.vx v9, v8, a0 1026; CHECK-NEXT: vmv1r.v v8, v9 1027; CHECK-NEXT: ret 1028entry: 1029 %a = call <vscale x 1 x i32> @llvm.riscv.vwmul.nxv1i32.nxv1i16.i16( 1030 <vscale x 1 x i32> undef, 1031 <vscale x 1 x i16> %0, 1032 i16 %1, 1033 iXLen %2) 1034 1035 ret <vscale x 1 x i32> %a 1036} 1037 1038declare <vscale x 1 x i32> @llvm.riscv.vwmul.mask.nxv1i32.nxv1i16.i16( 1039 <vscale x 1 x i32>, 1040 <vscale x 1 x i16>, 1041 i16, 1042 <vscale x 1 x i1>, 1043 iXLen, 1044 iXLen); 1045 1046define <vscale x 1 x i32> @intrinsic_vwmul_mask_vx_nxv1i32_nxv1i16_i16(<vscale x 1 x i32> %0, <vscale x 1 x i16> %1, i16 %2, <vscale x 1 x i1> %3, iXLen %4) nounwind { 1047; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv1i32_nxv1i16_i16: 1048; CHECK: # %bb.0: # %entry 1049; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 1050; CHECK-NEXT: vwmul.vx v8, v9, a0, v0.t 1051; CHECK-NEXT: ret 1052entry: 1053 %a = call <vscale x 1 x i32> @llvm.riscv.vwmul.mask.nxv1i32.nxv1i16.i16( 1054 <vscale x 1 x i32> %0, 1055 <vscale x 1 x i16> %1, 1056 i16 %2, 1057 <vscale x 1 x i1> %3, 1058 iXLen %4, iXLen 1) 1059 1060 ret <vscale x 1 x i32> %a 1061} 1062 1063declare <vscale x 2 x i32> @llvm.riscv.vwmul.nxv2i32.nxv2i16.i16( 1064 <vscale x 2 x i32>, 1065 <vscale x 2 x i16>, 1066 i16, 1067 iXLen); 1068 1069define <vscale x 2 x i32> @intrinsic_vwmul_vx_nxv2i32_nxv2i16_i16(<vscale x 2 x i16> %0, i16 %1, iXLen %2) nounwind { 1070; CHECK-LABEL: intrinsic_vwmul_vx_nxv2i32_nxv2i16_i16: 1071; CHECK: # %bb.0: # %entry 1072; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 1073; CHECK-NEXT: vwmul.vx v9, v8, a0 1074; CHECK-NEXT: vmv1r.v v8, v9 1075; CHECK-NEXT: ret 1076entry: 1077 %a = call <vscale x 2 x i32> @llvm.riscv.vwmul.nxv2i32.nxv2i16.i16( 1078 <vscale x 2 x i32> undef, 1079 <vscale x 2 x i16> %0, 1080 i16 %1, 1081 iXLen %2) 1082 1083 ret <vscale x 2 x i32> %a 1084} 1085 1086declare <vscale x 2 x i32> @llvm.riscv.vwmul.mask.nxv2i32.nxv2i16.i16( 1087 <vscale x 2 x i32>, 1088 <vscale x 2 x i16>, 1089 i16, 1090 <vscale x 2 x i1>, 1091 iXLen, 1092 iXLen); 1093 1094define <vscale x 2 x i32> @intrinsic_vwmul_mask_vx_nxv2i32_nxv2i16_i16(<vscale x 2 x i32> %0, <vscale x 2 x i16> %1, i16 %2, <vscale x 2 x i1> %3, iXLen %4) nounwind { 1095; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv2i32_nxv2i16_i16: 1096; CHECK: # %bb.0: # %entry 1097; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 1098; CHECK-NEXT: vwmul.vx v8, v9, a0, v0.t 1099; CHECK-NEXT: ret 1100entry: 1101 %a = call <vscale x 2 x i32> @llvm.riscv.vwmul.mask.nxv2i32.nxv2i16.i16( 1102 <vscale x 2 x i32> %0, 1103 <vscale x 2 x i16> %1, 1104 i16 %2, 1105 <vscale x 2 x i1> %3, 1106 iXLen %4, iXLen 1) 1107 1108 ret <vscale x 2 x i32> %a 1109} 1110 1111declare <vscale x 4 x i32> @llvm.riscv.vwmul.nxv4i32.nxv4i16.i16( 1112 <vscale x 4 x i32>, 1113 <vscale x 4 x i16>, 1114 i16, 1115 iXLen); 1116 1117define <vscale x 4 x i32> @intrinsic_vwmul_vx_nxv4i32_nxv4i16_i16(<vscale x 4 x i16> %0, i16 %1, iXLen %2) nounwind { 1118; CHECK-LABEL: intrinsic_vwmul_vx_nxv4i32_nxv4i16_i16: 1119; CHECK: # %bb.0: # %entry 1120; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 1121; CHECK-NEXT: vwmul.vx v10, v8, a0 1122; CHECK-NEXT: vmv2r.v v8, v10 1123; CHECK-NEXT: ret 1124entry: 1125 %a = call <vscale x 4 x i32> @llvm.riscv.vwmul.nxv4i32.nxv4i16.i16( 1126 <vscale x 4 x i32> undef, 1127 <vscale x 4 x i16> %0, 1128 i16 %1, 1129 iXLen %2) 1130 1131 ret <vscale x 4 x i32> %a 1132} 1133 1134declare <vscale x 4 x i32> @llvm.riscv.vwmul.mask.nxv4i32.nxv4i16.i16( 1135 <vscale x 4 x i32>, 1136 <vscale x 4 x i16>, 1137 i16, 1138 <vscale x 4 x i1>, 1139 iXLen, 1140 iXLen); 1141 1142define <vscale x 4 x i32> @intrinsic_vwmul_mask_vx_nxv4i32_nxv4i16_i16(<vscale x 4 x i32> %0, <vscale x 4 x i16> %1, i16 %2, <vscale x 4 x i1> %3, iXLen %4) nounwind { 1143; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv4i32_nxv4i16_i16: 1144; CHECK: # %bb.0: # %entry 1145; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 1146; CHECK-NEXT: vwmul.vx v8, v10, a0, v0.t 1147; CHECK-NEXT: ret 1148entry: 1149 %a = call <vscale x 4 x i32> @llvm.riscv.vwmul.mask.nxv4i32.nxv4i16.i16( 1150 <vscale x 4 x i32> %0, 1151 <vscale x 4 x i16> %1, 1152 i16 %2, 1153 <vscale x 4 x i1> %3, 1154 iXLen %4, iXLen 1) 1155 1156 ret <vscale x 4 x i32> %a 1157} 1158 1159declare <vscale x 8 x i32> @llvm.riscv.vwmul.nxv8i32.nxv8i16.i16( 1160 <vscale x 8 x i32>, 1161 <vscale x 8 x i16>, 1162 i16, 1163 iXLen); 1164 1165define <vscale x 8 x i32> @intrinsic_vwmul_vx_nxv8i32_nxv8i16_i16(<vscale x 8 x i16> %0, i16 %1, iXLen %2) nounwind { 1166; CHECK-LABEL: intrinsic_vwmul_vx_nxv8i32_nxv8i16_i16: 1167; CHECK: # %bb.0: # %entry 1168; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 1169; CHECK-NEXT: vwmul.vx v12, v8, a0 1170; CHECK-NEXT: vmv4r.v v8, v12 1171; CHECK-NEXT: ret 1172entry: 1173 %a = call <vscale x 8 x i32> @llvm.riscv.vwmul.nxv8i32.nxv8i16.i16( 1174 <vscale x 8 x i32> undef, 1175 <vscale x 8 x i16> %0, 1176 i16 %1, 1177 iXLen %2) 1178 1179 ret <vscale x 8 x i32> %a 1180} 1181 1182declare <vscale x 8 x i32> @llvm.riscv.vwmul.mask.nxv8i32.nxv8i16.i16( 1183 <vscale x 8 x i32>, 1184 <vscale x 8 x i16>, 1185 i16, 1186 <vscale x 8 x i1>, 1187 iXLen, 1188 iXLen); 1189 1190define <vscale x 8 x i32> @intrinsic_vwmul_mask_vx_nxv8i32_nxv8i16_i16(<vscale x 8 x i32> %0, <vscale x 8 x i16> %1, i16 %2, <vscale x 8 x i1> %3, iXLen %4) nounwind { 1191; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv8i32_nxv8i16_i16: 1192; CHECK: # %bb.0: # %entry 1193; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu 1194; CHECK-NEXT: vwmul.vx v8, v12, a0, v0.t 1195; CHECK-NEXT: ret 1196entry: 1197 %a = call <vscale x 8 x i32> @llvm.riscv.vwmul.mask.nxv8i32.nxv8i16.i16( 1198 <vscale x 8 x i32> %0, 1199 <vscale x 8 x i16> %1, 1200 i16 %2, 1201 <vscale x 8 x i1> %3, 1202 iXLen %4, iXLen 1) 1203 1204 ret <vscale x 8 x i32> %a 1205} 1206 1207declare <vscale x 16 x i32> @llvm.riscv.vwmul.nxv16i32.nxv16i16.i16( 1208 <vscale x 16 x i32>, 1209 <vscale x 16 x i16>, 1210 i16, 1211 iXLen); 1212 1213define <vscale x 16 x i32> @intrinsic_vwmul_vx_nxv16i32_nxv16i16_i16(<vscale x 16 x i16> %0, i16 %1, iXLen %2) nounwind { 1214; CHECK-LABEL: intrinsic_vwmul_vx_nxv16i32_nxv16i16_i16: 1215; CHECK: # %bb.0: # %entry 1216; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma 1217; CHECK-NEXT: vwmul.vx v16, v8, a0 1218; CHECK-NEXT: vmv8r.v v8, v16 1219; CHECK-NEXT: ret 1220entry: 1221 %a = call <vscale x 16 x i32> @llvm.riscv.vwmul.nxv16i32.nxv16i16.i16( 1222 <vscale x 16 x i32> undef, 1223 <vscale x 16 x i16> %0, 1224 i16 %1, 1225 iXLen %2) 1226 1227 ret <vscale x 16 x i32> %a 1228} 1229 1230declare <vscale x 16 x i32> @llvm.riscv.vwmul.mask.nxv16i32.nxv16i16.i16( 1231 <vscale x 16 x i32>, 1232 <vscale x 16 x i16>, 1233 i16, 1234 <vscale x 16 x i1>, 1235 iXLen, 1236 iXLen); 1237 1238define <vscale x 16 x i32> @intrinsic_vwmul_mask_vx_nxv16i32_nxv16i16_i16(<vscale x 16 x i32> %0, <vscale x 16 x i16> %1, i16 %2, <vscale x 16 x i1> %3, iXLen %4) nounwind { 1239; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv16i32_nxv16i16_i16: 1240; CHECK: # %bb.0: # %entry 1241; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu 1242; CHECK-NEXT: vwmul.vx v8, v16, a0, v0.t 1243; CHECK-NEXT: ret 1244entry: 1245 %a = call <vscale x 16 x i32> @llvm.riscv.vwmul.mask.nxv16i32.nxv16i16.i16( 1246 <vscale x 16 x i32> %0, 1247 <vscale x 16 x i16> %1, 1248 i16 %2, 1249 <vscale x 16 x i1> %3, 1250 iXLen %4, iXLen 1) 1251 1252 ret <vscale x 16 x i32> %a 1253} 1254 1255declare <vscale x 1 x i64> @llvm.riscv.vwmul.nxv1i64.nxv1i32.i32( 1256 <vscale x 1 x i64>, 1257 <vscale x 1 x i32>, 1258 i32, 1259 iXLen); 1260 1261define <vscale x 1 x i64> @intrinsic_vwmul_vx_nxv1i64_nxv1i32_i32(<vscale x 1 x i32> %0, i32 %1, iXLen %2) nounwind { 1262; CHECK-LABEL: intrinsic_vwmul_vx_nxv1i64_nxv1i32_i32: 1263; CHECK: # %bb.0: # %entry 1264; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 1265; CHECK-NEXT: vwmul.vx v9, v8, a0 1266; CHECK-NEXT: vmv1r.v v8, v9 1267; CHECK-NEXT: ret 1268entry: 1269 %a = call <vscale x 1 x i64> @llvm.riscv.vwmul.nxv1i64.nxv1i32.i32( 1270 <vscale x 1 x i64> undef, 1271 <vscale x 1 x i32> %0, 1272 i32 %1, 1273 iXLen %2) 1274 1275 ret <vscale x 1 x i64> %a 1276} 1277 1278declare <vscale x 1 x i64> @llvm.riscv.vwmul.mask.nxv1i64.nxv1i32.i32( 1279 <vscale x 1 x i64>, 1280 <vscale x 1 x i32>, 1281 i32, 1282 <vscale x 1 x i1>, 1283 iXLen, 1284 iXLen); 1285 1286define <vscale x 1 x i64> @intrinsic_vwmul_mask_vx_nxv1i64_nxv1i32_i32(<vscale x 1 x i64> %0, <vscale x 1 x i32> %1, i32 %2, <vscale x 1 x i1> %3, iXLen %4) nounwind { 1287; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv1i64_nxv1i32_i32: 1288; CHECK: # %bb.0: # %entry 1289; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 1290; CHECK-NEXT: vwmul.vx v8, v9, a0, v0.t 1291; CHECK-NEXT: ret 1292entry: 1293 %a = call <vscale x 1 x i64> @llvm.riscv.vwmul.mask.nxv1i64.nxv1i32.i32( 1294 <vscale x 1 x i64> %0, 1295 <vscale x 1 x i32> %1, 1296 i32 %2, 1297 <vscale x 1 x i1> %3, 1298 iXLen %4, iXLen 1) 1299 1300 ret <vscale x 1 x i64> %a 1301} 1302 1303declare <vscale x 2 x i64> @llvm.riscv.vwmul.nxv2i64.nxv2i32.i32( 1304 <vscale x 2 x i64>, 1305 <vscale x 2 x i32>, 1306 i32, 1307 iXLen); 1308 1309define <vscale x 2 x i64> @intrinsic_vwmul_vx_nxv2i64_nxv2i32_i32(<vscale x 2 x i32> %0, i32 %1, iXLen %2) nounwind { 1310; CHECK-LABEL: intrinsic_vwmul_vx_nxv2i64_nxv2i32_i32: 1311; CHECK: # %bb.0: # %entry 1312; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 1313; CHECK-NEXT: vwmul.vx v10, v8, a0 1314; CHECK-NEXT: vmv2r.v v8, v10 1315; CHECK-NEXT: ret 1316entry: 1317 %a = call <vscale x 2 x i64> @llvm.riscv.vwmul.nxv2i64.nxv2i32.i32( 1318 <vscale x 2 x i64> undef, 1319 <vscale x 2 x i32> %0, 1320 i32 %1, 1321 iXLen %2) 1322 1323 ret <vscale x 2 x i64> %a 1324} 1325 1326declare <vscale x 2 x i64> @llvm.riscv.vwmul.mask.nxv2i64.nxv2i32.i32( 1327 <vscale x 2 x i64>, 1328 <vscale x 2 x i32>, 1329 i32, 1330 <vscale x 2 x i1>, 1331 iXLen, 1332 iXLen); 1333 1334define <vscale x 2 x i64> @intrinsic_vwmul_mask_vx_nxv2i64_nxv2i32_i32(<vscale x 2 x i64> %0, <vscale x 2 x i32> %1, i32 %2, <vscale x 2 x i1> %3, iXLen %4) nounwind { 1335; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv2i64_nxv2i32_i32: 1336; CHECK: # %bb.0: # %entry 1337; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 1338; CHECK-NEXT: vwmul.vx v8, v10, a0, v0.t 1339; CHECK-NEXT: ret 1340entry: 1341 %a = call <vscale x 2 x i64> @llvm.riscv.vwmul.mask.nxv2i64.nxv2i32.i32( 1342 <vscale x 2 x i64> %0, 1343 <vscale x 2 x i32> %1, 1344 i32 %2, 1345 <vscale x 2 x i1> %3, 1346 iXLen %4, iXLen 1) 1347 1348 ret <vscale x 2 x i64> %a 1349} 1350 1351declare <vscale x 4 x i64> @llvm.riscv.vwmul.nxv4i64.nxv4i32.i32( 1352 <vscale x 4 x i64>, 1353 <vscale x 4 x i32>, 1354 i32, 1355 iXLen); 1356 1357define <vscale x 4 x i64> @intrinsic_vwmul_vx_nxv4i64_nxv4i32_i32(<vscale x 4 x i32> %0, i32 %1, iXLen %2) nounwind { 1358; CHECK-LABEL: intrinsic_vwmul_vx_nxv4i64_nxv4i32_i32: 1359; CHECK: # %bb.0: # %entry 1360; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1361; CHECK-NEXT: vwmul.vx v12, v8, a0 1362; CHECK-NEXT: vmv4r.v v8, v12 1363; CHECK-NEXT: ret 1364entry: 1365 %a = call <vscale x 4 x i64> @llvm.riscv.vwmul.nxv4i64.nxv4i32.i32( 1366 <vscale x 4 x i64> undef, 1367 <vscale x 4 x i32> %0, 1368 i32 %1, 1369 iXLen %2) 1370 1371 ret <vscale x 4 x i64> %a 1372} 1373 1374declare <vscale x 4 x i64> @llvm.riscv.vwmul.mask.nxv4i64.nxv4i32.i32( 1375 <vscale x 4 x i64>, 1376 <vscale x 4 x i32>, 1377 i32, 1378 <vscale x 4 x i1>, 1379 iXLen, 1380 iXLen); 1381 1382define <vscale x 4 x i64> @intrinsic_vwmul_mask_vx_nxv4i64_nxv4i32_i32(<vscale x 4 x i64> %0, <vscale x 4 x i32> %1, i32 %2, <vscale x 4 x i1> %3, iXLen %4) nounwind { 1383; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv4i64_nxv4i32_i32: 1384; CHECK: # %bb.0: # %entry 1385; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu 1386; CHECK-NEXT: vwmul.vx v8, v12, a0, v0.t 1387; CHECK-NEXT: ret 1388entry: 1389 %a = call <vscale x 4 x i64> @llvm.riscv.vwmul.mask.nxv4i64.nxv4i32.i32( 1390 <vscale x 4 x i64> %0, 1391 <vscale x 4 x i32> %1, 1392 i32 %2, 1393 <vscale x 4 x i1> %3, 1394 iXLen %4, iXLen 1) 1395 1396 ret <vscale x 4 x i64> %a 1397} 1398 1399declare <vscale x 8 x i64> @llvm.riscv.vwmul.nxv8i64.nxv8i32.i32( 1400 <vscale x 8 x i64>, 1401 <vscale x 8 x i32>, 1402 i32, 1403 iXLen); 1404 1405define <vscale x 8 x i64> @intrinsic_vwmul_vx_nxv8i64_nxv8i32_i32(<vscale x 8 x i32> %0, i32 %1, iXLen %2) nounwind { 1406; CHECK-LABEL: intrinsic_vwmul_vx_nxv8i64_nxv8i32_i32: 1407; CHECK: # %bb.0: # %entry 1408; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma 1409; CHECK-NEXT: vwmul.vx v16, v8, a0 1410; CHECK-NEXT: vmv8r.v v8, v16 1411; CHECK-NEXT: ret 1412entry: 1413 %a = call <vscale x 8 x i64> @llvm.riscv.vwmul.nxv8i64.nxv8i32.i32( 1414 <vscale x 8 x i64> undef, 1415 <vscale x 8 x i32> %0, 1416 i32 %1, 1417 iXLen %2) 1418 1419 ret <vscale x 8 x i64> %a 1420} 1421 1422declare <vscale x 8 x i64> @llvm.riscv.vwmul.mask.nxv8i64.nxv8i32.i32( 1423 <vscale x 8 x i64>, 1424 <vscale x 8 x i32>, 1425 i32, 1426 <vscale x 8 x i1>, 1427 iXLen, 1428 iXLen); 1429 1430define <vscale x 8 x i64> @intrinsic_vwmul_mask_vx_nxv8i64_nxv8i32_i32(<vscale x 8 x i64> %0, <vscale x 8 x i32> %1, i32 %2, <vscale x 8 x i1> %3, iXLen %4) nounwind { 1431; CHECK-LABEL: intrinsic_vwmul_mask_vx_nxv8i64_nxv8i32_i32: 1432; CHECK: # %bb.0: # %entry 1433; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu 1434; CHECK-NEXT: vwmul.vx v8, v16, a0, v0.t 1435; CHECK-NEXT: ret 1436entry: 1437 %a = call <vscale x 8 x i64> @llvm.riscv.vwmul.mask.nxv8i64.nxv8i32.i32( 1438 <vscale x 8 x i64> %0, 1439 <vscale x 8 x i32> %1, 1440 i32 %2, 1441 <vscale x 8 x i1> %3, 1442 iXLen %4, iXLen 1) 1443 1444 ret <vscale x 8 x i64> %a 1445} 1446