1035 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v \3; RUN: -verify-machineinstrs | FileCheck %s4; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v \5; RUN: -verify-machineinstrs | FileCheck %s6 7define <vscale x 1 x i16> @intrinsic_vwsub_vv_nxv1i16_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, iXLen %2) nounwind {8; CHECK-LABEL: intrinsic_vwsub_vv_nxv1i16_nxv1i8_nxv1i8:9; CHECK: # %bb.0: # %entry10; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma11; CHECK-NEXT: vwsub.vv v10, v8, v912; CHECK-NEXT: vmv1r.v v8, v1013; CHECK-NEXT: ret14entry:15 %a = call <vscale x 1 x i16> @llvm.riscv.vwsub.nxv1i16.nxv1i8.nxv1i8(16 <vscale x 1 x i16> poison,17 <vscale x 1 x i8> %0,18 <vscale x 1 x i8> %1,19 iXLen %2)20 21 ret <vscale x 1 x i16> %a22}23 24define <vscale x 1 x i16> @intrinsic_vwsub_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 {25; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv1i16_nxv1i8_nxv1i8:26; CHECK: # %bb.0: # %entry27; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu28; CHECK-NEXT: vwsub.vv v8, v9, v10, v0.t29; CHECK-NEXT: ret30entry:31 %a = call <vscale x 1 x i16> @llvm.riscv.vwsub.mask.nxv1i16.nxv1i8.nxv1i8(32 <vscale x 1 x i16> %0,33 <vscale x 1 x i8> %1,34 <vscale x 1 x i8> %2,35 <vscale x 1 x i1> %3,36 iXLen %4, iXLen 1)37 38 ret <vscale x 1 x i16> %a39}40 41define <vscale x 2 x i16> @intrinsic_vwsub_vv_nxv2i16_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, iXLen %2) nounwind {42; CHECK-LABEL: intrinsic_vwsub_vv_nxv2i16_nxv2i8_nxv2i8:43; CHECK: # %bb.0: # %entry44; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma45; CHECK-NEXT: vwsub.vv v10, v8, v946; CHECK-NEXT: vmv1r.v v8, v1047; CHECK-NEXT: ret48entry:49 %a = call <vscale x 2 x i16> @llvm.riscv.vwsub.nxv2i16.nxv2i8.nxv2i8(50 <vscale x 2 x i16> poison,51 <vscale x 2 x i8> %0,52 <vscale x 2 x i8> %1,53 iXLen %2)54 55 ret <vscale x 2 x i16> %a56}57 58define <vscale x 2 x i16> @intrinsic_vwsub_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 {59; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv2i16_nxv2i8_nxv2i8:60; CHECK: # %bb.0: # %entry61; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, mu62; CHECK-NEXT: vwsub.vv v8, v9, v10, v0.t63; CHECK-NEXT: ret64entry:65 %a = call <vscale x 2 x i16> @llvm.riscv.vwsub.mask.nxv2i16.nxv2i8.nxv2i8(66 <vscale x 2 x i16> %0,67 <vscale x 2 x i8> %1,68 <vscale x 2 x i8> %2,69 <vscale x 2 x i1> %3,70 iXLen %4, iXLen 1)71 72 ret <vscale x 2 x i16> %a73}74 75define <vscale x 4 x i16> @intrinsic_vwsub_vv_nxv4i16_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, iXLen %2) nounwind {76; CHECK-LABEL: intrinsic_vwsub_vv_nxv4i16_nxv4i8_nxv4i8:77; CHECK: # %bb.0: # %entry78; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma79; CHECK-NEXT: vwsub.vv v10, v8, v980; CHECK-NEXT: vmv1r.v v8, v1081; CHECK-NEXT: ret82entry:83 %a = call <vscale x 4 x i16> @llvm.riscv.vwsub.nxv4i16.nxv4i8.nxv4i8(84 <vscale x 4 x i16> poison,85 <vscale x 4 x i8> %0,86 <vscale x 4 x i8> %1,87 iXLen %2)88 89 ret <vscale x 4 x i16> %a90}91 92define <vscale x 4 x i16> @intrinsic_vwsub_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 {93; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv4i16_nxv4i8_nxv4i8:94; CHECK: # %bb.0: # %entry95; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, mu96; CHECK-NEXT: vwsub.vv v8, v9, v10, v0.t97; CHECK-NEXT: ret98entry:99 %a = call <vscale x 4 x i16> @llvm.riscv.vwsub.mask.nxv4i16.nxv4i8.nxv4i8(100 <vscale x 4 x i16> %0,101 <vscale x 4 x i8> %1,102 <vscale x 4 x i8> %2,103 <vscale x 4 x i1> %3,104 iXLen %4, iXLen 1)105 106 ret <vscale x 4 x i16> %a107}108 109define <vscale x 8 x i16> @intrinsic_vwsub_vv_nxv8i16_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, iXLen %2) nounwind {110; CHECK-LABEL: intrinsic_vwsub_vv_nxv8i16_nxv8i8_nxv8i8:111; CHECK: # %bb.0: # %entry112; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma113; CHECK-NEXT: vmv1r.v v10, v9114; CHECK-NEXT: vmv1r.v v11, v8115; CHECK-NEXT: vwsub.vv v8, v11, v10116; CHECK-NEXT: ret117entry:118 %a = call <vscale x 8 x i16> @llvm.riscv.vwsub.nxv8i16.nxv8i8.nxv8i8(119 <vscale x 8 x i16> poison,120 <vscale x 8 x i8> %0,121 <vscale x 8 x i8> %1,122 iXLen %2)123 124 ret <vscale x 8 x i16> %a125}126 127define <vscale x 8 x i16> @intrinsic_vwsub_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 {128; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv8i16_nxv8i8_nxv8i8:129; CHECK: # %bb.0: # %entry130; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu131; CHECK-NEXT: vwsub.vv v8, v10, v11, v0.t132; CHECK-NEXT: ret133entry:134 %a = call <vscale x 8 x i16> @llvm.riscv.vwsub.mask.nxv8i16.nxv8i8.nxv8i8(135 <vscale x 8 x i16> %0,136 <vscale x 8 x i8> %1,137 <vscale x 8 x i8> %2,138 <vscale x 8 x i1> %3,139 iXLen %4, iXLen 1)140 141 ret <vscale x 8 x i16> %a142}143 144define <vscale x 16 x i16> @intrinsic_vwsub_vv_nxv16i16_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, iXLen %2) nounwind {145; CHECK-LABEL: intrinsic_vwsub_vv_nxv16i16_nxv16i8_nxv16i8:146; CHECK: # %bb.0: # %entry147; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma148; CHECK-NEXT: vmv2r.v v12, v10149; CHECK-NEXT: vmv2r.v v14, v8150; CHECK-NEXT: vwsub.vv v8, v14, v12151; CHECK-NEXT: ret152entry:153 %a = call <vscale x 16 x i16> @llvm.riscv.vwsub.nxv16i16.nxv16i8.nxv16i8(154 <vscale x 16 x i16> poison,155 <vscale x 16 x i8> %0,156 <vscale x 16 x i8> %1,157 iXLen %2)158 159 ret <vscale x 16 x i16> %a160}161 162define <vscale x 16 x i16> @intrinsic_vwsub_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 {163; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv16i16_nxv16i8_nxv16i8:164; CHECK: # %bb.0: # %entry165; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu166; CHECK-NEXT: vwsub.vv v8, v12, v14, v0.t167; CHECK-NEXT: ret168entry:169 %a = call <vscale x 16 x i16> @llvm.riscv.vwsub.mask.nxv16i16.nxv16i8.nxv16i8(170 <vscale x 16 x i16> %0,171 <vscale x 16 x i8> %1,172 <vscale x 16 x i8> %2,173 <vscale x 16 x i1> %3,174 iXLen %4, iXLen 1)175 176 ret <vscale x 16 x i16> %a177}178 179define <vscale x 32 x i16> @intrinsic_vwsub_vv_nxv32i16_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, iXLen %2) nounwind {180; CHECK-LABEL: intrinsic_vwsub_vv_nxv32i16_nxv32i8_nxv32i8:181; CHECK: # %bb.0: # %entry182; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma183; CHECK-NEXT: vmv4r.v v16, v12184; CHECK-NEXT: vmv4r.v v20, v8185; CHECK-NEXT: vwsub.vv v8, v20, v16186; CHECK-NEXT: ret187entry:188 %a = call <vscale x 32 x i16> @llvm.riscv.vwsub.nxv32i16.nxv32i8.nxv32i8(189 <vscale x 32 x i16> poison,190 <vscale x 32 x i8> %0,191 <vscale x 32 x i8> %1,192 iXLen %2)193 194 ret <vscale x 32 x i16> %a195}196 197define <vscale x 32 x i16> @intrinsic_vwsub_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 {198; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv32i16_nxv32i8_nxv32i8:199; CHECK: # %bb.0: # %entry200; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu201; CHECK-NEXT: vwsub.vv v8, v16, v20, v0.t202; CHECK-NEXT: ret203entry:204 %a = call <vscale x 32 x i16> @llvm.riscv.vwsub.mask.nxv32i16.nxv32i8.nxv32i8(205 <vscale x 32 x i16> %0,206 <vscale x 32 x i8> %1,207 <vscale x 32 x i8> %2,208 <vscale x 32 x i1> %3,209 iXLen %4, iXLen 1)210 211 ret <vscale x 32 x i16> %a212}213 214define <vscale x 1 x i32> @intrinsic_vwsub_vv_nxv1i32_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, iXLen %2) nounwind {215; CHECK-LABEL: intrinsic_vwsub_vv_nxv1i32_nxv1i16_nxv1i16:216; CHECK: # %bb.0: # %entry217; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma218; CHECK-NEXT: vwsub.vv v10, v8, v9219; CHECK-NEXT: vmv1r.v v8, v10220; CHECK-NEXT: ret221entry:222 %a = call <vscale x 1 x i32> @llvm.riscv.vwsub.nxv1i32.nxv1i16.nxv1i16(223 <vscale x 1 x i32> poison,224 <vscale x 1 x i16> %0,225 <vscale x 1 x i16> %1,226 iXLen %2)227 228 ret <vscale x 1 x i32> %a229}230 231define <vscale x 1 x i32> @intrinsic_vwsub_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 {232; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv1i32_nxv1i16_nxv1i16:233; CHECK: # %bb.0: # %entry234; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu235; CHECK-NEXT: vwsub.vv v8, v9, v10, v0.t236; CHECK-NEXT: ret237entry:238 %a = call <vscale x 1 x i32> @llvm.riscv.vwsub.mask.nxv1i32.nxv1i16.nxv1i16(239 <vscale x 1 x i32> %0,240 <vscale x 1 x i16> %1,241 <vscale x 1 x i16> %2,242 <vscale x 1 x i1> %3,243 iXLen %4, iXLen 1)244 245 ret <vscale x 1 x i32> %a246}247 248define <vscale x 2 x i32> @intrinsic_vwsub_vv_nxv2i32_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, iXLen %2) nounwind {249; CHECK-LABEL: intrinsic_vwsub_vv_nxv2i32_nxv2i16_nxv2i16:250; CHECK: # %bb.0: # %entry251; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma252; CHECK-NEXT: vwsub.vv v10, v8, v9253; CHECK-NEXT: vmv1r.v v8, v10254; CHECK-NEXT: ret255entry:256 %a = call <vscale x 2 x i32> @llvm.riscv.vwsub.nxv2i32.nxv2i16.nxv2i16(257 <vscale x 2 x i32> poison,258 <vscale x 2 x i16> %0,259 <vscale x 2 x i16> %1,260 iXLen %2)261 262 ret <vscale x 2 x i32> %a263}264 265define <vscale x 2 x i32> @intrinsic_vwsub_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 {266; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv2i32_nxv2i16_nxv2i16:267; CHECK: # %bb.0: # %entry268; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu269; CHECK-NEXT: vwsub.vv v8, v9, v10, v0.t270; CHECK-NEXT: ret271entry:272 %a = call <vscale x 2 x i32> @llvm.riscv.vwsub.mask.nxv2i32.nxv2i16.nxv2i16(273 <vscale x 2 x i32> %0,274 <vscale x 2 x i16> %1,275 <vscale x 2 x i16> %2,276 <vscale x 2 x i1> %3,277 iXLen %4, iXLen 1)278 279 ret <vscale x 2 x i32> %a280}281 282define <vscale x 4 x i32> @intrinsic_vwsub_vv_nxv4i32_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, iXLen %2) nounwind {283; CHECK-LABEL: intrinsic_vwsub_vv_nxv4i32_nxv4i16_nxv4i16:284; CHECK: # %bb.0: # %entry285; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma286; CHECK-NEXT: vmv1r.v v10, v9287; CHECK-NEXT: vmv1r.v v11, v8288; CHECK-NEXT: vwsub.vv v8, v11, v10289; CHECK-NEXT: ret290entry:291 %a = call <vscale x 4 x i32> @llvm.riscv.vwsub.nxv4i32.nxv4i16.nxv4i16(292 <vscale x 4 x i32> poison,293 <vscale x 4 x i16> %0,294 <vscale x 4 x i16> %1,295 iXLen %2)296 297 ret <vscale x 4 x i32> %a298}299 300define <vscale x 4 x i32> @intrinsic_vwsub_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 {301; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv4i32_nxv4i16_nxv4i16:302; CHECK: # %bb.0: # %entry303; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu304; CHECK-NEXT: vwsub.vv v8, v10, v11, v0.t305; CHECK-NEXT: ret306entry:307 %a = call <vscale x 4 x i32> @llvm.riscv.vwsub.mask.nxv4i32.nxv4i16.nxv4i16(308 <vscale x 4 x i32> %0,309 <vscale x 4 x i16> %1,310 <vscale x 4 x i16> %2,311 <vscale x 4 x i1> %3,312 iXLen %4, iXLen 1)313 314 ret <vscale x 4 x i32> %a315}316 317define <vscale x 8 x i32> @intrinsic_vwsub_vv_nxv8i32_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, iXLen %2) nounwind {318; CHECK-LABEL: intrinsic_vwsub_vv_nxv8i32_nxv8i16_nxv8i16:319; CHECK: # %bb.0: # %entry320; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma321; CHECK-NEXT: vmv2r.v v12, v10322; CHECK-NEXT: vmv2r.v v14, v8323; CHECK-NEXT: vwsub.vv v8, v14, v12324; CHECK-NEXT: ret325entry:326 %a = call <vscale x 8 x i32> @llvm.riscv.vwsub.nxv8i32.nxv8i16.nxv8i16(327 <vscale x 8 x i32> poison,328 <vscale x 8 x i16> %0,329 <vscale x 8 x i16> %1,330 iXLen %2)331 332 ret <vscale x 8 x i32> %a333}334 335define <vscale x 8 x i32> @intrinsic_vwsub_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 {336; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv8i32_nxv8i16_nxv8i16:337; CHECK: # %bb.0: # %entry338; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu339; CHECK-NEXT: vwsub.vv v8, v12, v14, v0.t340; CHECK-NEXT: ret341entry:342 %a = call <vscale x 8 x i32> @llvm.riscv.vwsub.mask.nxv8i32.nxv8i16.nxv8i16(343 <vscale x 8 x i32> %0,344 <vscale x 8 x i16> %1,345 <vscale x 8 x i16> %2,346 <vscale x 8 x i1> %3,347 iXLen %4, iXLen 1)348 349 ret <vscale x 8 x i32> %a350}351 352define <vscale x 16 x i32> @intrinsic_vwsub_vv_nxv16i32_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, iXLen %2) nounwind {353; CHECK-LABEL: intrinsic_vwsub_vv_nxv16i32_nxv16i16_nxv16i16:354; CHECK: # %bb.0: # %entry355; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma356; CHECK-NEXT: vmv4r.v v16, v12357; CHECK-NEXT: vmv4r.v v20, v8358; CHECK-NEXT: vwsub.vv v8, v20, v16359; CHECK-NEXT: ret360entry:361 %a = call <vscale x 16 x i32> @llvm.riscv.vwsub.nxv16i32.nxv16i16.nxv16i16(362 <vscale x 16 x i32> poison,363 <vscale x 16 x i16> %0,364 <vscale x 16 x i16> %1,365 iXLen %2)366 367 ret <vscale x 16 x i32> %a368}369 370define <vscale x 16 x i32> @intrinsic_vwsub_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 {371; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv16i32_nxv16i16_nxv16i16:372; CHECK: # %bb.0: # %entry373; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu374; CHECK-NEXT: vwsub.vv v8, v16, v20, v0.t375; CHECK-NEXT: ret376entry:377 %a = call <vscale x 16 x i32> @llvm.riscv.vwsub.mask.nxv16i32.nxv16i16.nxv16i16(378 <vscale x 16 x i32> %0,379 <vscale x 16 x i16> %1,380 <vscale x 16 x i16> %2,381 <vscale x 16 x i1> %3,382 iXLen %4, iXLen 1)383 384 ret <vscale x 16 x i32> %a385}386 387define <vscale x 1 x i64> @intrinsic_vwsub_vv_nxv1i64_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, iXLen %2) nounwind {388; CHECK-LABEL: intrinsic_vwsub_vv_nxv1i64_nxv1i32_nxv1i32:389; CHECK: # %bb.0: # %entry390; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma391; CHECK-NEXT: vwsub.vv v10, v8, v9392; CHECK-NEXT: vmv1r.v v8, v10393; CHECK-NEXT: ret394entry:395 %a = call <vscale x 1 x i64> @llvm.riscv.vwsub.nxv1i64.nxv1i32.nxv1i32(396 <vscale x 1 x i64> poison,397 <vscale x 1 x i32> %0,398 <vscale x 1 x i32> %1,399 iXLen %2)400 401 ret <vscale x 1 x i64> %a402}403 404define <vscale x 1 x i64> @intrinsic_vwsub_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 {405; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv1i64_nxv1i32_nxv1i32:406; CHECK: # %bb.0: # %entry407; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu408; CHECK-NEXT: vwsub.vv v8, v9, v10, v0.t409; CHECK-NEXT: ret410entry:411 %a = call <vscale x 1 x i64> @llvm.riscv.vwsub.mask.nxv1i64.nxv1i32.nxv1i32(412 <vscale x 1 x i64> %0,413 <vscale x 1 x i32> %1,414 <vscale x 1 x i32> %2,415 <vscale x 1 x i1> %3,416 iXLen %4, iXLen 1)417 418 ret <vscale x 1 x i64> %a419}420 421define <vscale x 2 x i64> @intrinsic_vwsub_vv_nxv2i64_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, iXLen %2) nounwind {422; CHECK-LABEL: intrinsic_vwsub_vv_nxv2i64_nxv2i32_nxv2i32:423; CHECK: # %bb.0: # %entry424; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma425; CHECK-NEXT: vmv1r.v v10, v9426; CHECK-NEXT: vmv1r.v v11, v8427; CHECK-NEXT: vwsub.vv v8, v11, v10428; CHECK-NEXT: ret429entry:430 %a = call <vscale x 2 x i64> @llvm.riscv.vwsub.nxv2i64.nxv2i32.nxv2i32(431 <vscale x 2 x i64> poison,432 <vscale x 2 x i32> %0,433 <vscale x 2 x i32> %1,434 iXLen %2)435 436 ret <vscale x 2 x i64> %a437}438 439define <vscale x 2 x i64> @intrinsic_vwsub_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 {440; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv2i64_nxv2i32_nxv2i32:441; CHECK: # %bb.0: # %entry442; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu443; CHECK-NEXT: vwsub.vv v8, v10, v11, v0.t444; CHECK-NEXT: ret445entry:446 %a = call <vscale x 2 x i64> @llvm.riscv.vwsub.mask.nxv2i64.nxv2i32.nxv2i32(447 <vscale x 2 x i64> %0,448 <vscale x 2 x i32> %1,449 <vscale x 2 x i32> %2,450 <vscale x 2 x i1> %3,451 iXLen %4, iXLen 1)452 453 ret <vscale x 2 x i64> %a454}455 456define <vscale x 4 x i64> @intrinsic_vwsub_vv_nxv4i64_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, iXLen %2) nounwind {457; CHECK-LABEL: intrinsic_vwsub_vv_nxv4i64_nxv4i32_nxv4i32:458; CHECK: # %bb.0: # %entry459; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma460; CHECK-NEXT: vmv2r.v v12, v10461; CHECK-NEXT: vmv2r.v v14, v8462; CHECK-NEXT: vwsub.vv v8, v14, v12463; CHECK-NEXT: ret464entry:465 %a = call <vscale x 4 x i64> @llvm.riscv.vwsub.nxv4i64.nxv4i32.nxv4i32(466 <vscale x 4 x i64> poison,467 <vscale x 4 x i32> %0,468 <vscale x 4 x i32> %1,469 iXLen %2)470 471 ret <vscale x 4 x i64> %a472}473 474define <vscale x 4 x i64> @intrinsic_vwsub_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 {475; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv4i64_nxv4i32_nxv4i32:476; CHECK: # %bb.0: # %entry477; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu478; CHECK-NEXT: vwsub.vv v8, v12, v14, v0.t479; CHECK-NEXT: ret480entry:481 %a = call <vscale x 4 x i64> @llvm.riscv.vwsub.mask.nxv4i64.nxv4i32.nxv4i32(482 <vscale x 4 x i64> %0,483 <vscale x 4 x i32> %1,484 <vscale x 4 x i32> %2,485 <vscale x 4 x i1> %3,486 iXLen %4, iXLen 1)487 488 ret <vscale x 4 x i64> %a489}490 491define <vscale x 8 x i64> @intrinsic_vwsub_vv_nxv8i64_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, iXLen %2) nounwind {492; CHECK-LABEL: intrinsic_vwsub_vv_nxv8i64_nxv8i32_nxv8i32:493; CHECK: # %bb.0: # %entry494; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma495; CHECK-NEXT: vmv4r.v v16, v12496; CHECK-NEXT: vmv4r.v v20, v8497; CHECK-NEXT: vwsub.vv v8, v20, v16498; CHECK-NEXT: ret499entry:500 %a = call <vscale x 8 x i64> @llvm.riscv.vwsub.nxv8i64.nxv8i32.nxv8i32(501 <vscale x 8 x i64> poison,502 <vscale x 8 x i32> %0,503 <vscale x 8 x i32> %1,504 iXLen %2)505 506 ret <vscale x 8 x i64> %a507}508 509define <vscale x 8 x i64> @intrinsic_vwsub_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 {510; CHECK-LABEL: intrinsic_vwsub_mask_vv_nxv8i64_nxv8i32_nxv8i32:511; CHECK: # %bb.0: # %entry512; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu513; CHECK-NEXT: vwsub.vv v8, v16, v20, v0.t514; CHECK-NEXT: ret515entry:516 %a = call <vscale x 8 x i64> @llvm.riscv.vwsub.mask.nxv8i64.nxv8i32.nxv8i32(517 <vscale x 8 x i64> %0,518 <vscale x 8 x i32> %1,519 <vscale x 8 x i32> %2,520 <vscale x 8 x i1> %3,521 iXLen %4, iXLen 1)522 523 ret <vscale x 8 x i64> %a524}525 526define <vscale x 1 x i16> @intrinsic_vwsub_vx_nxv1i16_nxv1i8_i8(<vscale x 1 x i8> %0, i8 %1, iXLen %2) nounwind {527; CHECK-LABEL: intrinsic_vwsub_vx_nxv1i16_nxv1i8_i8:528; CHECK: # %bb.0: # %entry529; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma530; CHECK-NEXT: vwsub.vx v9, v8, a0531; CHECK-NEXT: vmv1r.v v8, v9532; CHECK-NEXT: ret533entry:534 %a = call <vscale x 1 x i16> @llvm.riscv.vwsub.nxv1i16.nxv1i8.i8(535 <vscale x 1 x i16> poison,536 <vscale x 1 x i8> %0,537 i8 %1,538 iXLen %2)539 540 ret <vscale x 1 x i16> %a541}542 543define <vscale x 1 x i16> @intrinsic_vwsub_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 {544; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv1i16_nxv1i8_i8:545; CHECK: # %bb.0: # %entry546; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu547; CHECK-NEXT: vwsub.vx v8, v9, a0, v0.t548; CHECK-NEXT: ret549entry:550 %a = call <vscale x 1 x i16> @llvm.riscv.vwsub.mask.nxv1i16.nxv1i8.i8(551 <vscale x 1 x i16> %0,552 <vscale x 1 x i8> %1,553 i8 %2,554 <vscale x 1 x i1> %3,555 iXLen %4, iXLen 1)556 557 ret <vscale x 1 x i16> %a558}559 560define <vscale x 2 x i16> @intrinsic_vwsub_vx_nxv2i16_nxv2i8_i8(<vscale x 2 x i8> %0, i8 %1, iXLen %2) nounwind {561; CHECK-LABEL: intrinsic_vwsub_vx_nxv2i16_nxv2i8_i8:562; CHECK: # %bb.0: # %entry563; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma564; CHECK-NEXT: vwsub.vx v9, v8, a0565; CHECK-NEXT: vmv1r.v v8, v9566; CHECK-NEXT: ret567entry:568 %a = call <vscale x 2 x i16> @llvm.riscv.vwsub.nxv2i16.nxv2i8.i8(569 <vscale x 2 x i16> poison,570 <vscale x 2 x i8> %0,571 i8 %1,572 iXLen %2)573 574 ret <vscale x 2 x i16> %a575}576 577define <vscale x 2 x i16> @intrinsic_vwsub_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 {578; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv2i16_nxv2i8_i8:579; CHECK: # %bb.0: # %entry580; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu581; CHECK-NEXT: vwsub.vx v8, v9, a0, v0.t582; CHECK-NEXT: ret583entry:584 %a = call <vscale x 2 x i16> @llvm.riscv.vwsub.mask.nxv2i16.nxv2i8.i8(585 <vscale x 2 x i16> %0,586 <vscale x 2 x i8> %1,587 i8 %2,588 <vscale x 2 x i1> %3,589 iXLen %4, iXLen 1)590 591 ret <vscale x 2 x i16> %a592}593 594define <vscale x 4 x i16> @intrinsic_vwsub_vx_nxv4i16_nxv4i8_i8(<vscale x 4 x i8> %0, i8 %1, iXLen %2) nounwind {595; CHECK-LABEL: intrinsic_vwsub_vx_nxv4i16_nxv4i8_i8:596; CHECK: # %bb.0: # %entry597; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma598; CHECK-NEXT: vwsub.vx v9, v8, a0599; CHECK-NEXT: vmv1r.v v8, v9600; CHECK-NEXT: ret601entry:602 %a = call <vscale x 4 x i16> @llvm.riscv.vwsub.nxv4i16.nxv4i8.i8(603 <vscale x 4 x i16> poison,604 <vscale x 4 x i8> %0,605 i8 %1,606 iXLen %2)607 608 ret <vscale x 4 x i16> %a609}610 611define <vscale x 4 x i16> @intrinsic_vwsub_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 {612; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv4i16_nxv4i8_i8:613; CHECK: # %bb.0: # %entry614; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu615; CHECK-NEXT: vwsub.vx v8, v9, a0, v0.t616; CHECK-NEXT: ret617entry:618 %a = call <vscale x 4 x i16> @llvm.riscv.vwsub.mask.nxv4i16.nxv4i8.i8(619 <vscale x 4 x i16> %0,620 <vscale x 4 x i8> %1,621 i8 %2,622 <vscale x 4 x i1> %3,623 iXLen %4, iXLen 1)624 625 ret <vscale x 4 x i16> %a626}627 628define <vscale x 8 x i16> @intrinsic_vwsub_vx_nxv8i16_nxv8i8_i8(<vscale x 8 x i8> %0, i8 %1, iXLen %2) nounwind {629; CHECK-LABEL: intrinsic_vwsub_vx_nxv8i16_nxv8i8_i8:630; CHECK: # %bb.0: # %entry631; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma632; CHECK-NEXT: vmv1r.v v10, v8633; CHECK-NEXT: vwsub.vx v8, v10, a0634; CHECK-NEXT: ret635entry:636 %a = call <vscale x 8 x i16> @llvm.riscv.vwsub.nxv8i16.nxv8i8.i8(637 <vscale x 8 x i16> poison,638 <vscale x 8 x i8> %0,639 i8 %1,640 iXLen %2)641 642 ret <vscale x 8 x i16> %a643}644 645define <vscale x 8 x i16> @intrinsic_vwsub_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 {646; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv8i16_nxv8i8_i8:647; CHECK: # %bb.0: # %entry648; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu649; CHECK-NEXT: vwsub.vx v8, v10, a0, v0.t650; CHECK-NEXT: ret651entry:652 %a = call <vscale x 8 x i16> @llvm.riscv.vwsub.mask.nxv8i16.nxv8i8.i8(653 <vscale x 8 x i16> %0,654 <vscale x 8 x i8> %1,655 i8 %2,656 <vscale x 8 x i1> %3,657 iXLen %4, iXLen 1)658 659 ret <vscale x 8 x i16> %a660}661 662define <vscale x 16 x i16> @intrinsic_vwsub_vx_nxv16i16_nxv16i8_i8(<vscale x 16 x i8> %0, i8 %1, iXLen %2) nounwind {663; CHECK-LABEL: intrinsic_vwsub_vx_nxv16i16_nxv16i8_i8:664; CHECK: # %bb.0: # %entry665; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma666; CHECK-NEXT: vmv2r.v v12, v8667; CHECK-NEXT: vwsub.vx v8, v12, a0668; CHECK-NEXT: ret669entry:670 %a = call <vscale x 16 x i16> @llvm.riscv.vwsub.nxv16i16.nxv16i8.i8(671 <vscale x 16 x i16> poison,672 <vscale x 16 x i8> %0,673 i8 %1,674 iXLen %2)675 676 ret <vscale x 16 x i16> %a677}678 679define <vscale x 16 x i16> @intrinsic_vwsub_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 {680; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv16i16_nxv16i8_i8:681; CHECK: # %bb.0: # %entry682; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu683; CHECK-NEXT: vwsub.vx v8, v12, a0, v0.t684; CHECK-NEXT: ret685entry:686 %a = call <vscale x 16 x i16> @llvm.riscv.vwsub.mask.nxv16i16.nxv16i8.i8(687 <vscale x 16 x i16> %0,688 <vscale x 16 x i8> %1,689 i8 %2,690 <vscale x 16 x i1> %3,691 iXLen %4, iXLen 1)692 693 ret <vscale x 16 x i16> %a694}695 696define <vscale x 32 x i16> @intrinsic_vwsub_vx_nxv32i16_nxv32i8_i8(<vscale x 32 x i8> %0, i8 %1, iXLen %2) nounwind {697; CHECK-LABEL: intrinsic_vwsub_vx_nxv32i16_nxv32i8_i8:698; CHECK: # %bb.0: # %entry699; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma700; CHECK-NEXT: vmv4r.v v16, v8701; CHECK-NEXT: vwsub.vx v8, v16, a0702; CHECK-NEXT: ret703entry:704 %a = call <vscale x 32 x i16> @llvm.riscv.vwsub.nxv32i16.nxv32i8.i8(705 <vscale x 32 x i16> poison,706 <vscale x 32 x i8> %0,707 i8 %1,708 iXLen %2)709 710 ret <vscale x 32 x i16> %a711}712 713define <vscale x 32 x i16> @intrinsic_vwsub_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 {714; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv32i16_nxv32i8_i8:715; CHECK: # %bb.0: # %entry716; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu717; CHECK-NEXT: vwsub.vx v8, v16, a0, v0.t718; CHECK-NEXT: ret719entry:720 %a = call <vscale x 32 x i16> @llvm.riscv.vwsub.mask.nxv32i16.nxv32i8.i8(721 <vscale x 32 x i16> %0,722 <vscale x 32 x i8> %1,723 i8 %2,724 <vscale x 32 x i1> %3,725 iXLen %4, iXLen 1)726 727 ret <vscale x 32 x i16> %a728}729 730define <vscale x 1 x i32> @intrinsic_vwsub_vx_nxv1i32_nxv1i16_i16(<vscale x 1 x i16> %0, i16 %1, iXLen %2) nounwind {731; CHECK-LABEL: intrinsic_vwsub_vx_nxv1i32_nxv1i16_i16:732; CHECK: # %bb.0: # %entry733; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma734; CHECK-NEXT: vwsub.vx v9, v8, a0735; CHECK-NEXT: vmv1r.v v8, v9736; CHECK-NEXT: ret737entry:738 %a = call <vscale x 1 x i32> @llvm.riscv.vwsub.nxv1i32.nxv1i16.i16(739 <vscale x 1 x i32> poison,740 <vscale x 1 x i16> %0,741 i16 %1,742 iXLen %2)743 744 ret <vscale x 1 x i32> %a745}746 747define <vscale x 1 x i32> @intrinsic_vwsub_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 {748; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv1i32_nxv1i16_i16:749; CHECK: # %bb.0: # %entry750; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu751; CHECK-NEXT: vwsub.vx v8, v9, a0, v0.t752; CHECK-NEXT: ret753entry:754 %a = call <vscale x 1 x i32> @llvm.riscv.vwsub.mask.nxv1i32.nxv1i16.i16(755 <vscale x 1 x i32> %0,756 <vscale x 1 x i16> %1,757 i16 %2,758 <vscale x 1 x i1> %3,759 iXLen %4, iXLen 1)760 761 ret <vscale x 1 x i32> %a762}763 764define <vscale x 2 x i32> @intrinsic_vwsub_vx_nxv2i32_nxv2i16_i16(<vscale x 2 x i16> %0, i16 %1, iXLen %2) nounwind {765; CHECK-LABEL: intrinsic_vwsub_vx_nxv2i32_nxv2i16_i16:766; CHECK: # %bb.0: # %entry767; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma768; CHECK-NEXT: vwsub.vx v9, v8, a0769; CHECK-NEXT: vmv1r.v v8, v9770; CHECK-NEXT: ret771entry:772 %a = call <vscale x 2 x i32> @llvm.riscv.vwsub.nxv2i32.nxv2i16.i16(773 <vscale x 2 x i32> poison,774 <vscale x 2 x i16> %0,775 i16 %1,776 iXLen %2)777 778 ret <vscale x 2 x i32> %a779}780 781define <vscale x 2 x i32> @intrinsic_vwsub_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 {782; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv2i32_nxv2i16_i16:783; CHECK: # %bb.0: # %entry784; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu785; CHECK-NEXT: vwsub.vx v8, v9, a0, v0.t786; CHECK-NEXT: ret787entry:788 %a = call <vscale x 2 x i32> @llvm.riscv.vwsub.mask.nxv2i32.nxv2i16.i16(789 <vscale x 2 x i32> %0,790 <vscale x 2 x i16> %1,791 i16 %2,792 <vscale x 2 x i1> %3,793 iXLen %4, iXLen 1)794 795 ret <vscale x 2 x i32> %a796}797 798define <vscale x 4 x i32> @intrinsic_vwsub_vx_nxv4i32_nxv4i16_i16(<vscale x 4 x i16> %0, i16 %1, iXLen %2) nounwind {799; CHECK-LABEL: intrinsic_vwsub_vx_nxv4i32_nxv4i16_i16:800; CHECK: # %bb.0: # %entry801; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma802; CHECK-NEXT: vmv1r.v v10, v8803; CHECK-NEXT: vwsub.vx v8, v10, a0804; CHECK-NEXT: ret805entry:806 %a = call <vscale x 4 x i32> @llvm.riscv.vwsub.nxv4i32.nxv4i16.i16(807 <vscale x 4 x i32> poison,808 <vscale x 4 x i16> %0,809 i16 %1,810 iXLen %2)811 812 ret <vscale x 4 x i32> %a813}814 815define <vscale x 4 x i32> @intrinsic_vwsub_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 {816; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv4i32_nxv4i16_i16:817; CHECK: # %bb.0: # %entry818; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu819; CHECK-NEXT: vwsub.vx v8, v10, a0, v0.t820; CHECK-NEXT: ret821entry:822 %a = call <vscale x 4 x i32> @llvm.riscv.vwsub.mask.nxv4i32.nxv4i16.i16(823 <vscale x 4 x i32> %0,824 <vscale x 4 x i16> %1,825 i16 %2,826 <vscale x 4 x i1> %3,827 iXLen %4, iXLen 1)828 829 ret <vscale x 4 x i32> %a830}831 832define <vscale x 8 x i32> @intrinsic_vwsub_vx_nxv8i32_nxv8i16_i16(<vscale x 8 x i16> %0, i16 %1, iXLen %2) nounwind {833; CHECK-LABEL: intrinsic_vwsub_vx_nxv8i32_nxv8i16_i16:834; CHECK: # %bb.0: # %entry835; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma836; CHECK-NEXT: vmv2r.v v12, v8837; CHECK-NEXT: vwsub.vx v8, v12, a0838; CHECK-NEXT: ret839entry:840 %a = call <vscale x 8 x i32> @llvm.riscv.vwsub.nxv8i32.nxv8i16.i16(841 <vscale x 8 x i32> poison,842 <vscale x 8 x i16> %0,843 i16 %1,844 iXLen %2)845 846 ret <vscale x 8 x i32> %a847}848 849define <vscale x 8 x i32> @intrinsic_vwsub_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 {850; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv8i32_nxv8i16_i16:851; CHECK: # %bb.0: # %entry852; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu853; CHECK-NEXT: vwsub.vx v8, v12, a0, v0.t854; CHECK-NEXT: ret855entry:856 %a = call <vscale x 8 x i32> @llvm.riscv.vwsub.mask.nxv8i32.nxv8i16.i16(857 <vscale x 8 x i32> %0,858 <vscale x 8 x i16> %1,859 i16 %2,860 <vscale x 8 x i1> %3,861 iXLen %4, iXLen 1)862 863 ret <vscale x 8 x i32> %a864}865 866define <vscale x 16 x i32> @intrinsic_vwsub_vx_nxv16i32_nxv16i16_i16(<vscale x 16 x i16> %0, i16 %1, iXLen %2) nounwind {867; CHECK-LABEL: intrinsic_vwsub_vx_nxv16i32_nxv16i16_i16:868; CHECK: # %bb.0: # %entry869; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma870; CHECK-NEXT: vmv4r.v v16, v8871; CHECK-NEXT: vwsub.vx v8, v16, a0872; CHECK-NEXT: ret873entry:874 %a = call <vscale x 16 x i32> @llvm.riscv.vwsub.nxv16i32.nxv16i16.i16(875 <vscale x 16 x i32> poison,876 <vscale x 16 x i16> %0,877 i16 %1,878 iXLen %2)879 880 ret <vscale x 16 x i32> %a881}882 883define <vscale x 16 x i32> @intrinsic_vwsub_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 {884; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv16i32_nxv16i16_i16:885; CHECK: # %bb.0: # %entry886; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu887; CHECK-NEXT: vwsub.vx v8, v16, a0, v0.t888; CHECK-NEXT: ret889entry:890 %a = call <vscale x 16 x i32> @llvm.riscv.vwsub.mask.nxv16i32.nxv16i16.i16(891 <vscale x 16 x i32> %0,892 <vscale x 16 x i16> %1,893 i16 %2,894 <vscale x 16 x i1> %3,895 iXLen %4, iXLen 1)896 897 ret <vscale x 16 x i32> %a898}899 900define <vscale x 1 x i64> @intrinsic_vwsub_vx_nxv1i64_nxv1i32_i32(<vscale x 1 x i32> %0, i32 %1, iXLen %2) nounwind {901; CHECK-LABEL: intrinsic_vwsub_vx_nxv1i64_nxv1i32_i32:902; CHECK: # %bb.0: # %entry903; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma904; CHECK-NEXT: vwsub.vx v9, v8, a0905; CHECK-NEXT: vmv1r.v v8, v9906; CHECK-NEXT: ret907entry:908 %a = call <vscale x 1 x i64> @llvm.riscv.vwsub.nxv1i64.nxv1i32.i32(909 <vscale x 1 x i64> poison,910 <vscale x 1 x i32> %0,911 i32 %1,912 iXLen %2)913 914 ret <vscale x 1 x i64> %a915}916 917define <vscale x 1 x i64> @intrinsic_vwsub_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 {918; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv1i64_nxv1i32_i32:919; CHECK: # %bb.0: # %entry920; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu921; CHECK-NEXT: vwsub.vx v8, v9, a0, v0.t922; CHECK-NEXT: ret923entry:924 %a = call <vscale x 1 x i64> @llvm.riscv.vwsub.mask.nxv1i64.nxv1i32.i32(925 <vscale x 1 x i64> %0,926 <vscale x 1 x i32> %1,927 i32 %2,928 <vscale x 1 x i1> %3,929 iXLen %4, iXLen 1)930 931 ret <vscale x 1 x i64> %a932}933 934define <vscale x 2 x i64> @intrinsic_vwsub_vx_nxv2i64_nxv2i32_i32(<vscale x 2 x i32> %0, i32 %1, iXLen %2) nounwind {935; CHECK-LABEL: intrinsic_vwsub_vx_nxv2i64_nxv2i32_i32:936; CHECK: # %bb.0: # %entry937; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma938; CHECK-NEXT: vmv1r.v v10, v8939; CHECK-NEXT: vwsub.vx v8, v10, a0940; CHECK-NEXT: ret941entry:942 %a = call <vscale x 2 x i64> @llvm.riscv.vwsub.nxv2i64.nxv2i32.i32(943 <vscale x 2 x i64> poison,944 <vscale x 2 x i32> %0,945 i32 %1,946 iXLen %2)947 948 ret <vscale x 2 x i64> %a949}950 951define <vscale x 2 x i64> @intrinsic_vwsub_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 {952; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv2i64_nxv2i32_i32:953; CHECK: # %bb.0: # %entry954; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu955; CHECK-NEXT: vwsub.vx v8, v10, a0, v0.t956; CHECK-NEXT: ret957entry:958 %a = call <vscale x 2 x i64> @llvm.riscv.vwsub.mask.nxv2i64.nxv2i32.i32(959 <vscale x 2 x i64> %0,960 <vscale x 2 x i32> %1,961 i32 %2,962 <vscale x 2 x i1> %3,963 iXLen %4, iXLen 1)964 965 ret <vscale x 2 x i64> %a966}967 968define <vscale x 4 x i64> @intrinsic_vwsub_vx_nxv4i64_nxv4i32_i32(<vscale x 4 x i32> %0, i32 %1, iXLen %2) nounwind {969; CHECK-LABEL: intrinsic_vwsub_vx_nxv4i64_nxv4i32_i32:970; CHECK: # %bb.0: # %entry971; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma972; CHECK-NEXT: vmv2r.v v12, v8973; CHECK-NEXT: vwsub.vx v8, v12, a0974; CHECK-NEXT: ret975entry:976 %a = call <vscale x 4 x i64> @llvm.riscv.vwsub.nxv4i64.nxv4i32.i32(977 <vscale x 4 x i64> poison,978 <vscale x 4 x i32> %0,979 i32 %1,980 iXLen %2)981 982 ret <vscale x 4 x i64> %a983}984 985define <vscale x 4 x i64> @intrinsic_vwsub_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 {986; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv4i64_nxv4i32_i32:987; CHECK: # %bb.0: # %entry988; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu989; CHECK-NEXT: vwsub.vx v8, v12, a0, v0.t990; CHECK-NEXT: ret991entry:992 %a = call <vscale x 4 x i64> @llvm.riscv.vwsub.mask.nxv4i64.nxv4i32.i32(993 <vscale x 4 x i64> %0,994 <vscale x 4 x i32> %1,995 i32 %2,996 <vscale x 4 x i1> %3,997 iXLen %4, iXLen 1)998 999 ret <vscale x 4 x i64> %a1000}1001 1002define <vscale x 8 x i64> @intrinsic_vwsub_vx_nxv8i64_nxv8i32_i32(<vscale x 8 x i32> %0, i32 %1, iXLen %2) nounwind {1003; CHECK-LABEL: intrinsic_vwsub_vx_nxv8i64_nxv8i32_i32:1004; CHECK: # %bb.0: # %entry1005; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma1006; CHECK-NEXT: vmv4r.v v16, v81007; CHECK-NEXT: vwsub.vx v8, v16, a01008; CHECK-NEXT: ret1009entry:1010 %a = call <vscale x 8 x i64> @llvm.riscv.vwsub.nxv8i64.nxv8i32.i32(1011 <vscale x 8 x i64> poison,1012 <vscale x 8 x i32> %0,1013 i32 %1,1014 iXLen %2)1015 1016 ret <vscale x 8 x i64> %a1017}1018 1019define <vscale x 8 x i64> @intrinsic_vwsub_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 {1020; CHECK-LABEL: intrinsic_vwsub_mask_vx_nxv8i64_nxv8i32_i32:1021; CHECK: # %bb.0: # %entry1022; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu1023; CHECK-NEXT: vwsub.vx v8, v16, a0, v0.t1024; CHECK-NEXT: ret1025entry:1026 %a = call <vscale x 8 x i64> @llvm.riscv.vwsub.mask.nxv8i64.nxv8i32.i32(1027 <vscale x 8 x i64> %0,1028 <vscale x 8 x i32> %1,1029 i32 %2,1030 <vscale x 8 x i1> %3,1031 iXLen %4, iXLen 1)1032 1033 ret <vscale x 8 x i64> %a1034}1035