brintos

brintos / llvm-project-archived public Read only

0
0
Text · 81.3 KiB · 0ac2ef7 Raw
1772 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \3; RUN:   | FileCheck %s --check-prefixes=CHECK,RV324; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \5; RUN:   | FileCheck %s --check-prefixes=CHECK,RV646 7define <vscale x 8 x i7> @vssub_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {8; CHECK-LABEL: vssub_vx_nxv8i7:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma11; CHECK-NEXT:    vadd.vv v8, v8, v812; CHECK-NEXT:    vsra.vi v8, v8, 113; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t14; CHECK-NEXT:    li a0, 6315; CHECK-NEXT:    vmin.vx v8, v8, a0, v0.t16; CHECK-NEXT:    li a0, 19217; CHECK-NEXT:    vmax.vx v8, v8, a0, v0.t18; CHECK-NEXT:    ret19  %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 020  %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer21  %v = call <vscale x 8 x i7> @llvm.vp.ssub.sat.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)22  ret <vscale x 8 x i7> %v23}24 25define <vscale x 1 x i8> @vssub_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {26; CHECK-LABEL: vssub_vv_nxv1i8:27; CHECK:       # %bb.0:28; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma29; CHECK-NEXT:    vssub.vv v8, v8, v9, v0.t30; CHECK-NEXT:    ret31  %v = call <vscale x 1 x i8> @llvm.vp.ssub.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)32  ret <vscale x 1 x i8> %v33}34 35define <vscale x 1 x i8> @vssub_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {36; CHECK-LABEL: vssub_vv_nxv1i8_unmasked:37; CHECK:       # %bb.0:38; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma39; CHECK-NEXT:    vssub.vv v8, v8, v940; CHECK-NEXT:    ret41  %v = call <vscale x 1 x i8> @llvm.vp.ssub.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)42  ret <vscale x 1 x i8> %v43}44 45define <vscale x 1 x i8> @vssub_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {46; CHECK-LABEL: vssub_vx_nxv1i8:47; CHECK:       # %bb.0:48; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma49; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t50; CHECK-NEXT:    ret51  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 052  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer53  %v = call <vscale x 1 x i8> @llvm.vp.ssub.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)54  ret <vscale x 1 x i8> %v55}56 57define <vscale x 1 x i8> @vssub_vx_nxv1i8_commute(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {58; CHECK-LABEL: vssub_vx_nxv1i8_commute:59; CHECK:       # %bb.0:60; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma61; CHECK-NEXT:    vmv.v.x v9, a062; CHECK-NEXT:    vssub.vv v8, v9, v8, v0.t63; CHECK-NEXT:    ret64  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 065  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer66  %v = call <vscale x 1 x i8> @llvm.vp.ssub.sat.nxv1i8(<vscale x 1 x i8> %vb, <vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 %evl)67  ret <vscale x 1 x i8> %v68}69 70define <vscale x 1 x i8> @vssub_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {71; CHECK-LABEL: vssub_vx_nxv1i8_unmasked:72; CHECK:       # %bb.0:73; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma74; CHECK-NEXT:    vssub.vx v8, v8, a075; CHECK-NEXT:    ret76  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 077  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer78  %v = call <vscale x 1 x i8> @llvm.vp.ssub.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)79  ret <vscale x 1 x i8> %v80}81 82define <vscale x 1 x i8> @vssub_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {83; CHECK-LABEL: vssub_vi_nxv1i8:84; CHECK:       # %bb.0:85; CHECK-NEXT:    li a1, -186; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma87; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t88; CHECK-NEXT:    ret89  %v = call <vscale x 1 x i8> @llvm.vp.ssub.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 -1), <vscale x 1 x i1> %m, i32 %evl)90  ret <vscale x 1 x i8> %v91}92 93define <vscale x 1 x i8> @vssub_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {94; CHECK-LABEL: vssub_vi_nxv1i8_unmasked:95; CHECK:       # %bb.0:96; CHECK-NEXT:    li a1, -197; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma98; CHECK-NEXT:    vssub.vx v8, v8, a199; CHECK-NEXT:    ret100  %v = call <vscale x 1 x i8> @llvm.vp.ssub.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)101  ret <vscale x 1 x i8> %v102}103 104define <vscale x 2 x i8> @vssub_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {105; CHECK-LABEL: vssub_vv_nxv2i8:106; CHECK:       # %bb.0:107; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma108; CHECK-NEXT:    vssub.vv v8, v8, v9, v0.t109; CHECK-NEXT:    ret110  %v = call <vscale x 2 x i8> @llvm.vp.ssub.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)111  ret <vscale x 2 x i8> %v112}113 114define <vscale x 2 x i8> @vssub_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {115; CHECK-LABEL: vssub_vv_nxv2i8_unmasked:116; CHECK:       # %bb.0:117; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma118; CHECK-NEXT:    vssub.vv v8, v8, v9119; CHECK-NEXT:    ret120  %v = call <vscale x 2 x i8> @llvm.vp.ssub.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)121  ret <vscale x 2 x i8> %v122}123 124define <vscale x 2 x i8> @vssub_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {125; CHECK-LABEL: vssub_vx_nxv2i8:126; CHECK:       # %bb.0:127; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma128; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t129; CHECK-NEXT:    ret130  %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0131  %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer132  %v = call <vscale x 2 x i8> @llvm.vp.ssub.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)133  ret <vscale x 2 x i8> %v134}135 136define <vscale x 2 x i8> @vssub_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {137; CHECK-LABEL: vssub_vx_nxv2i8_unmasked:138; CHECK:       # %bb.0:139; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma140; CHECK-NEXT:    vssub.vx v8, v8, a0141; CHECK-NEXT:    ret142  %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0143  %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer144  %v = call <vscale x 2 x i8> @llvm.vp.ssub.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)145  ret <vscale x 2 x i8> %v146}147 148define <vscale x 2 x i8> @vssub_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {149; CHECK-LABEL: vssub_vi_nxv2i8:150; CHECK:       # %bb.0:151; CHECK-NEXT:    li a1, -1152; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma153; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t154; CHECK-NEXT:    ret155  %v = call <vscale x 2 x i8> @llvm.vp.ssub.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 -1), <vscale x 2 x i1> %m, i32 %evl)156  ret <vscale x 2 x i8> %v157}158 159define <vscale x 2 x i8> @vssub_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {160; CHECK-LABEL: vssub_vi_nxv2i8_unmasked:161; CHECK:       # %bb.0:162; CHECK-NEXT:    li a1, -1163; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma164; CHECK-NEXT:    vssub.vx v8, v8, a1165; CHECK-NEXT:    ret166  %v = call <vscale x 2 x i8> @llvm.vp.ssub.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)167  ret <vscale x 2 x i8> %v168}169 170define <vscale x 3 x i8> @vssub_vv_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {171; CHECK-LABEL: vssub_vv_nxv3i8:172; CHECK:       # %bb.0:173; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma174; CHECK-NEXT:    vssub.vv v8, v8, v9, v0.t175; CHECK-NEXT:    ret176  %v = call <vscale x 3 x i8> @llvm.vp.ssub.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 %evl)177  ret <vscale x 3 x i8> %v178}179 180define <vscale x 3 x i8> @vssub_vv_nxv3i8_unmasked(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, i32 zeroext %evl) {181; CHECK-LABEL: vssub_vv_nxv3i8_unmasked:182; CHECK:       # %bb.0:183; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma184; CHECK-NEXT:    vssub.vv v8, v8, v9185; CHECK-NEXT:    ret186  %v = call <vscale x 3 x i8> @llvm.vp.ssub.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> splat (i1 true), i32 %evl)187  ret <vscale x 3 x i8> %v188}189 190define <vscale x 3 x i8> @vssub_vx_nxv3i8(<vscale x 3 x i8> %va, i8 %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {191; CHECK-LABEL: vssub_vx_nxv3i8:192; CHECK:       # %bb.0:193; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma194; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t195; CHECK-NEXT:    ret196  %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0197  %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer198  %v = call <vscale x 3 x i8> @llvm.vp.ssub.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> %m, i32 %evl)199  ret <vscale x 3 x i8> %v200}201 202define <vscale x 3 x i8> @vssub_vx_nxv3i8_unmasked(<vscale x 3 x i8> %va, i8 %b, i32 zeroext %evl) {203; CHECK-LABEL: vssub_vx_nxv3i8_unmasked:204; CHECK:       # %bb.0:205; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma206; CHECK-NEXT:    vssub.vx v8, v8, a0207; CHECK-NEXT:    ret208  %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0209  %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer210  %v = call <vscale x 3 x i8> @llvm.vp.ssub.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> splat (i1 true), i32 %evl)211  ret <vscale x 3 x i8> %v212}213 214define <vscale x 3 x i8> @vssub_vi_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i1> %m, i32 zeroext %evl) {215; CHECK-LABEL: vssub_vi_nxv3i8:216; CHECK:       # %bb.0:217; CHECK-NEXT:    li a1, -1218; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma219; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t220; CHECK-NEXT:    ret221  %v = call <vscale x 3 x i8> @llvm.vp.ssub.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> splat (i8 -1), <vscale x 3 x i1> %m, i32 %evl)222  ret <vscale x 3 x i8> %v223}224 225define <vscale x 3 x i8> @vssub_vi_nxv3i8_unmasked(<vscale x 3 x i8> %va, i32 zeroext %evl) {226; CHECK-LABEL: vssub_vi_nxv3i8_unmasked:227; CHECK:       # %bb.0:228; CHECK-NEXT:    li a1, -1229; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma230; CHECK-NEXT:    vssub.vx v8, v8, a1231; CHECK-NEXT:    ret232  %v = call <vscale x 3 x i8> @llvm.vp.ssub.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> splat (i8 -1), <vscale x 3 x i1> splat (i1 true), i32 %evl)233  ret <vscale x 3 x i8> %v234}235 236define <vscale x 4 x i8> @vssub_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {237; CHECK-LABEL: vssub_vv_nxv4i8:238; CHECK:       # %bb.0:239; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma240; CHECK-NEXT:    vssub.vv v8, v8, v9, v0.t241; CHECK-NEXT:    ret242  %v = call <vscale x 4 x i8> @llvm.vp.ssub.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)243  ret <vscale x 4 x i8> %v244}245 246define <vscale x 4 x i8> @vssub_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {247; CHECK-LABEL: vssub_vv_nxv4i8_unmasked:248; CHECK:       # %bb.0:249; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma250; CHECK-NEXT:    vssub.vv v8, v8, v9251; CHECK-NEXT:    ret252  %v = call <vscale x 4 x i8> @llvm.vp.ssub.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)253  ret <vscale x 4 x i8> %v254}255 256define <vscale x 4 x i8> @vssub_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {257; CHECK-LABEL: vssub_vx_nxv4i8:258; CHECK:       # %bb.0:259; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma260; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t261; CHECK-NEXT:    ret262  %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0263  %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer264  %v = call <vscale x 4 x i8> @llvm.vp.ssub.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)265  ret <vscale x 4 x i8> %v266}267 268define <vscale x 4 x i8> @vssub_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {269; CHECK-LABEL: vssub_vx_nxv4i8_unmasked:270; CHECK:       # %bb.0:271; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma272; CHECK-NEXT:    vssub.vx v8, v8, a0273; CHECK-NEXT:    ret274  %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0275  %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer276  %v = call <vscale x 4 x i8> @llvm.vp.ssub.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)277  ret <vscale x 4 x i8> %v278}279 280define <vscale x 4 x i8> @vssub_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {281; CHECK-LABEL: vssub_vi_nxv4i8:282; CHECK:       # %bb.0:283; CHECK-NEXT:    li a1, -1284; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma285; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t286; CHECK-NEXT:    ret287  %v = call <vscale x 4 x i8> @llvm.vp.ssub.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 -1), <vscale x 4 x i1> %m, i32 %evl)288  ret <vscale x 4 x i8> %v289}290 291define <vscale x 4 x i8> @vssub_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {292; CHECK-LABEL: vssub_vi_nxv4i8_unmasked:293; CHECK:       # %bb.0:294; CHECK-NEXT:    li a1, -1295; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma296; CHECK-NEXT:    vssub.vx v8, v8, a1297; CHECK-NEXT:    ret298  %v = call <vscale x 4 x i8> @llvm.vp.ssub.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)299  ret <vscale x 4 x i8> %v300}301 302define <vscale x 8 x i8> @vssub_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {303; CHECK-LABEL: vssub_vv_nxv8i8:304; CHECK:       # %bb.0:305; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma306; CHECK-NEXT:    vssub.vv v8, v8, v9, v0.t307; CHECK-NEXT:    ret308  %v = call <vscale x 8 x i8> @llvm.vp.ssub.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)309  ret <vscale x 8 x i8> %v310}311 312define <vscale x 8 x i8> @vssub_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {313; CHECK-LABEL: vssub_vv_nxv8i8_unmasked:314; CHECK:       # %bb.0:315; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma316; CHECK-NEXT:    vssub.vv v8, v8, v9317; CHECK-NEXT:    ret318  %v = call <vscale x 8 x i8> @llvm.vp.ssub.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)319  ret <vscale x 8 x i8> %v320}321 322define <vscale x 8 x i8> @vssub_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {323; CHECK-LABEL: vssub_vx_nxv8i8:324; CHECK:       # %bb.0:325; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma326; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t327; CHECK-NEXT:    ret328  %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0329  %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer330  %v = call <vscale x 8 x i8> @llvm.vp.ssub.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)331  ret <vscale x 8 x i8> %v332}333 334define <vscale x 8 x i8> @vssub_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {335; CHECK-LABEL: vssub_vx_nxv8i8_unmasked:336; CHECK:       # %bb.0:337; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma338; CHECK-NEXT:    vssub.vx v8, v8, a0339; CHECK-NEXT:    ret340  %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0341  %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer342  %v = call <vscale x 8 x i8> @llvm.vp.ssub.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)343  ret <vscale x 8 x i8> %v344}345 346define <vscale x 8 x i8> @vssub_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {347; CHECK-LABEL: vssub_vi_nxv8i8:348; CHECK:       # %bb.0:349; CHECK-NEXT:    li a1, -1350; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma351; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t352; CHECK-NEXT:    ret353  %v = call <vscale x 8 x i8> @llvm.vp.ssub.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 -1), <vscale x 8 x i1> %m, i32 %evl)354  ret <vscale x 8 x i8> %v355}356 357define <vscale x 8 x i8> @vssub_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {358; CHECK-LABEL: vssub_vi_nxv8i8_unmasked:359; CHECK:       # %bb.0:360; CHECK-NEXT:    li a1, -1361; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma362; CHECK-NEXT:    vssub.vx v8, v8, a1363; CHECK-NEXT:    ret364  %v = call <vscale x 8 x i8> @llvm.vp.ssub.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)365  ret <vscale x 8 x i8> %v366}367 368define <vscale x 16 x i8> @vssub_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {369; CHECK-LABEL: vssub_vv_nxv16i8:370; CHECK:       # %bb.0:371; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma372; CHECK-NEXT:    vssub.vv v8, v8, v10, v0.t373; CHECK-NEXT:    ret374  %v = call <vscale x 16 x i8> @llvm.vp.ssub.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)375  ret <vscale x 16 x i8> %v376}377 378define <vscale x 16 x i8> @vssub_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {379; CHECK-LABEL: vssub_vv_nxv16i8_unmasked:380; CHECK:       # %bb.0:381; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma382; CHECK-NEXT:    vssub.vv v8, v8, v10383; CHECK-NEXT:    ret384  %v = call <vscale x 16 x i8> @llvm.vp.ssub.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)385  ret <vscale x 16 x i8> %v386}387 388define <vscale x 16 x i8> @vssub_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {389; CHECK-LABEL: vssub_vx_nxv16i8:390; CHECK:       # %bb.0:391; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma392; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t393; CHECK-NEXT:    ret394  %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0395  %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer396  %v = call <vscale x 16 x i8> @llvm.vp.ssub.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)397  ret <vscale x 16 x i8> %v398}399 400define <vscale x 16 x i8> @vssub_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {401; CHECK-LABEL: vssub_vx_nxv16i8_unmasked:402; CHECK:       # %bb.0:403; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma404; CHECK-NEXT:    vssub.vx v8, v8, a0405; CHECK-NEXT:    ret406  %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0407  %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer408  %v = call <vscale x 16 x i8> @llvm.vp.ssub.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)409  ret <vscale x 16 x i8> %v410}411 412define <vscale x 16 x i8> @vssub_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {413; CHECK-LABEL: vssub_vi_nxv16i8:414; CHECK:       # %bb.0:415; CHECK-NEXT:    li a1, -1416; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma417; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t418; CHECK-NEXT:    ret419  %v = call <vscale x 16 x i8> @llvm.vp.ssub.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 -1), <vscale x 16 x i1> %m, i32 %evl)420  ret <vscale x 16 x i8> %v421}422 423define <vscale x 16 x i8> @vssub_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {424; CHECK-LABEL: vssub_vi_nxv16i8_unmasked:425; CHECK:       # %bb.0:426; CHECK-NEXT:    li a1, -1427; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma428; CHECK-NEXT:    vssub.vx v8, v8, a1429; CHECK-NEXT:    ret430  %v = call <vscale x 16 x i8> @llvm.vp.ssub.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)431  ret <vscale x 16 x i8> %v432}433 434define <vscale x 32 x i8> @vssub_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {435; CHECK-LABEL: vssub_vv_nxv32i8:436; CHECK:       # %bb.0:437; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma438; CHECK-NEXT:    vssub.vv v8, v8, v12, v0.t439; CHECK-NEXT:    ret440  %v = call <vscale x 32 x i8> @llvm.vp.ssub.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)441  ret <vscale x 32 x i8> %v442}443 444define <vscale x 32 x i8> @vssub_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {445; CHECK-LABEL: vssub_vv_nxv32i8_unmasked:446; CHECK:       # %bb.0:447; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma448; CHECK-NEXT:    vssub.vv v8, v8, v12449; CHECK-NEXT:    ret450  %v = call <vscale x 32 x i8> @llvm.vp.ssub.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)451  ret <vscale x 32 x i8> %v452}453 454define <vscale x 32 x i8> @vssub_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {455; CHECK-LABEL: vssub_vx_nxv32i8:456; CHECK:       # %bb.0:457; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma458; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t459; CHECK-NEXT:    ret460  %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0461  %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer462  %v = call <vscale x 32 x i8> @llvm.vp.ssub.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)463  ret <vscale x 32 x i8> %v464}465 466define <vscale x 32 x i8> @vssub_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {467; CHECK-LABEL: vssub_vx_nxv32i8_unmasked:468; CHECK:       # %bb.0:469; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma470; CHECK-NEXT:    vssub.vx v8, v8, a0471; CHECK-NEXT:    ret472  %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0473  %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer474  %v = call <vscale x 32 x i8> @llvm.vp.ssub.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)475  ret <vscale x 32 x i8> %v476}477 478define <vscale x 32 x i8> @vssub_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {479; CHECK-LABEL: vssub_vi_nxv32i8:480; CHECK:       # %bb.0:481; CHECK-NEXT:    li a1, -1482; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma483; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t484; CHECK-NEXT:    ret485  %v = call <vscale x 32 x i8> @llvm.vp.ssub.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 -1), <vscale x 32 x i1> %m, i32 %evl)486  ret <vscale x 32 x i8> %v487}488 489define <vscale x 32 x i8> @vssub_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {490; CHECK-LABEL: vssub_vi_nxv32i8_unmasked:491; CHECK:       # %bb.0:492; CHECK-NEXT:    li a1, -1493; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma494; CHECK-NEXT:    vssub.vx v8, v8, a1495; CHECK-NEXT:    ret496  %v = call <vscale x 32 x i8> @llvm.vp.ssub.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)497  ret <vscale x 32 x i8> %v498}499 500define <vscale x 64 x i8> @vssub_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {501; CHECK-LABEL: vssub_vv_nxv64i8:502; CHECK:       # %bb.0:503; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma504; CHECK-NEXT:    vssub.vv v8, v8, v16, v0.t505; CHECK-NEXT:    ret506  %v = call <vscale x 64 x i8> @llvm.vp.ssub.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)507  ret <vscale x 64 x i8> %v508}509 510define <vscale x 64 x i8> @vssub_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {511; CHECK-LABEL: vssub_vv_nxv64i8_unmasked:512; CHECK:       # %bb.0:513; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma514; CHECK-NEXT:    vssub.vv v8, v8, v16515; CHECK-NEXT:    ret516  %v = call <vscale x 64 x i8> @llvm.vp.ssub.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)517  ret <vscale x 64 x i8> %v518}519 520define <vscale x 64 x i8> @vssub_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {521; CHECK-LABEL: vssub_vx_nxv64i8:522; CHECK:       # %bb.0:523; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma524; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t525; CHECK-NEXT:    ret526  %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0527  %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer528  %v = call <vscale x 64 x i8> @llvm.vp.ssub.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)529  ret <vscale x 64 x i8> %v530}531 532define <vscale x 64 x i8> @vssub_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {533; CHECK-LABEL: vssub_vx_nxv64i8_unmasked:534; CHECK:       # %bb.0:535; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma536; CHECK-NEXT:    vssub.vx v8, v8, a0537; CHECK-NEXT:    ret538  %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0539  %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer540  %v = call <vscale x 64 x i8> @llvm.vp.ssub.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)541  ret <vscale x 64 x i8> %v542}543 544define <vscale x 64 x i8> @vssub_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {545; CHECK-LABEL: vssub_vi_nxv64i8:546; CHECK:       # %bb.0:547; CHECK-NEXT:    li a1, -1548; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma549; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t550; CHECK-NEXT:    ret551  %v = call <vscale x 64 x i8> @llvm.vp.ssub.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 -1), <vscale x 64 x i1> %m, i32 %evl)552  ret <vscale x 64 x i8> %v553}554 555define <vscale x 64 x i8> @vssub_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {556; CHECK-LABEL: vssub_vi_nxv64i8_unmasked:557; CHECK:       # %bb.0:558; CHECK-NEXT:    li a1, -1559; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma560; CHECK-NEXT:    vssub.vx v8, v8, a1561; CHECK-NEXT:    ret562  %v = call <vscale x 64 x i8> @llvm.vp.ssub.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 -1), <vscale x 64 x i1> splat (i1 true), i32 %evl)563  ret <vscale x 64 x i8> %v564}565 566; Test that split-legalization works when the mask itself needs splitting.567 568define <vscale x 128 x i8> @vssub_vi_nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i1> %m, i32 zeroext %evl) {569; CHECK-LABEL: vssub_vi_nxv128i8:570; CHECK:       # %bb.0:571; CHECK-NEXT:    vsetvli a2, zero, e8, m8, ta, ma572; CHECK-NEXT:    vmv1r.v v24, v0573; CHECK-NEXT:    vlm.v v0, (a0)574; CHECK-NEXT:    csrr a0, vlenb575; CHECK-NEXT:    slli a0, a0, 3576; CHECK-NEXT:    sub a2, a1, a0577; CHECK-NEXT:    sltu a3, a1, a2578; CHECK-NEXT:    addi a3, a3, -1579; CHECK-NEXT:    and a3, a3, a2580; CHECK-NEXT:    li a2, -1581; CHECK-NEXT:    vsetvli zero, a3, e8, m8, ta, ma582; CHECK-NEXT:    vssub.vx v16, v16, a2, v0.t583; CHECK-NEXT:    bltu a1, a0, .LBB50_2584; CHECK-NEXT:  # %bb.1:585; CHECK-NEXT:    mv a1, a0586; CHECK-NEXT:  .LBB50_2:587; CHECK-NEXT:    vmv1r.v v0, v24588; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma589; CHECK-NEXT:    vssub.vx v8, v8, a2, v0.t590; CHECK-NEXT:    ret591  %v = call <vscale x 128 x i8> @llvm.vp.ssub.sat.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> splat (i8 -1), <vscale x 128 x i1> %m, i32 %evl)592  ret <vscale x 128 x i8> %v593}594 595define <vscale x 128 x i8> @vssub_vi_nxv128i8_unmasked(<vscale x 128 x i8> %va, i32 zeroext %evl) {596; CHECK-LABEL: vssub_vi_nxv128i8_unmasked:597; CHECK:       # %bb.0:598; CHECK-NEXT:    csrr a1, vlenb599; CHECK-NEXT:    slli a1, a1, 3600; CHECK-NEXT:    sub a2, a0, a1601; CHECK-NEXT:    sltu a3, a0, a2602; CHECK-NEXT:    addi a3, a3, -1603; CHECK-NEXT:    and a3, a3, a2604; CHECK-NEXT:    li a2, -1605; CHECK-NEXT:    vsetvli zero, a3, e8, m8, ta, ma606; CHECK-NEXT:    vssub.vx v16, v16, a2607; CHECK-NEXT:    bltu a0, a1, .LBB51_2608; CHECK-NEXT:  # %bb.1:609; CHECK-NEXT:    mv a0, a1610; CHECK-NEXT:  .LBB51_2:611; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma612; CHECK-NEXT:    vssub.vx v8, v8, a2613; CHECK-NEXT:    ret614  %v = call <vscale x 128 x i8> @llvm.vp.ssub.sat.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> splat (i8 -1), <vscale x 128 x i1> splat (i1 true), i32 %evl)615  ret <vscale x 128 x i8> %v616}617 618define <vscale x 1 x i16> @vssub_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {619; CHECK-LABEL: vssub_vv_nxv1i16:620; CHECK:       # %bb.0:621; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma622; CHECK-NEXT:    vssub.vv v8, v8, v9, v0.t623; CHECK-NEXT:    ret624  %v = call <vscale x 1 x i16> @llvm.vp.ssub.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)625  ret <vscale x 1 x i16> %v626}627 628define <vscale x 1 x i16> @vssub_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {629; CHECK-LABEL: vssub_vv_nxv1i16_unmasked:630; CHECK:       # %bb.0:631; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma632; CHECK-NEXT:    vssub.vv v8, v8, v9633; CHECK-NEXT:    ret634  %v = call <vscale x 1 x i16> @llvm.vp.ssub.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)635  ret <vscale x 1 x i16> %v636}637 638define <vscale x 1 x i16> @vssub_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {639; CHECK-LABEL: vssub_vx_nxv1i16:640; CHECK:       # %bb.0:641; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma642; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t643; CHECK-NEXT:    ret644  %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0645  %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer646  %v = call <vscale x 1 x i16> @llvm.vp.ssub.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)647  ret <vscale x 1 x i16> %v648}649 650define <vscale x 1 x i16> @vssub_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {651; CHECK-LABEL: vssub_vx_nxv1i16_unmasked:652; CHECK:       # %bb.0:653; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma654; CHECK-NEXT:    vssub.vx v8, v8, a0655; CHECK-NEXT:    ret656  %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0657  %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer658  %v = call <vscale x 1 x i16> @llvm.vp.ssub.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)659  ret <vscale x 1 x i16> %v660}661 662define <vscale x 1 x i16> @vssub_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {663; CHECK-LABEL: vssub_vi_nxv1i16:664; CHECK:       # %bb.0:665; CHECK-NEXT:    li a1, -1666; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma667; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t668; CHECK-NEXT:    ret669  %v = call <vscale x 1 x i16> @llvm.vp.ssub.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 -1), <vscale x 1 x i1> %m, i32 %evl)670  ret <vscale x 1 x i16> %v671}672 673define <vscale x 1 x i16> @vssub_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {674; CHECK-LABEL: vssub_vi_nxv1i16_unmasked:675; CHECK:       # %bb.0:676; CHECK-NEXT:    li a1, -1677; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma678; CHECK-NEXT:    vssub.vx v8, v8, a1679; CHECK-NEXT:    ret680  %v = call <vscale x 1 x i16> @llvm.vp.ssub.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)681  ret <vscale x 1 x i16> %v682}683 684define <vscale x 2 x i16> @vssub_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {685; CHECK-LABEL: vssub_vv_nxv2i16:686; CHECK:       # %bb.0:687; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma688; CHECK-NEXT:    vssub.vv v8, v8, v9, v0.t689; CHECK-NEXT:    ret690  %v = call <vscale x 2 x i16> @llvm.vp.ssub.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)691  ret <vscale x 2 x i16> %v692}693 694define <vscale x 2 x i16> @vssub_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {695; CHECK-LABEL: vssub_vv_nxv2i16_unmasked:696; CHECK:       # %bb.0:697; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma698; CHECK-NEXT:    vssub.vv v8, v8, v9699; CHECK-NEXT:    ret700  %v = call <vscale x 2 x i16> @llvm.vp.ssub.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)701  ret <vscale x 2 x i16> %v702}703 704define <vscale x 2 x i16> @vssub_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {705; CHECK-LABEL: vssub_vx_nxv2i16:706; CHECK:       # %bb.0:707; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma708; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t709; CHECK-NEXT:    ret710  %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0711  %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer712  %v = call <vscale x 2 x i16> @llvm.vp.ssub.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)713  ret <vscale x 2 x i16> %v714}715 716define <vscale x 2 x i16> @vssub_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {717; CHECK-LABEL: vssub_vx_nxv2i16_unmasked:718; CHECK:       # %bb.0:719; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma720; CHECK-NEXT:    vssub.vx v8, v8, a0721; CHECK-NEXT:    ret722  %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0723  %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer724  %v = call <vscale x 2 x i16> @llvm.vp.ssub.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)725  ret <vscale x 2 x i16> %v726}727 728define <vscale x 2 x i16> @vssub_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {729; CHECK-LABEL: vssub_vi_nxv2i16:730; CHECK:       # %bb.0:731; CHECK-NEXT:    li a1, -1732; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma733; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t734; CHECK-NEXT:    ret735  %v = call <vscale x 2 x i16> @llvm.vp.ssub.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 -1), <vscale x 2 x i1> %m, i32 %evl)736  ret <vscale x 2 x i16> %v737}738 739define <vscale x 2 x i16> @vssub_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {740; CHECK-LABEL: vssub_vi_nxv2i16_unmasked:741; CHECK:       # %bb.0:742; CHECK-NEXT:    li a1, -1743; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma744; CHECK-NEXT:    vssub.vx v8, v8, a1745; CHECK-NEXT:    ret746  %v = call <vscale x 2 x i16> @llvm.vp.ssub.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)747  ret <vscale x 2 x i16> %v748}749 750define <vscale x 4 x i16> @vssub_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {751; CHECK-LABEL: vssub_vv_nxv4i16:752; CHECK:       # %bb.0:753; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma754; CHECK-NEXT:    vssub.vv v8, v8, v9, v0.t755; CHECK-NEXT:    ret756  %v = call <vscale x 4 x i16> @llvm.vp.ssub.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)757  ret <vscale x 4 x i16> %v758}759 760define <vscale x 4 x i16> @vssub_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {761; CHECK-LABEL: vssub_vv_nxv4i16_unmasked:762; CHECK:       # %bb.0:763; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma764; CHECK-NEXT:    vssub.vv v8, v8, v9765; CHECK-NEXT:    ret766  %v = call <vscale x 4 x i16> @llvm.vp.ssub.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)767  ret <vscale x 4 x i16> %v768}769 770define <vscale x 4 x i16> @vssub_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {771; CHECK-LABEL: vssub_vx_nxv4i16:772; CHECK:       # %bb.0:773; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma774; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t775; CHECK-NEXT:    ret776  %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0777  %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer778  %v = call <vscale x 4 x i16> @llvm.vp.ssub.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)779  ret <vscale x 4 x i16> %v780}781 782define <vscale x 4 x i16> @vssub_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {783; CHECK-LABEL: vssub_vx_nxv4i16_unmasked:784; CHECK:       # %bb.0:785; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma786; CHECK-NEXT:    vssub.vx v8, v8, a0787; CHECK-NEXT:    ret788  %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0789  %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer790  %v = call <vscale x 4 x i16> @llvm.vp.ssub.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)791  ret <vscale x 4 x i16> %v792}793 794define <vscale x 4 x i16> @vssub_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {795; CHECK-LABEL: vssub_vi_nxv4i16:796; CHECK:       # %bb.0:797; CHECK-NEXT:    li a1, -1798; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma799; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t800; CHECK-NEXT:    ret801  %v = call <vscale x 4 x i16> @llvm.vp.ssub.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 -1), <vscale x 4 x i1> %m, i32 %evl)802  ret <vscale x 4 x i16> %v803}804 805define <vscale x 4 x i16> @vssub_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {806; CHECK-LABEL: vssub_vi_nxv4i16_unmasked:807; CHECK:       # %bb.0:808; CHECK-NEXT:    li a1, -1809; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma810; CHECK-NEXT:    vssub.vx v8, v8, a1811; CHECK-NEXT:    ret812  %v = call <vscale x 4 x i16> @llvm.vp.ssub.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)813  ret <vscale x 4 x i16> %v814}815 816define <vscale x 8 x i16> @vssub_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {817; CHECK-LABEL: vssub_vv_nxv8i16:818; CHECK:       # %bb.0:819; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma820; CHECK-NEXT:    vssub.vv v8, v8, v10, v0.t821; CHECK-NEXT:    ret822  %v = call <vscale x 8 x i16> @llvm.vp.ssub.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)823  ret <vscale x 8 x i16> %v824}825 826define <vscale x 8 x i16> @vssub_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {827; CHECK-LABEL: vssub_vv_nxv8i16_unmasked:828; CHECK:       # %bb.0:829; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma830; CHECK-NEXT:    vssub.vv v8, v8, v10831; CHECK-NEXT:    ret832  %v = call <vscale x 8 x i16> @llvm.vp.ssub.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)833  ret <vscale x 8 x i16> %v834}835 836define <vscale x 8 x i16> @vssub_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {837; CHECK-LABEL: vssub_vx_nxv8i16:838; CHECK:       # %bb.0:839; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma840; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t841; CHECK-NEXT:    ret842  %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0843  %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer844  %v = call <vscale x 8 x i16> @llvm.vp.ssub.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)845  ret <vscale x 8 x i16> %v846}847 848define <vscale x 8 x i16> @vssub_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {849; CHECK-LABEL: vssub_vx_nxv8i16_unmasked:850; CHECK:       # %bb.0:851; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma852; CHECK-NEXT:    vssub.vx v8, v8, a0853; CHECK-NEXT:    ret854  %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0855  %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer856  %v = call <vscale x 8 x i16> @llvm.vp.ssub.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)857  ret <vscale x 8 x i16> %v858}859 860define <vscale x 8 x i16> @vssub_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {861; CHECK-LABEL: vssub_vi_nxv8i16:862; CHECK:       # %bb.0:863; CHECK-NEXT:    li a1, -1864; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma865; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t866; CHECK-NEXT:    ret867  %v = call <vscale x 8 x i16> @llvm.vp.ssub.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 -1), <vscale x 8 x i1> %m, i32 %evl)868  ret <vscale x 8 x i16> %v869}870 871define <vscale x 8 x i16> @vssub_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {872; CHECK-LABEL: vssub_vi_nxv8i16_unmasked:873; CHECK:       # %bb.0:874; CHECK-NEXT:    li a1, -1875; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma876; CHECK-NEXT:    vssub.vx v8, v8, a1877; CHECK-NEXT:    ret878  %v = call <vscale x 8 x i16> @llvm.vp.ssub.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)879  ret <vscale x 8 x i16> %v880}881 882define <vscale x 16 x i16> @vssub_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {883; CHECK-LABEL: vssub_vv_nxv16i16:884; CHECK:       # %bb.0:885; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma886; CHECK-NEXT:    vssub.vv v8, v8, v12, v0.t887; CHECK-NEXT:    ret888  %v = call <vscale x 16 x i16> @llvm.vp.ssub.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)889  ret <vscale x 16 x i16> %v890}891 892define <vscale x 16 x i16> @vssub_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {893; CHECK-LABEL: vssub_vv_nxv16i16_unmasked:894; CHECK:       # %bb.0:895; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma896; CHECK-NEXT:    vssub.vv v8, v8, v12897; CHECK-NEXT:    ret898  %v = call <vscale x 16 x i16> @llvm.vp.ssub.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)899  ret <vscale x 16 x i16> %v900}901 902define <vscale x 16 x i16> @vssub_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {903; CHECK-LABEL: vssub_vx_nxv16i16:904; CHECK:       # %bb.0:905; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma906; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t907; CHECK-NEXT:    ret908  %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0909  %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer910  %v = call <vscale x 16 x i16> @llvm.vp.ssub.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)911  ret <vscale x 16 x i16> %v912}913 914define <vscale x 16 x i16> @vssub_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {915; CHECK-LABEL: vssub_vx_nxv16i16_unmasked:916; CHECK:       # %bb.0:917; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma918; CHECK-NEXT:    vssub.vx v8, v8, a0919; CHECK-NEXT:    ret920  %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0921  %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer922  %v = call <vscale x 16 x i16> @llvm.vp.ssub.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)923  ret <vscale x 16 x i16> %v924}925 926define <vscale x 16 x i16> @vssub_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {927; CHECK-LABEL: vssub_vi_nxv16i16:928; CHECK:       # %bb.0:929; CHECK-NEXT:    li a1, -1930; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma931; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t932; CHECK-NEXT:    ret933  %v = call <vscale x 16 x i16> @llvm.vp.ssub.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 -1), <vscale x 16 x i1> %m, i32 %evl)934  ret <vscale x 16 x i16> %v935}936 937define <vscale x 16 x i16> @vssub_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {938; CHECK-LABEL: vssub_vi_nxv16i16_unmasked:939; CHECK:       # %bb.0:940; CHECK-NEXT:    li a1, -1941; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma942; CHECK-NEXT:    vssub.vx v8, v8, a1943; CHECK-NEXT:    ret944  %v = call <vscale x 16 x i16> @llvm.vp.ssub.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)945  ret <vscale x 16 x i16> %v946}947 948define <vscale x 32 x i16> @vssub_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {949; CHECK-LABEL: vssub_vv_nxv32i16:950; CHECK:       # %bb.0:951; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma952; CHECK-NEXT:    vssub.vv v8, v8, v16, v0.t953; CHECK-NEXT:    ret954  %v = call <vscale x 32 x i16> @llvm.vp.ssub.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)955  ret <vscale x 32 x i16> %v956}957 958define <vscale x 32 x i16> @vssub_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {959; CHECK-LABEL: vssub_vv_nxv32i16_unmasked:960; CHECK:       # %bb.0:961; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma962; CHECK-NEXT:    vssub.vv v8, v8, v16963; CHECK-NEXT:    ret964  %v = call <vscale x 32 x i16> @llvm.vp.ssub.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)965  ret <vscale x 32 x i16> %v966}967 968define <vscale x 32 x i16> @vssub_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {969; CHECK-LABEL: vssub_vx_nxv32i16:970; CHECK:       # %bb.0:971; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma972; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t973; CHECK-NEXT:    ret974  %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0975  %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer976  %v = call <vscale x 32 x i16> @llvm.vp.ssub.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)977  ret <vscale x 32 x i16> %v978}979 980define <vscale x 32 x i16> @vssub_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {981; CHECK-LABEL: vssub_vx_nxv32i16_unmasked:982; CHECK:       # %bb.0:983; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma984; CHECK-NEXT:    vssub.vx v8, v8, a0985; CHECK-NEXT:    ret986  %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0987  %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer988  %v = call <vscale x 32 x i16> @llvm.vp.ssub.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)989  ret <vscale x 32 x i16> %v990}991 992define <vscale x 32 x i16> @vssub_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {993; CHECK-LABEL: vssub_vi_nxv32i16:994; CHECK:       # %bb.0:995; CHECK-NEXT:    li a1, -1996; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma997; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t998; CHECK-NEXT:    ret999  %v = call <vscale x 32 x i16> @llvm.vp.ssub.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 -1), <vscale x 32 x i1> %m, i32 %evl)1000  ret <vscale x 32 x i16> %v1001}1002 1003define <vscale x 32 x i16> @vssub_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {1004; CHECK-LABEL: vssub_vi_nxv32i16_unmasked:1005; CHECK:       # %bb.0:1006; CHECK-NEXT:    li a1, -11007; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma1008; CHECK-NEXT:    vssub.vx v8, v8, a11009; CHECK-NEXT:    ret1010  %v = call <vscale x 32 x i16> @llvm.vp.ssub.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)1011  ret <vscale x 32 x i16> %v1012}1013 1014define <vscale x 1 x i32> @vssub_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1015; CHECK-LABEL: vssub_vv_nxv1i32:1016; CHECK:       # %bb.0:1017; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma1018; CHECK-NEXT:    vssub.vv v8, v8, v9, v0.t1019; CHECK-NEXT:    ret1020  %v = call <vscale x 1 x i32> @llvm.vp.ssub.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)1021  ret <vscale x 1 x i32> %v1022}1023 1024define <vscale x 1 x i32> @vssub_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {1025; CHECK-LABEL: vssub_vv_nxv1i32_unmasked:1026; CHECK:       # %bb.0:1027; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma1028; CHECK-NEXT:    vssub.vv v8, v8, v91029; CHECK-NEXT:    ret1030  %v = call <vscale x 1 x i32> @llvm.vp.ssub.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)1031  ret <vscale x 1 x i32> %v1032}1033 1034define <vscale x 1 x i32> @vssub_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1035; CHECK-LABEL: vssub_vx_nxv1i32:1036; CHECK:       # %bb.0:1037; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma1038; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t1039; CHECK-NEXT:    ret1040  %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 01041  %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer1042  %v = call <vscale x 1 x i32> @llvm.vp.ssub.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)1043  ret <vscale x 1 x i32> %v1044}1045 1046define <vscale x 1 x i32> @vssub_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {1047; CHECK-LABEL: vssub_vx_nxv1i32_unmasked:1048; CHECK:       # %bb.0:1049; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma1050; CHECK-NEXT:    vssub.vx v8, v8, a01051; CHECK-NEXT:    ret1052  %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 01053  %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer1054  %v = call <vscale x 1 x i32> @llvm.vp.ssub.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)1055  ret <vscale x 1 x i32> %v1056}1057 1058define <vscale x 1 x i32> @vssub_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {1059; CHECK-LABEL: vssub_vi_nxv1i32:1060; CHECK:       # %bb.0:1061; CHECK-NEXT:    li a1, -11062; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma1063; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t1064; CHECK-NEXT:    ret1065  %v = call <vscale x 1 x i32> @llvm.vp.ssub.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 -1), <vscale x 1 x i1> %m, i32 %evl)1066  ret <vscale x 1 x i32> %v1067}1068 1069define <vscale x 1 x i32> @vssub_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {1070; CHECK-LABEL: vssub_vi_nxv1i32_unmasked:1071; CHECK:       # %bb.0:1072; CHECK-NEXT:    li a1, -11073; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma1074; CHECK-NEXT:    vssub.vx v8, v8, a11075; CHECK-NEXT:    ret1076  %v = call <vscale x 1 x i32> @llvm.vp.ssub.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)1077  ret <vscale x 1 x i32> %v1078}1079 1080define <vscale x 2 x i32> @vssub_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1081; CHECK-LABEL: vssub_vv_nxv2i32:1082; CHECK:       # %bb.0:1083; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1084; CHECK-NEXT:    vssub.vv v8, v8, v9, v0.t1085; CHECK-NEXT:    ret1086  %v = call <vscale x 2 x i32> @llvm.vp.ssub.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)1087  ret <vscale x 2 x i32> %v1088}1089 1090define <vscale x 2 x i32> @vssub_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {1091; CHECK-LABEL: vssub_vv_nxv2i32_unmasked:1092; CHECK:       # %bb.0:1093; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1094; CHECK-NEXT:    vssub.vv v8, v8, v91095; CHECK-NEXT:    ret1096  %v = call <vscale x 2 x i32> @llvm.vp.ssub.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)1097  ret <vscale x 2 x i32> %v1098}1099 1100define <vscale x 2 x i32> @vssub_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1101; CHECK-LABEL: vssub_vx_nxv2i32:1102; CHECK:       # %bb.0:1103; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma1104; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t1105; CHECK-NEXT:    ret1106  %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 01107  %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer1108  %v = call <vscale x 2 x i32> @llvm.vp.ssub.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)1109  ret <vscale x 2 x i32> %v1110}1111 1112define <vscale x 2 x i32> @vssub_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {1113; CHECK-LABEL: vssub_vx_nxv2i32_unmasked:1114; CHECK:       # %bb.0:1115; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma1116; CHECK-NEXT:    vssub.vx v8, v8, a01117; CHECK-NEXT:    ret1118  %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 01119  %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer1120  %v = call <vscale x 2 x i32> @llvm.vp.ssub.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)1121  ret <vscale x 2 x i32> %v1122}1123 1124define <vscale x 2 x i32> @vssub_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {1125; CHECK-LABEL: vssub_vi_nxv2i32:1126; CHECK:       # %bb.0:1127; CHECK-NEXT:    li a1, -11128; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1129; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t1130; CHECK-NEXT:    ret1131  %v = call <vscale x 2 x i32> @llvm.vp.ssub.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 -1), <vscale x 2 x i1> %m, i32 %evl)1132  ret <vscale x 2 x i32> %v1133}1134 1135define <vscale x 2 x i32> @vssub_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {1136; CHECK-LABEL: vssub_vi_nxv2i32_unmasked:1137; CHECK:       # %bb.0:1138; CHECK-NEXT:    li a1, -11139; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1140; CHECK-NEXT:    vssub.vx v8, v8, a11141; CHECK-NEXT:    ret1142  %v = call <vscale x 2 x i32> @llvm.vp.ssub.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)1143  ret <vscale x 2 x i32> %v1144}1145 1146define <vscale x 4 x i32> @vssub_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1147; CHECK-LABEL: vssub_vv_nxv4i32:1148; CHECK:       # %bb.0:1149; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1150; CHECK-NEXT:    vssub.vv v8, v8, v10, v0.t1151; CHECK-NEXT:    ret1152  %v = call <vscale x 4 x i32> @llvm.vp.ssub.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)1153  ret <vscale x 4 x i32> %v1154}1155 1156define <vscale x 4 x i32> @vssub_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {1157; CHECK-LABEL: vssub_vv_nxv4i32_unmasked:1158; CHECK:       # %bb.0:1159; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1160; CHECK-NEXT:    vssub.vv v8, v8, v101161; CHECK-NEXT:    ret1162  %v = call <vscale x 4 x i32> @llvm.vp.ssub.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)1163  ret <vscale x 4 x i32> %v1164}1165 1166define <vscale x 4 x i32> @vssub_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1167; CHECK-LABEL: vssub_vx_nxv4i32:1168; CHECK:       # %bb.0:1169; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma1170; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t1171; CHECK-NEXT:    ret1172  %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 01173  %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1174  %v = call <vscale x 4 x i32> @llvm.vp.ssub.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)1175  ret <vscale x 4 x i32> %v1176}1177 1178define <vscale x 4 x i32> @vssub_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {1179; CHECK-LABEL: vssub_vx_nxv4i32_unmasked:1180; CHECK:       # %bb.0:1181; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma1182; CHECK-NEXT:    vssub.vx v8, v8, a01183; CHECK-NEXT:    ret1184  %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 01185  %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1186  %v = call <vscale x 4 x i32> @llvm.vp.ssub.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)1187  ret <vscale x 4 x i32> %v1188}1189 1190define <vscale x 4 x i32> @vssub_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {1191; CHECK-LABEL: vssub_vi_nxv4i32:1192; CHECK:       # %bb.0:1193; CHECK-NEXT:    li a1, -11194; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1195; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t1196; CHECK-NEXT:    ret1197  %v = call <vscale x 4 x i32> @llvm.vp.ssub.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 -1), <vscale x 4 x i1> %m, i32 %evl)1198  ret <vscale x 4 x i32> %v1199}1200 1201define <vscale x 4 x i32> @vssub_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {1202; CHECK-LABEL: vssub_vi_nxv4i32_unmasked:1203; CHECK:       # %bb.0:1204; CHECK-NEXT:    li a1, -11205; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1206; CHECK-NEXT:    vssub.vx v8, v8, a11207; CHECK-NEXT:    ret1208  %v = call <vscale x 4 x i32> @llvm.vp.ssub.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)1209  ret <vscale x 4 x i32> %v1210}1211 1212define <vscale x 8 x i32> @vssub_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1213; CHECK-LABEL: vssub_vv_nxv8i32:1214; CHECK:       # %bb.0:1215; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1216; CHECK-NEXT:    vssub.vv v8, v8, v12, v0.t1217; CHECK-NEXT:    ret1218  %v = call <vscale x 8 x i32> @llvm.vp.ssub.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)1219  ret <vscale x 8 x i32> %v1220}1221 1222define <vscale x 8 x i32> @vssub_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {1223; CHECK-LABEL: vssub_vv_nxv8i32_unmasked:1224; CHECK:       # %bb.0:1225; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1226; CHECK-NEXT:    vssub.vv v8, v8, v121227; CHECK-NEXT:    ret1228  %v = call <vscale x 8 x i32> @llvm.vp.ssub.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)1229  ret <vscale x 8 x i32> %v1230}1231 1232define <vscale x 8 x i32> @vssub_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1233; CHECK-LABEL: vssub_vx_nxv8i32:1234; CHECK:       # %bb.0:1235; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma1236; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t1237; CHECK-NEXT:    ret1238  %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 01239  %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer1240  %v = call <vscale x 8 x i32> @llvm.vp.ssub.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)1241  ret <vscale x 8 x i32> %v1242}1243 1244define <vscale x 8 x i32> @vssub_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {1245; CHECK-LABEL: vssub_vx_nxv8i32_unmasked:1246; CHECK:       # %bb.0:1247; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma1248; CHECK-NEXT:    vssub.vx v8, v8, a01249; CHECK-NEXT:    ret1250  %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 01251  %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer1252  %v = call <vscale x 8 x i32> @llvm.vp.ssub.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)1253  ret <vscale x 8 x i32> %v1254}1255 1256define <vscale x 8 x i32> @vssub_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1257; CHECK-LABEL: vssub_vi_nxv8i32:1258; CHECK:       # %bb.0:1259; CHECK-NEXT:    li a1, -11260; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1261; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t1262; CHECK-NEXT:    ret1263  %v = call <vscale x 8 x i32> @llvm.vp.ssub.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 -1), <vscale x 8 x i1> %m, i32 %evl)1264  ret <vscale x 8 x i32> %v1265}1266 1267define <vscale x 8 x i32> @vssub_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {1268; CHECK-LABEL: vssub_vi_nxv8i32_unmasked:1269; CHECK:       # %bb.0:1270; CHECK-NEXT:    li a1, -11271; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1272; CHECK-NEXT:    vssub.vx v8, v8, a11273; CHECK-NEXT:    ret1274  %v = call <vscale x 8 x i32> @llvm.vp.ssub.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)1275  ret <vscale x 8 x i32> %v1276}1277 1278define <vscale x 16 x i32> @vssub_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {1279; CHECK-LABEL: vssub_vv_nxv16i32:1280; CHECK:       # %bb.0:1281; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1282; CHECK-NEXT:    vssub.vv v8, v8, v16, v0.t1283; CHECK-NEXT:    ret1284  %v = call <vscale x 16 x i32> @llvm.vp.ssub.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)1285  ret <vscale x 16 x i32> %v1286}1287 1288define <vscale x 16 x i32> @vssub_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {1289; CHECK-LABEL: vssub_vv_nxv16i32_unmasked:1290; CHECK:       # %bb.0:1291; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1292; CHECK-NEXT:    vssub.vv v8, v8, v161293; CHECK-NEXT:    ret1294  %v = call <vscale x 16 x i32> @llvm.vp.ssub.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)1295  ret <vscale x 16 x i32> %v1296}1297 1298define <vscale x 16 x i32> @vssub_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {1299; CHECK-LABEL: vssub_vx_nxv16i32:1300; CHECK:       # %bb.0:1301; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma1302; CHECK-NEXT:    vssub.vx v8, v8, a0, v0.t1303; CHECK-NEXT:    ret1304  %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 01305  %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer1306  %v = call <vscale x 16 x i32> @llvm.vp.ssub.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)1307  ret <vscale x 16 x i32> %v1308}1309 1310define <vscale x 16 x i32> @vssub_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {1311; CHECK-LABEL: vssub_vx_nxv16i32_unmasked:1312; CHECK:       # %bb.0:1313; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma1314; CHECK-NEXT:    vssub.vx v8, v8, a01315; CHECK-NEXT:    ret1316  %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 01317  %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer1318  %v = call <vscale x 16 x i32> @llvm.vp.ssub.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)1319  ret <vscale x 16 x i32> %v1320}1321 1322define <vscale x 16 x i32> @vssub_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {1323; CHECK-LABEL: vssub_vi_nxv16i32:1324; CHECK:       # %bb.0:1325; CHECK-NEXT:    li a1, -11326; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1327; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t1328; CHECK-NEXT:    ret1329  %v = call <vscale x 16 x i32> @llvm.vp.ssub.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 -1), <vscale x 16 x i1> %m, i32 %evl)1330  ret <vscale x 16 x i32> %v1331}1332 1333define <vscale x 16 x i32> @vssub_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {1334; CHECK-LABEL: vssub_vi_nxv16i32_unmasked:1335; CHECK:       # %bb.0:1336; CHECK-NEXT:    li a1, -11337; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1338; CHECK-NEXT:    vssub.vx v8, v8, a11339; CHECK-NEXT:    ret1340  %v = call <vscale x 16 x i32> @llvm.vp.ssub.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)1341  ret <vscale x 16 x i32> %v1342}1343 1344; Test that split-legalization works then the mask needs manual splitting.1345 1346define <vscale x 32 x i32> @vssub_vi_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {1347; CHECK-LABEL: vssub_vi_nxv32i32:1348; CHECK:       # %bb.0:1349; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma1350; CHECK-NEXT:    vmv1r.v v24, v01351; CHECK-NEXT:    csrr a1, vlenb1352; CHECK-NEXT:    srli a2, a1, 21353; CHECK-NEXT:    slli a1, a1, 11354; CHECK-NEXT:    vslidedown.vx v0, v0, a21355; CHECK-NEXT:    sub a2, a0, a11356; CHECK-NEXT:    sltu a3, a0, a21357; CHECK-NEXT:    addi a3, a3, -11358; CHECK-NEXT:    and a3, a3, a21359; CHECK-NEXT:    li a2, -11360; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma1361; CHECK-NEXT:    vssub.vx v16, v16, a2, v0.t1362; CHECK-NEXT:    bltu a0, a1, .LBB118_21363; CHECK-NEXT:  # %bb.1:1364; CHECK-NEXT:    mv a0, a11365; CHECK-NEXT:  .LBB118_2:1366; CHECK-NEXT:    vmv1r.v v0, v241367; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1368; CHECK-NEXT:    vssub.vx v8, v8, a2, v0.t1369; CHECK-NEXT:    ret1370  %v = call <vscale x 32 x i32> @llvm.vp.ssub.sat.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> %m, i32 %evl)1371  ret <vscale x 32 x i32> %v1372}1373 1374define <vscale x 32 x i32> @vssub_vi_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 zeroext %evl) {1375; CHECK-LABEL: vssub_vi_nxv32i32_unmasked:1376; CHECK:       # %bb.0:1377; CHECK-NEXT:    csrr a1, vlenb1378; CHECK-NEXT:    slli a1, a1, 11379; CHECK-NEXT:    sub a2, a0, a11380; CHECK-NEXT:    sltu a3, a0, a21381; CHECK-NEXT:    addi a3, a3, -11382; CHECK-NEXT:    and a3, a3, a21383; CHECK-NEXT:    li a2, -11384; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma1385; CHECK-NEXT:    vssub.vx v16, v16, a21386; CHECK-NEXT:    bltu a0, a1, .LBB119_21387; CHECK-NEXT:  # %bb.1:1388; CHECK-NEXT:    mv a0, a11389; CHECK-NEXT:  .LBB119_2:1390; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1391; CHECK-NEXT:    vssub.vx v8, v8, a21392; CHECK-NEXT:    ret1393  %v = call <vscale x 32 x i32> @llvm.vp.ssub.sat.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)1394  ret <vscale x 32 x i32> %v1395}1396 1397define <vscale x 1 x i64> @vssub_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1398; CHECK-LABEL: vssub_vv_nxv1i64:1399; CHECK:       # %bb.0:1400; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1401; CHECK-NEXT:    vssub.vv v8, v8, v9, v0.t1402; CHECK-NEXT:    ret1403  %v = call <vscale x 1 x i64> @llvm.vp.ssub.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)1404  ret <vscale x 1 x i64> %v1405}1406 1407define <vscale x 1 x i64> @vssub_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {1408; CHECK-LABEL: vssub_vv_nxv1i64_unmasked:1409; CHECK:       # %bb.0:1410; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1411; CHECK-NEXT:    vssub.vv v8, v8, v91412; CHECK-NEXT:    ret1413  %v = call <vscale x 1 x i64> @llvm.vp.ssub.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)1414  ret <vscale x 1 x i64> %v1415}1416 1417define <vscale x 1 x i64> @vssub_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1418; RV32-LABEL: vssub_vx_nxv1i64:1419; RV32:       # %bb.0:1420; RV32-NEXT:    addi sp, sp, -161421; RV32-NEXT:    .cfi_def_cfa_offset 161422; RV32-NEXT:    sw a0, 8(sp)1423; RV32-NEXT:    sw a1, 12(sp)1424; RV32-NEXT:    addi a0, sp, 81425; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma1426; RV32-NEXT:    vlse64.v v9, (a0), zero1427; RV32-NEXT:    vssub.vv v8, v8, v9, v0.t1428; RV32-NEXT:    addi sp, sp, 161429; RV32-NEXT:    .cfi_def_cfa_offset 01430; RV32-NEXT:    ret1431;1432; RV64-LABEL: vssub_vx_nxv1i64:1433; RV64:       # %bb.0:1434; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma1435; RV64-NEXT:    vssub.vx v8, v8, a0, v0.t1436; RV64-NEXT:    ret1437  %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01438  %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1439  %v = call <vscale x 1 x i64> @llvm.vp.ssub.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)1440  ret <vscale x 1 x i64> %v1441}1442 1443define <vscale x 1 x i64> @vssub_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {1444; RV32-LABEL: vssub_vx_nxv1i64_unmasked:1445; RV32:       # %bb.0:1446; RV32-NEXT:    addi sp, sp, -161447; RV32-NEXT:    .cfi_def_cfa_offset 161448; RV32-NEXT:    sw a0, 8(sp)1449; RV32-NEXT:    sw a1, 12(sp)1450; RV32-NEXT:    addi a0, sp, 81451; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma1452; RV32-NEXT:    vlse64.v v9, (a0), zero1453; RV32-NEXT:    vssub.vv v8, v8, v91454; RV32-NEXT:    addi sp, sp, 161455; RV32-NEXT:    .cfi_def_cfa_offset 01456; RV32-NEXT:    ret1457;1458; RV64-LABEL: vssub_vx_nxv1i64_unmasked:1459; RV64:       # %bb.0:1460; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma1461; RV64-NEXT:    vssub.vx v8, v8, a01462; RV64-NEXT:    ret1463  %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01464  %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1465  %v = call <vscale x 1 x i64> @llvm.vp.ssub.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)1466  ret <vscale x 1 x i64> %v1467}1468 1469define <vscale x 1 x i64> @vssub_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {1470; CHECK-LABEL: vssub_vi_nxv1i64:1471; CHECK:       # %bb.0:1472; CHECK-NEXT:    li a1, -11473; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1474; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t1475; CHECK-NEXT:    ret1476  %v = call <vscale x 1 x i64> @llvm.vp.ssub.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 -1), <vscale x 1 x i1> %m, i32 %evl)1477  ret <vscale x 1 x i64> %v1478}1479 1480define <vscale x 1 x i64> @vssub_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {1481; CHECK-LABEL: vssub_vi_nxv1i64_unmasked:1482; CHECK:       # %bb.0:1483; CHECK-NEXT:    li a1, -11484; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1485; CHECK-NEXT:    vssub.vx v8, v8, a11486; CHECK-NEXT:    ret1487  %v = call <vscale x 1 x i64> @llvm.vp.ssub.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)1488  ret <vscale x 1 x i64> %v1489}1490 1491define <vscale x 2 x i64> @vssub_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1492; CHECK-LABEL: vssub_vv_nxv2i64:1493; CHECK:       # %bb.0:1494; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1495; CHECK-NEXT:    vssub.vv v8, v8, v10, v0.t1496; CHECK-NEXT:    ret1497  %v = call <vscale x 2 x i64> @llvm.vp.ssub.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)1498  ret <vscale x 2 x i64> %v1499}1500 1501define <vscale x 2 x i64> @vssub_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {1502; CHECK-LABEL: vssub_vv_nxv2i64_unmasked:1503; CHECK:       # %bb.0:1504; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1505; CHECK-NEXT:    vssub.vv v8, v8, v101506; CHECK-NEXT:    ret1507  %v = call <vscale x 2 x i64> @llvm.vp.ssub.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)1508  ret <vscale x 2 x i64> %v1509}1510 1511define <vscale x 2 x i64> @vssub_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1512; RV32-LABEL: vssub_vx_nxv2i64:1513; RV32:       # %bb.0:1514; RV32-NEXT:    addi sp, sp, -161515; RV32-NEXT:    .cfi_def_cfa_offset 161516; RV32-NEXT:    sw a0, 8(sp)1517; RV32-NEXT:    sw a1, 12(sp)1518; RV32-NEXT:    addi a0, sp, 81519; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma1520; RV32-NEXT:    vlse64.v v10, (a0), zero1521; RV32-NEXT:    vssub.vv v8, v8, v10, v0.t1522; RV32-NEXT:    addi sp, sp, 161523; RV32-NEXT:    .cfi_def_cfa_offset 01524; RV32-NEXT:    ret1525;1526; RV64-LABEL: vssub_vx_nxv2i64:1527; RV64:       # %bb.0:1528; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma1529; RV64-NEXT:    vssub.vx v8, v8, a0, v0.t1530; RV64-NEXT:    ret1531  %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01532  %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1533  %v = call <vscale x 2 x i64> @llvm.vp.ssub.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)1534  ret <vscale x 2 x i64> %v1535}1536 1537define <vscale x 2 x i64> @vssub_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {1538; RV32-LABEL: vssub_vx_nxv2i64_unmasked:1539; RV32:       # %bb.0:1540; RV32-NEXT:    addi sp, sp, -161541; RV32-NEXT:    .cfi_def_cfa_offset 161542; RV32-NEXT:    sw a0, 8(sp)1543; RV32-NEXT:    sw a1, 12(sp)1544; RV32-NEXT:    addi a0, sp, 81545; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma1546; RV32-NEXT:    vlse64.v v10, (a0), zero1547; RV32-NEXT:    vssub.vv v8, v8, v101548; RV32-NEXT:    addi sp, sp, 161549; RV32-NEXT:    .cfi_def_cfa_offset 01550; RV32-NEXT:    ret1551;1552; RV64-LABEL: vssub_vx_nxv2i64_unmasked:1553; RV64:       # %bb.0:1554; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma1555; RV64-NEXT:    vssub.vx v8, v8, a01556; RV64-NEXT:    ret1557  %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01558  %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1559  %v = call <vscale x 2 x i64> @llvm.vp.ssub.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)1560  ret <vscale x 2 x i64> %v1561}1562 1563define <vscale x 2 x i64> @vssub_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {1564; CHECK-LABEL: vssub_vi_nxv2i64:1565; CHECK:       # %bb.0:1566; CHECK-NEXT:    li a1, -11567; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1568; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t1569; CHECK-NEXT:    ret1570  %v = call <vscale x 2 x i64> @llvm.vp.ssub.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 -1), <vscale x 2 x i1> %m, i32 %evl)1571  ret <vscale x 2 x i64> %v1572}1573 1574define <vscale x 2 x i64> @vssub_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {1575; CHECK-LABEL: vssub_vi_nxv2i64_unmasked:1576; CHECK:       # %bb.0:1577; CHECK-NEXT:    li a1, -11578; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1579; CHECK-NEXT:    vssub.vx v8, v8, a11580; CHECK-NEXT:    ret1581  %v = call <vscale x 2 x i64> @llvm.vp.ssub.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)1582  ret <vscale x 2 x i64> %v1583}1584 1585define <vscale x 4 x i64> @vssub_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1586; CHECK-LABEL: vssub_vv_nxv4i64:1587; CHECK:       # %bb.0:1588; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1589; CHECK-NEXT:    vssub.vv v8, v8, v12, v0.t1590; CHECK-NEXT:    ret1591  %v = call <vscale x 4 x i64> @llvm.vp.ssub.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)1592  ret <vscale x 4 x i64> %v1593}1594 1595define <vscale x 4 x i64> @vssub_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {1596; CHECK-LABEL: vssub_vv_nxv4i64_unmasked:1597; CHECK:       # %bb.0:1598; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1599; CHECK-NEXT:    vssub.vv v8, v8, v121600; CHECK-NEXT:    ret1601  %v = call <vscale x 4 x i64> @llvm.vp.ssub.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)1602  ret <vscale x 4 x i64> %v1603}1604 1605define <vscale x 4 x i64> @vssub_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1606; RV32-LABEL: vssub_vx_nxv4i64:1607; RV32:       # %bb.0:1608; RV32-NEXT:    addi sp, sp, -161609; RV32-NEXT:    .cfi_def_cfa_offset 161610; RV32-NEXT:    sw a0, 8(sp)1611; RV32-NEXT:    sw a1, 12(sp)1612; RV32-NEXT:    addi a0, sp, 81613; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma1614; RV32-NEXT:    vlse64.v v12, (a0), zero1615; RV32-NEXT:    vssub.vv v8, v8, v12, v0.t1616; RV32-NEXT:    addi sp, sp, 161617; RV32-NEXT:    .cfi_def_cfa_offset 01618; RV32-NEXT:    ret1619;1620; RV64-LABEL: vssub_vx_nxv4i64:1621; RV64:       # %bb.0:1622; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma1623; RV64-NEXT:    vssub.vx v8, v8, a0, v0.t1624; RV64-NEXT:    ret1625  %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01626  %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1627  %v = call <vscale x 4 x i64> @llvm.vp.ssub.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)1628  ret <vscale x 4 x i64> %v1629}1630 1631define <vscale x 4 x i64> @vssub_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {1632; RV32-LABEL: vssub_vx_nxv4i64_unmasked:1633; RV32:       # %bb.0:1634; RV32-NEXT:    addi sp, sp, -161635; RV32-NEXT:    .cfi_def_cfa_offset 161636; RV32-NEXT:    sw a0, 8(sp)1637; RV32-NEXT:    sw a1, 12(sp)1638; RV32-NEXT:    addi a0, sp, 81639; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma1640; RV32-NEXT:    vlse64.v v12, (a0), zero1641; RV32-NEXT:    vssub.vv v8, v8, v121642; RV32-NEXT:    addi sp, sp, 161643; RV32-NEXT:    .cfi_def_cfa_offset 01644; RV32-NEXT:    ret1645;1646; RV64-LABEL: vssub_vx_nxv4i64_unmasked:1647; RV64:       # %bb.0:1648; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma1649; RV64-NEXT:    vssub.vx v8, v8, a01650; RV64-NEXT:    ret1651  %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01652  %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1653  %v = call <vscale x 4 x i64> @llvm.vp.ssub.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)1654  ret <vscale x 4 x i64> %v1655}1656 1657define <vscale x 4 x i64> @vssub_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {1658; CHECK-LABEL: vssub_vi_nxv4i64:1659; CHECK:       # %bb.0:1660; CHECK-NEXT:    li a1, -11661; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1662; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t1663; CHECK-NEXT:    ret1664  %v = call <vscale x 4 x i64> @llvm.vp.ssub.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 -1), <vscale x 4 x i1> %m, i32 %evl)1665  ret <vscale x 4 x i64> %v1666}1667 1668define <vscale x 4 x i64> @vssub_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {1669; CHECK-LABEL: vssub_vi_nxv4i64_unmasked:1670; CHECK:       # %bb.0:1671; CHECK-NEXT:    li a1, -11672; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1673; CHECK-NEXT:    vssub.vx v8, v8, a11674; CHECK-NEXT:    ret1675  %v = call <vscale x 4 x i64> @llvm.vp.ssub.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)1676  ret <vscale x 4 x i64> %v1677}1678 1679define <vscale x 8 x i64> @vssub_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1680; CHECK-LABEL: vssub_vv_nxv8i64:1681; CHECK:       # %bb.0:1682; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1683; CHECK-NEXT:    vssub.vv v8, v8, v16, v0.t1684; CHECK-NEXT:    ret1685  %v = call <vscale x 8 x i64> @llvm.vp.ssub.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)1686  ret <vscale x 8 x i64> %v1687}1688 1689define <vscale x 8 x i64> @vssub_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {1690; CHECK-LABEL: vssub_vv_nxv8i64_unmasked:1691; CHECK:       # %bb.0:1692; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1693; CHECK-NEXT:    vssub.vv v8, v8, v161694; CHECK-NEXT:    ret1695  %v = call <vscale x 8 x i64> @llvm.vp.ssub.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)1696  ret <vscale x 8 x i64> %v1697}1698 1699define <vscale x 8 x i64> @vssub_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1700; RV32-LABEL: vssub_vx_nxv8i64:1701; RV32:       # %bb.0:1702; RV32-NEXT:    addi sp, sp, -161703; RV32-NEXT:    .cfi_def_cfa_offset 161704; RV32-NEXT:    sw a0, 8(sp)1705; RV32-NEXT:    sw a1, 12(sp)1706; RV32-NEXT:    addi a0, sp, 81707; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma1708; RV32-NEXT:    vlse64.v v16, (a0), zero1709; RV32-NEXT:    vssub.vv v8, v8, v16, v0.t1710; RV32-NEXT:    addi sp, sp, 161711; RV32-NEXT:    .cfi_def_cfa_offset 01712; RV32-NEXT:    ret1713;1714; RV64-LABEL: vssub_vx_nxv8i64:1715; RV64:       # %bb.0:1716; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma1717; RV64-NEXT:    vssub.vx v8, v8, a0, v0.t1718; RV64-NEXT:    ret1719  %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01720  %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1721  %v = call <vscale x 8 x i64> @llvm.vp.ssub.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1722  ret <vscale x 8 x i64> %v1723}1724 1725define <vscale x 8 x i64> @vssub_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {1726; RV32-LABEL: vssub_vx_nxv8i64_unmasked:1727; RV32:       # %bb.0:1728; RV32-NEXT:    addi sp, sp, -161729; RV32-NEXT:    .cfi_def_cfa_offset 161730; RV32-NEXT:    sw a0, 8(sp)1731; RV32-NEXT:    sw a1, 12(sp)1732; RV32-NEXT:    addi a0, sp, 81733; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma1734; RV32-NEXT:    vlse64.v v16, (a0), zero1735; RV32-NEXT:    vssub.vv v8, v8, v161736; RV32-NEXT:    addi sp, sp, 161737; RV32-NEXT:    .cfi_def_cfa_offset 01738; RV32-NEXT:    ret1739;1740; RV64-LABEL: vssub_vx_nxv8i64_unmasked:1741; RV64:       # %bb.0:1742; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma1743; RV64-NEXT:    vssub.vx v8, v8, a01744; RV64-NEXT:    ret1745  %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01746  %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1747  %v = call <vscale x 8 x i64> @llvm.vp.ssub.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)1748  ret <vscale x 8 x i64> %v1749}1750 1751define <vscale x 8 x i64> @vssub_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1752; CHECK-LABEL: vssub_vi_nxv8i64:1753; CHECK:       # %bb.0:1754; CHECK-NEXT:    li a1, -11755; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1756; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t1757; CHECK-NEXT:    ret1758  %v = call <vscale x 8 x i64> @llvm.vp.ssub.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 -1), <vscale x 8 x i1> %m, i32 %evl)1759  ret <vscale x 8 x i64> %v1760}1761 1762define <vscale x 8 x i64> @vssub_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1763; CHECK-LABEL: vssub_vi_nxv8i64_unmasked:1764; CHECK:       # %bb.0:1765; CHECK-NEXT:    li a1, -11766; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1767; CHECK-NEXT:    vssub.vx v8, v8, a11768; CHECK-NEXT:    ret1769  %v = call <vscale x 8 x i64> @llvm.vp.ssub.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)1770  ret <vscale x 8 x i64> %v1771}1772