brintos

brintos / llvm-project-archived public Read only

0
0
Text · 81.6 KiB · bde279a Raw
1770 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> @vssubu_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {8; CHECK-LABEL: vssubu_vx_nxv8i7:9; CHECK:       # %bb.0:10; CHECK-NEXT:    li a2, 12711; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma12; CHECK-NEXT:    vmv.v.x v9, a013; CHECK-NEXT:    vand.vx v8, v8, a214; CHECK-NEXT:    vand.vx v9, v9, a215; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t16; CHECK-NEXT:    ret17  %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 018  %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer19  %v = call <vscale x 8 x i7> @llvm.vp.usub.sat.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)20  ret <vscale x 8 x i7> %v21}22 23define <vscale x 1 x i8> @vssubu_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {24; CHECK-LABEL: vssubu_vv_nxv1i8:25; CHECK:       # %bb.0:26; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma27; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t28; CHECK-NEXT:    ret29  %v = call <vscale x 1 x i8> @llvm.vp.usub.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)30  ret <vscale x 1 x i8> %v31}32 33define <vscale x 1 x i8> @vssubu_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {34; CHECK-LABEL: vssubu_vv_nxv1i8_unmasked:35; CHECK:       # %bb.0:36; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma37; CHECK-NEXT:    vssubu.vv v8, v8, v938; CHECK-NEXT:    ret39  %v = call <vscale x 1 x i8> @llvm.vp.usub.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)40  ret <vscale x 1 x i8> %v41}42 43define <vscale x 1 x i8> @vssubu_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {44; CHECK-LABEL: vssubu_vx_nxv1i8:45; CHECK:       # %bb.0:46; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma47; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t48; CHECK-NEXT:    ret49  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 050  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer51  %v = call <vscale x 1 x i8> @llvm.vp.usub.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)52  ret <vscale x 1 x i8> %v53}54 55define <vscale x 1 x i8> @vssubu_vx_nxv1i8_commute(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {56; CHECK-LABEL: vssubu_vx_nxv1i8_commute:57; CHECK:       # %bb.0:58; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma59; CHECK-NEXT:    vmv.v.x v9, a060; CHECK-NEXT:    vssubu.vv v8, v9, v8, v0.t61; CHECK-NEXT:    ret62  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 063  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer64  %v = call <vscale x 1 x i8> @llvm.vp.usub.sat.nxv1i8(<vscale x 1 x i8> %vb, <vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 %evl)65  ret <vscale x 1 x i8> %v66}67 68define <vscale x 1 x i8> @vssubu_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {69; CHECK-LABEL: vssubu_vx_nxv1i8_unmasked:70; CHECK:       # %bb.0:71; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma72; CHECK-NEXT:    vssubu.vx v8, v8, a073; CHECK-NEXT:    ret74  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 075  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer76  %v = call <vscale x 1 x i8> @llvm.vp.usub.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)77  ret <vscale x 1 x i8> %v78}79 80define <vscale x 1 x i8> @vssubu_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {81; CHECK-LABEL: vssubu_vi_nxv1i8:82; CHECK:       # %bb.0:83; CHECK-NEXT:    li a1, -184; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma85; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t86; CHECK-NEXT:    ret87  %v = call <vscale x 1 x i8> @llvm.vp.usub.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 -1), <vscale x 1 x i1> %m, i32 %evl)88  ret <vscale x 1 x i8> %v89}90 91define <vscale x 1 x i8> @vssubu_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {92; CHECK-LABEL: vssubu_vi_nxv1i8_unmasked:93; CHECK:       # %bb.0:94; CHECK-NEXT:    li a1, -195; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma96; CHECK-NEXT:    vssubu.vx v8, v8, a197; CHECK-NEXT:    ret98  %v = call <vscale x 1 x i8> @llvm.vp.usub.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)99  ret <vscale x 1 x i8> %v100}101 102define <vscale x 2 x i8> @vssubu_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {103; CHECK-LABEL: vssubu_vv_nxv2i8:104; CHECK:       # %bb.0:105; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma106; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t107; CHECK-NEXT:    ret108  %v = call <vscale x 2 x i8> @llvm.vp.usub.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)109  ret <vscale x 2 x i8> %v110}111 112define <vscale x 2 x i8> @vssubu_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {113; CHECK-LABEL: vssubu_vv_nxv2i8_unmasked:114; CHECK:       # %bb.0:115; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma116; CHECK-NEXT:    vssubu.vv v8, v8, v9117; CHECK-NEXT:    ret118  %v = call <vscale x 2 x i8> @llvm.vp.usub.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)119  ret <vscale x 2 x i8> %v120}121 122define <vscale x 2 x i8> @vssubu_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {123; CHECK-LABEL: vssubu_vx_nxv2i8:124; CHECK:       # %bb.0:125; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma126; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t127; CHECK-NEXT:    ret128  %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0129  %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer130  %v = call <vscale x 2 x i8> @llvm.vp.usub.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)131  ret <vscale x 2 x i8> %v132}133 134define <vscale x 2 x i8> @vssubu_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {135; CHECK-LABEL: vssubu_vx_nxv2i8_unmasked:136; CHECK:       # %bb.0:137; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma138; CHECK-NEXT:    vssubu.vx v8, v8, a0139; CHECK-NEXT:    ret140  %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0141  %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer142  %v = call <vscale x 2 x i8> @llvm.vp.usub.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)143  ret <vscale x 2 x i8> %v144}145 146define <vscale x 2 x i8> @vssubu_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {147; CHECK-LABEL: vssubu_vi_nxv2i8:148; CHECK:       # %bb.0:149; CHECK-NEXT:    li a1, -1150; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma151; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t152; CHECK-NEXT:    ret153  %v = call <vscale x 2 x i8> @llvm.vp.usub.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 -1), <vscale x 2 x i1> %m, i32 %evl)154  ret <vscale x 2 x i8> %v155}156 157define <vscale x 2 x i8> @vssubu_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {158; CHECK-LABEL: vssubu_vi_nxv2i8_unmasked:159; CHECK:       # %bb.0:160; CHECK-NEXT:    li a1, -1161; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma162; CHECK-NEXT:    vssubu.vx v8, v8, a1163; CHECK-NEXT:    ret164  %v = call <vscale x 2 x i8> @llvm.vp.usub.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)165  ret <vscale x 2 x i8> %v166}167 168define <vscale x 3 x i8> @vssubu_vv_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {169; CHECK-LABEL: vssubu_vv_nxv3i8:170; CHECK:       # %bb.0:171; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma172; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t173; CHECK-NEXT:    ret174  %v = call <vscale x 3 x i8> @llvm.vp.usub.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 %evl)175  ret <vscale x 3 x i8> %v176}177 178define <vscale x 3 x i8> @vssubu_vv_nxv3i8_unmasked(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, i32 zeroext %evl) {179; CHECK-LABEL: vssubu_vv_nxv3i8_unmasked:180; CHECK:       # %bb.0:181; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma182; CHECK-NEXT:    vssubu.vv v8, v8, v9183; CHECK-NEXT:    ret184  %v = call <vscale x 3 x i8> @llvm.vp.usub.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> splat (i1 true), i32 %evl)185  ret <vscale x 3 x i8> %v186}187 188define <vscale x 3 x i8> @vssubu_vx_nxv3i8(<vscale x 3 x i8> %va, i8 %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {189; CHECK-LABEL: vssubu_vx_nxv3i8:190; CHECK:       # %bb.0:191; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma192; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t193; CHECK-NEXT:    ret194  %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0195  %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer196  %v = call <vscale x 3 x i8> @llvm.vp.usub.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> %m, i32 %evl)197  ret <vscale x 3 x i8> %v198}199 200define <vscale x 3 x i8> @vssubu_vx_nxv3i8_unmasked(<vscale x 3 x i8> %va, i8 %b, i32 zeroext %evl) {201; CHECK-LABEL: vssubu_vx_nxv3i8_unmasked:202; CHECK:       # %bb.0:203; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma204; CHECK-NEXT:    vssubu.vx v8, v8, a0205; CHECK-NEXT:    ret206  %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0207  %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer208  %v = call <vscale x 3 x i8> @llvm.vp.usub.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> splat (i1 true), i32 %evl)209  ret <vscale x 3 x i8> %v210}211 212define <vscale x 3 x i8> @vssubu_vi_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i1> %m, i32 zeroext %evl) {213; CHECK-LABEL: vssubu_vi_nxv3i8:214; CHECK:       # %bb.0:215; CHECK-NEXT:    li a1, -1216; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma217; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t218; CHECK-NEXT:    ret219  %v = call <vscale x 3 x i8> @llvm.vp.usub.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> splat (i8 -1), <vscale x 3 x i1> %m, i32 %evl)220  ret <vscale x 3 x i8> %v221}222 223define <vscale x 3 x i8> @vssubu_vi_nxv3i8_unmasked(<vscale x 3 x i8> %va, i32 zeroext %evl) {224; CHECK-LABEL: vssubu_vi_nxv3i8_unmasked:225; CHECK:       # %bb.0:226; CHECK-NEXT:    li a1, -1227; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma228; CHECK-NEXT:    vssubu.vx v8, v8, a1229; CHECK-NEXT:    ret230  %v = call <vscale x 3 x i8> @llvm.vp.usub.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)231  ret <vscale x 3 x i8> %v232}233 234define <vscale x 4 x i8> @vssubu_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {235; CHECK-LABEL: vssubu_vv_nxv4i8:236; CHECK:       # %bb.0:237; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma238; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t239; CHECK-NEXT:    ret240  %v = call <vscale x 4 x i8> @llvm.vp.usub.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)241  ret <vscale x 4 x i8> %v242}243 244define <vscale x 4 x i8> @vssubu_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {245; CHECK-LABEL: vssubu_vv_nxv4i8_unmasked:246; CHECK:       # %bb.0:247; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma248; CHECK-NEXT:    vssubu.vv v8, v8, v9249; CHECK-NEXT:    ret250  %v = call <vscale x 4 x i8> @llvm.vp.usub.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)251  ret <vscale x 4 x i8> %v252}253 254define <vscale x 4 x i8> @vssubu_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {255; CHECK-LABEL: vssubu_vx_nxv4i8:256; CHECK:       # %bb.0:257; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma258; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t259; CHECK-NEXT:    ret260  %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0261  %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer262  %v = call <vscale x 4 x i8> @llvm.vp.usub.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)263  ret <vscale x 4 x i8> %v264}265 266define <vscale x 4 x i8> @vssubu_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {267; CHECK-LABEL: vssubu_vx_nxv4i8_unmasked:268; CHECK:       # %bb.0:269; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma270; CHECK-NEXT:    vssubu.vx v8, v8, a0271; CHECK-NEXT:    ret272  %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0273  %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer274  %v = call <vscale x 4 x i8> @llvm.vp.usub.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)275  ret <vscale x 4 x i8> %v276}277 278define <vscale x 4 x i8> @vssubu_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {279; CHECK-LABEL: vssubu_vi_nxv4i8:280; CHECK:       # %bb.0:281; CHECK-NEXT:    li a1, -1282; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma283; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t284; CHECK-NEXT:    ret285  %v = call <vscale x 4 x i8> @llvm.vp.usub.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 -1), <vscale x 4 x i1> %m, i32 %evl)286  ret <vscale x 4 x i8> %v287}288 289define <vscale x 4 x i8> @vssubu_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {290; CHECK-LABEL: vssubu_vi_nxv4i8_unmasked:291; CHECK:       # %bb.0:292; CHECK-NEXT:    li a1, -1293; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma294; CHECK-NEXT:    vssubu.vx v8, v8, a1295; CHECK-NEXT:    ret296  %v = call <vscale x 4 x i8> @llvm.vp.usub.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)297  ret <vscale x 4 x i8> %v298}299 300define <vscale x 8 x i8> @vssubu_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {301; CHECK-LABEL: vssubu_vv_nxv8i8:302; CHECK:       # %bb.0:303; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma304; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t305; CHECK-NEXT:    ret306  %v = call <vscale x 8 x i8> @llvm.vp.usub.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)307  ret <vscale x 8 x i8> %v308}309 310define <vscale x 8 x i8> @vssubu_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {311; CHECK-LABEL: vssubu_vv_nxv8i8_unmasked:312; CHECK:       # %bb.0:313; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma314; CHECK-NEXT:    vssubu.vv v8, v8, v9315; CHECK-NEXT:    ret316  %v = call <vscale x 8 x i8> @llvm.vp.usub.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)317  ret <vscale x 8 x i8> %v318}319 320define <vscale x 8 x i8> @vssubu_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {321; CHECK-LABEL: vssubu_vx_nxv8i8:322; CHECK:       # %bb.0:323; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma324; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t325; CHECK-NEXT:    ret326  %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0327  %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer328  %v = call <vscale x 8 x i8> @llvm.vp.usub.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)329  ret <vscale x 8 x i8> %v330}331 332define <vscale x 8 x i8> @vssubu_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {333; CHECK-LABEL: vssubu_vx_nxv8i8_unmasked:334; CHECK:       # %bb.0:335; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma336; CHECK-NEXT:    vssubu.vx v8, v8, a0337; CHECK-NEXT:    ret338  %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0339  %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer340  %v = call <vscale x 8 x i8> @llvm.vp.usub.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)341  ret <vscale x 8 x i8> %v342}343 344define <vscale x 8 x i8> @vssubu_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {345; CHECK-LABEL: vssubu_vi_nxv8i8:346; CHECK:       # %bb.0:347; CHECK-NEXT:    li a1, -1348; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma349; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t350; CHECK-NEXT:    ret351  %v = call <vscale x 8 x i8> @llvm.vp.usub.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 -1), <vscale x 8 x i1> %m, i32 %evl)352  ret <vscale x 8 x i8> %v353}354 355define <vscale x 8 x i8> @vssubu_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {356; CHECK-LABEL: vssubu_vi_nxv8i8_unmasked:357; CHECK:       # %bb.0:358; CHECK-NEXT:    li a1, -1359; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma360; CHECK-NEXT:    vssubu.vx v8, v8, a1361; CHECK-NEXT:    ret362  %v = call <vscale x 8 x i8> @llvm.vp.usub.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)363  ret <vscale x 8 x i8> %v364}365 366define <vscale x 16 x i8> @vssubu_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {367; CHECK-LABEL: vssubu_vv_nxv16i8:368; CHECK:       # %bb.0:369; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma370; CHECK-NEXT:    vssubu.vv v8, v8, v10, v0.t371; CHECK-NEXT:    ret372  %v = call <vscale x 16 x i8> @llvm.vp.usub.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)373  ret <vscale x 16 x i8> %v374}375 376define <vscale x 16 x i8> @vssubu_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {377; CHECK-LABEL: vssubu_vv_nxv16i8_unmasked:378; CHECK:       # %bb.0:379; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma380; CHECK-NEXT:    vssubu.vv v8, v8, v10381; CHECK-NEXT:    ret382  %v = call <vscale x 16 x i8> @llvm.vp.usub.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)383  ret <vscale x 16 x i8> %v384}385 386define <vscale x 16 x i8> @vssubu_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {387; CHECK-LABEL: vssubu_vx_nxv16i8:388; CHECK:       # %bb.0:389; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma390; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t391; CHECK-NEXT:    ret392  %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0393  %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer394  %v = call <vscale x 16 x i8> @llvm.vp.usub.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)395  ret <vscale x 16 x i8> %v396}397 398define <vscale x 16 x i8> @vssubu_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {399; CHECK-LABEL: vssubu_vx_nxv16i8_unmasked:400; CHECK:       # %bb.0:401; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma402; CHECK-NEXT:    vssubu.vx v8, v8, a0403; CHECK-NEXT:    ret404  %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0405  %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer406  %v = call <vscale x 16 x i8> @llvm.vp.usub.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)407  ret <vscale x 16 x i8> %v408}409 410define <vscale x 16 x i8> @vssubu_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {411; CHECK-LABEL: vssubu_vi_nxv16i8:412; CHECK:       # %bb.0:413; CHECK-NEXT:    li a1, -1414; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma415; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t416; CHECK-NEXT:    ret417  %v = call <vscale x 16 x i8> @llvm.vp.usub.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 -1), <vscale x 16 x i1> %m, i32 %evl)418  ret <vscale x 16 x i8> %v419}420 421define <vscale x 16 x i8> @vssubu_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {422; CHECK-LABEL: vssubu_vi_nxv16i8_unmasked:423; CHECK:       # %bb.0:424; CHECK-NEXT:    li a1, -1425; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma426; CHECK-NEXT:    vssubu.vx v8, v8, a1427; CHECK-NEXT:    ret428  %v = call <vscale x 16 x i8> @llvm.vp.usub.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)429  ret <vscale x 16 x i8> %v430}431 432define <vscale x 32 x i8> @vssubu_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {433; CHECK-LABEL: vssubu_vv_nxv32i8:434; CHECK:       # %bb.0:435; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma436; CHECK-NEXT:    vssubu.vv v8, v8, v12, v0.t437; CHECK-NEXT:    ret438  %v = call <vscale x 32 x i8> @llvm.vp.usub.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)439  ret <vscale x 32 x i8> %v440}441 442define <vscale x 32 x i8> @vssubu_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {443; CHECK-LABEL: vssubu_vv_nxv32i8_unmasked:444; CHECK:       # %bb.0:445; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma446; CHECK-NEXT:    vssubu.vv v8, v8, v12447; CHECK-NEXT:    ret448  %v = call <vscale x 32 x i8> @llvm.vp.usub.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)449  ret <vscale x 32 x i8> %v450}451 452define <vscale x 32 x i8> @vssubu_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {453; CHECK-LABEL: vssubu_vx_nxv32i8:454; CHECK:       # %bb.0:455; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma456; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t457; CHECK-NEXT:    ret458  %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0459  %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer460  %v = call <vscale x 32 x i8> @llvm.vp.usub.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)461  ret <vscale x 32 x i8> %v462}463 464define <vscale x 32 x i8> @vssubu_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {465; CHECK-LABEL: vssubu_vx_nxv32i8_unmasked:466; CHECK:       # %bb.0:467; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma468; CHECK-NEXT:    vssubu.vx v8, v8, a0469; CHECK-NEXT:    ret470  %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0471  %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer472  %v = call <vscale x 32 x i8> @llvm.vp.usub.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)473  ret <vscale x 32 x i8> %v474}475 476define <vscale x 32 x i8> @vssubu_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {477; CHECK-LABEL: vssubu_vi_nxv32i8:478; CHECK:       # %bb.0:479; CHECK-NEXT:    li a1, -1480; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma481; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t482; CHECK-NEXT:    ret483  %v = call <vscale x 32 x i8> @llvm.vp.usub.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 -1), <vscale x 32 x i1> %m, i32 %evl)484  ret <vscale x 32 x i8> %v485}486 487define <vscale x 32 x i8> @vssubu_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {488; CHECK-LABEL: vssubu_vi_nxv32i8_unmasked:489; CHECK:       # %bb.0:490; CHECK-NEXT:    li a1, -1491; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma492; CHECK-NEXT:    vssubu.vx v8, v8, a1493; CHECK-NEXT:    ret494  %v = call <vscale x 32 x i8> @llvm.vp.usub.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)495  ret <vscale x 32 x i8> %v496}497 498define <vscale x 64 x i8> @vssubu_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {499; CHECK-LABEL: vssubu_vv_nxv64i8:500; CHECK:       # %bb.0:501; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma502; CHECK-NEXT:    vssubu.vv v8, v8, v16, v0.t503; CHECK-NEXT:    ret504  %v = call <vscale x 64 x i8> @llvm.vp.usub.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)505  ret <vscale x 64 x i8> %v506}507 508define <vscale x 64 x i8> @vssubu_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {509; CHECK-LABEL: vssubu_vv_nxv64i8_unmasked:510; CHECK:       # %bb.0:511; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma512; CHECK-NEXT:    vssubu.vv v8, v8, v16513; CHECK-NEXT:    ret514  %v = call <vscale x 64 x i8> @llvm.vp.usub.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)515  ret <vscale x 64 x i8> %v516}517 518define <vscale x 64 x i8> @vssubu_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {519; CHECK-LABEL: vssubu_vx_nxv64i8:520; CHECK:       # %bb.0:521; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma522; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t523; CHECK-NEXT:    ret524  %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0525  %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer526  %v = call <vscale x 64 x i8> @llvm.vp.usub.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)527  ret <vscale x 64 x i8> %v528}529 530define <vscale x 64 x i8> @vssubu_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {531; CHECK-LABEL: vssubu_vx_nxv64i8_unmasked:532; CHECK:       # %bb.0:533; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma534; CHECK-NEXT:    vssubu.vx v8, v8, a0535; CHECK-NEXT:    ret536  %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0537  %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer538  %v = call <vscale x 64 x i8> @llvm.vp.usub.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)539  ret <vscale x 64 x i8> %v540}541 542define <vscale x 64 x i8> @vssubu_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {543; CHECK-LABEL: vssubu_vi_nxv64i8:544; CHECK:       # %bb.0:545; CHECK-NEXT:    li a1, -1546; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma547; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t548; CHECK-NEXT:    ret549  %v = call <vscale x 64 x i8> @llvm.vp.usub.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 -1), <vscale x 64 x i1> %m, i32 %evl)550  ret <vscale x 64 x i8> %v551}552 553define <vscale x 64 x i8> @vssubu_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {554; CHECK-LABEL: vssubu_vi_nxv64i8_unmasked:555; CHECK:       # %bb.0:556; CHECK-NEXT:    li a1, -1557; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma558; CHECK-NEXT:    vssubu.vx v8, v8, a1559; CHECK-NEXT:    ret560  %v = call <vscale x 64 x i8> @llvm.vp.usub.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)561  ret <vscale x 64 x i8> %v562}563 564; Test that split-legalization works when the mask itself needs splitting.565 566define <vscale x 128 x i8> @vssubu_vi_nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i1> %m, i32 zeroext %evl) {567; CHECK-LABEL: vssubu_vi_nxv128i8:568; CHECK:       # %bb.0:569; CHECK-NEXT:    vsetvli a2, zero, e8, m8, ta, ma570; CHECK-NEXT:    vmv1r.v v24, v0571; CHECK-NEXT:    vlm.v v0, (a0)572; CHECK-NEXT:    csrr a0, vlenb573; CHECK-NEXT:    slli a0, a0, 3574; CHECK-NEXT:    sub a2, a1, a0575; CHECK-NEXT:    sltu a3, a1, a2576; CHECK-NEXT:    addi a3, a3, -1577; CHECK-NEXT:    and a3, a3, a2578; CHECK-NEXT:    li a2, -1579; CHECK-NEXT:    vsetvli zero, a3, e8, m8, ta, ma580; CHECK-NEXT:    vssubu.vx v16, v16, a2, v0.t581; CHECK-NEXT:    bltu a1, a0, .LBB50_2582; CHECK-NEXT:  # %bb.1:583; CHECK-NEXT:    mv a1, a0584; CHECK-NEXT:  .LBB50_2:585; CHECK-NEXT:    vmv1r.v v0, v24586; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma587; CHECK-NEXT:    vssubu.vx v8, v8, a2, v0.t588; CHECK-NEXT:    ret589  %v = call <vscale x 128 x i8> @llvm.vp.usub.sat.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> splat (i8 -1), <vscale x 128 x i1> %m, i32 %evl)590  ret <vscale x 128 x i8> %v591}592 593define <vscale x 128 x i8> @vssubu_vi_nxv128i8_unmasked(<vscale x 128 x i8> %va, i32 zeroext %evl) {594; CHECK-LABEL: vssubu_vi_nxv128i8_unmasked:595; CHECK:       # %bb.0:596; CHECK-NEXT:    csrr a1, vlenb597; CHECK-NEXT:    slli a1, a1, 3598; CHECK-NEXT:    sub a2, a0, a1599; CHECK-NEXT:    sltu a3, a0, a2600; CHECK-NEXT:    addi a3, a3, -1601; CHECK-NEXT:    and a3, a3, a2602; CHECK-NEXT:    li a2, -1603; CHECK-NEXT:    vsetvli zero, a3, e8, m8, ta, ma604; CHECK-NEXT:    vssubu.vx v16, v16, a2605; CHECK-NEXT:    bltu a0, a1, .LBB51_2606; CHECK-NEXT:  # %bb.1:607; CHECK-NEXT:    mv a0, a1608; CHECK-NEXT:  .LBB51_2:609; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma610; CHECK-NEXT:    vssubu.vx v8, v8, a2611; CHECK-NEXT:    ret612  %v = call <vscale x 128 x i8> @llvm.vp.usub.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)613  ret <vscale x 128 x i8> %v614}615 616define <vscale x 1 x i16> @vssubu_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {617; CHECK-LABEL: vssubu_vv_nxv1i16:618; CHECK:       # %bb.0:619; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma620; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t621; CHECK-NEXT:    ret622  %v = call <vscale x 1 x i16> @llvm.vp.usub.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)623  ret <vscale x 1 x i16> %v624}625 626define <vscale x 1 x i16> @vssubu_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {627; CHECK-LABEL: vssubu_vv_nxv1i16_unmasked:628; CHECK:       # %bb.0:629; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma630; CHECK-NEXT:    vssubu.vv v8, v8, v9631; CHECK-NEXT:    ret632  %v = call <vscale x 1 x i16> @llvm.vp.usub.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)633  ret <vscale x 1 x i16> %v634}635 636define <vscale x 1 x i16> @vssubu_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {637; CHECK-LABEL: vssubu_vx_nxv1i16:638; CHECK:       # %bb.0:639; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma640; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t641; CHECK-NEXT:    ret642  %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0643  %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer644  %v = call <vscale x 1 x i16> @llvm.vp.usub.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)645  ret <vscale x 1 x i16> %v646}647 648define <vscale x 1 x i16> @vssubu_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {649; CHECK-LABEL: vssubu_vx_nxv1i16_unmasked:650; CHECK:       # %bb.0:651; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma652; CHECK-NEXT:    vssubu.vx v8, v8, a0653; CHECK-NEXT:    ret654  %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0655  %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer656  %v = call <vscale x 1 x i16> @llvm.vp.usub.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)657  ret <vscale x 1 x i16> %v658}659 660define <vscale x 1 x i16> @vssubu_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {661; CHECK-LABEL: vssubu_vi_nxv1i16:662; CHECK:       # %bb.0:663; CHECK-NEXT:    li a1, -1664; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma665; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t666; CHECK-NEXT:    ret667  %v = call <vscale x 1 x i16> @llvm.vp.usub.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 -1), <vscale x 1 x i1> %m, i32 %evl)668  ret <vscale x 1 x i16> %v669}670 671define <vscale x 1 x i16> @vssubu_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {672; CHECK-LABEL: vssubu_vi_nxv1i16_unmasked:673; CHECK:       # %bb.0:674; CHECK-NEXT:    li a1, -1675; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma676; CHECK-NEXT:    vssubu.vx v8, v8, a1677; CHECK-NEXT:    ret678  %v = call <vscale x 1 x i16> @llvm.vp.usub.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)679  ret <vscale x 1 x i16> %v680}681 682define <vscale x 2 x i16> @vssubu_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {683; CHECK-LABEL: vssubu_vv_nxv2i16:684; CHECK:       # %bb.0:685; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma686; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t687; CHECK-NEXT:    ret688  %v = call <vscale x 2 x i16> @llvm.vp.usub.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)689  ret <vscale x 2 x i16> %v690}691 692define <vscale x 2 x i16> @vssubu_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {693; CHECK-LABEL: vssubu_vv_nxv2i16_unmasked:694; CHECK:       # %bb.0:695; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma696; CHECK-NEXT:    vssubu.vv v8, v8, v9697; CHECK-NEXT:    ret698  %v = call <vscale x 2 x i16> @llvm.vp.usub.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)699  ret <vscale x 2 x i16> %v700}701 702define <vscale x 2 x i16> @vssubu_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {703; CHECK-LABEL: vssubu_vx_nxv2i16:704; CHECK:       # %bb.0:705; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma706; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t707; CHECK-NEXT:    ret708  %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0709  %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer710  %v = call <vscale x 2 x i16> @llvm.vp.usub.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)711  ret <vscale x 2 x i16> %v712}713 714define <vscale x 2 x i16> @vssubu_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {715; CHECK-LABEL: vssubu_vx_nxv2i16_unmasked:716; CHECK:       # %bb.0:717; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma718; CHECK-NEXT:    vssubu.vx v8, v8, a0719; CHECK-NEXT:    ret720  %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0721  %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer722  %v = call <vscale x 2 x i16> @llvm.vp.usub.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)723  ret <vscale x 2 x i16> %v724}725 726define <vscale x 2 x i16> @vssubu_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {727; CHECK-LABEL: vssubu_vi_nxv2i16:728; CHECK:       # %bb.0:729; CHECK-NEXT:    li a1, -1730; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma731; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t732; CHECK-NEXT:    ret733  %v = call <vscale x 2 x i16> @llvm.vp.usub.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 -1), <vscale x 2 x i1> %m, i32 %evl)734  ret <vscale x 2 x i16> %v735}736 737define <vscale x 2 x i16> @vssubu_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {738; CHECK-LABEL: vssubu_vi_nxv2i16_unmasked:739; CHECK:       # %bb.0:740; CHECK-NEXT:    li a1, -1741; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma742; CHECK-NEXT:    vssubu.vx v8, v8, a1743; CHECK-NEXT:    ret744  %v = call <vscale x 2 x i16> @llvm.vp.usub.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)745  ret <vscale x 2 x i16> %v746}747 748define <vscale x 4 x i16> @vssubu_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {749; CHECK-LABEL: vssubu_vv_nxv4i16:750; CHECK:       # %bb.0:751; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma752; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t753; CHECK-NEXT:    ret754  %v = call <vscale x 4 x i16> @llvm.vp.usub.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)755  ret <vscale x 4 x i16> %v756}757 758define <vscale x 4 x i16> @vssubu_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {759; CHECK-LABEL: vssubu_vv_nxv4i16_unmasked:760; CHECK:       # %bb.0:761; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma762; CHECK-NEXT:    vssubu.vv v8, v8, v9763; CHECK-NEXT:    ret764  %v = call <vscale x 4 x i16> @llvm.vp.usub.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)765  ret <vscale x 4 x i16> %v766}767 768define <vscale x 4 x i16> @vssubu_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {769; CHECK-LABEL: vssubu_vx_nxv4i16:770; CHECK:       # %bb.0:771; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma772; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t773; CHECK-NEXT:    ret774  %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0775  %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer776  %v = call <vscale x 4 x i16> @llvm.vp.usub.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)777  ret <vscale x 4 x i16> %v778}779 780define <vscale x 4 x i16> @vssubu_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {781; CHECK-LABEL: vssubu_vx_nxv4i16_unmasked:782; CHECK:       # %bb.0:783; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma784; CHECK-NEXT:    vssubu.vx v8, v8, a0785; CHECK-NEXT:    ret786  %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0787  %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer788  %v = call <vscale x 4 x i16> @llvm.vp.usub.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)789  ret <vscale x 4 x i16> %v790}791 792define <vscale x 4 x i16> @vssubu_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {793; CHECK-LABEL: vssubu_vi_nxv4i16:794; CHECK:       # %bb.0:795; CHECK-NEXT:    li a1, -1796; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma797; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t798; CHECK-NEXT:    ret799  %v = call <vscale x 4 x i16> @llvm.vp.usub.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 -1), <vscale x 4 x i1> %m, i32 %evl)800  ret <vscale x 4 x i16> %v801}802 803define <vscale x 4 x i16> @vssubu_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {804; CHECK-LABEL: vssubu_vi_nxv4i16_unmasked:805; CHECK:       # %bb.0:806; CHECK-NEXT:    li a1, -1807; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma808; CHECK-NEXT:    vssubu.vx v8, v8, a1809; CHECK-NEXT:    ret810  %v = call <vscale x 4 x i16> @llvm.vp.usub.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)811  ret <vscale x 4 x i16> %v812}813 814define <vscale x 8 x i16> @vssubu_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {815; CHECK-LABEL: vssubu_vv_nxv8i16:816; CHECK:       # %bb.0:817; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma818; CHECK-NEXT:    vssubu.vv v8, v8, v10, v0.t819; CHECK-NEXT:    ret820  %v = call <vscale x 8 x i16> @llvm.vp.usub.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)821  ret <vscale x 8 x i16> %v822}823 824define <vscale x 8 x i16> @vssubu_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {825; CHECK-LABEL: vssubu_vv_nxv8i16_unmasked:826; CHECK:       # %bb.0:827; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma828; CHECK-NEXT:    vssubu.vv v8, v8, v10829; CHECK-NEXT:    ret830  %v = call <vscale x 8 x i16> @llvm.vp.usub.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)831  ret <vscale x 8 x i16> %v832}833 834define <vscale x 8 x i16> @vssubu_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {835; CHECK-LABEL: vssubu_vx_nxv8i16:836; CHECK:       # %bb.0:837; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma838; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t839; CHECK-NEXT:    ret840  %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0841  %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer842  %v = call <vscale x 8 x i16> @llvm.vp.usub.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)843  ret <vscale x 8 x i16> %v844}845 846define <vscale x 8 x i16> @vssubu_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {847; CHECK-LABEL: vssubu_vx_nxv8i16_unmasked:848; CHECK:       # %bb.0:849; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma850; CHECK-NEXT:    vssubu.vx v8, v8, a0851; CHECK-NEXT:    ret852  %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0853  %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer854  %v = call <vscale x 8 x i16> @llvm.vp.usub.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)855  ret <vscale x 8 x i16> %v856}857 858define <vscale x 8 x i16> @vssubu_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {859; CHECK-LABEL: vssubu_vi_nxv8i16:860; CHECK:       # %bb.0:861; CHECK-NEXT:    li a1, -1862; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma863; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t864; CHECK-NEXT:    ret865  %v = call <vscale x 8 x i16> @llvm.vp.usub.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 -1), <vscale x 8 x i1> %m, i32 %evl)866  ret <vscale x 8 x i16> %v867}868 869define <vscale x 8 x i16> @vssubu_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {870; CHECK-LABEL: vssubu_vi_nxv8i16_unmasked:871; CHECK:       # %bb.0:872; CHECK-NEXT:    li a1, -1873; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma874; CHECK-NEXT:    vssubu.vx v8, v8, a1875; CHECK-NEXT:    ret876  %v = call <vscale x 8 x i16> @llvm.vp.usub.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)877  ret <vscale x 8 x i16> %v878}879 880define <vscale x 16 x i16> @vssubu_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {881; CHECK-LABEL: vssubu_vv_nxv16i16:882; CHECK:       # %bb.0:883; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma884; CHECK-NEXT:    vssubu.vv v8, v8, v12, v0.t885; CHECK-NEXT:    ret886  %v = call <vscale x 16 x i16> @llvm.vp.usub.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)887  ret <vscale x 16 x i16> %v888}889 890define <vscale x 16 x i16> @vssubu_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {891; CHECK-LABEL: vssubu_vv_nxv16i16_unmasked:892; CHECK:       # %bb.0:893; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma894; CHECK-NEXT:    vssubu.vv v8, v8, v12895; CHECK-NEXT:    ret896  %v = call <vscale x 16 x i16> @llvm.vp.usub.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)897  ret <vscale x 16 x i16> %v898}899 900define <vscale x 16 x i16> @vssubu_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {901; CHECK-LABEL: vssubu_vx_nxv16i16:902; CHECK:       # %bb.0:903; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma904; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t905; CHECK-NEXT:    ret906  %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0907  %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer908  %v = call <vscale x 16 x i16> @llvm.vp.usub.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)909  ret <vscale x 16 x i16> %v910}911 912define <vscale x 16 x i16> @vssubu_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {913; CHECK-LABEL: vssubu_vx_nxv16i16_unmasked:914; CHECK:       # %bb.0:915; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma916; CHECK-NEXT:    vssubu.vx v8, v8, a0917; CHECK-NEXT:    ret918  %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0919  %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer920  %v = call <vscale x 16 x i16> @llvm.vp.usub.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)921  ret <vscale x 16 x i16> %v922}923 924define <vscale x 16 x i16> @vssubu_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {925; CHECK-LABEL: vssubu_vi_nxv16i16:926; CHECK:       # %bb.0:927; CHECK-NEXT:    li a1, -1928; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma929; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t930; CHECK-NEXT:    ret931  %v = call <vscale x 16 x i16> @llvm.vp.usub.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 -1), <vscale x 16 x i1> %m, i32 %evl)932  ret <vscale x 16 x i16> %v933}934 935define <vscale x 16 x i16> @vssubu_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {936; CHECK-LABEL: vssubu_vi_nxv16i16_unmasked:937; CHECK:       # %bb.0:938; CHECK-NEXT:    li a1, -1939; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma940; CHECK-NEXT:    vssubu.vx v8, v8, a1941; CHECK-NEXT:    ret942  %v = call <vscale x 16 x i16> @llvm.vp.usub.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)943  ret <vscale x 16 x i16> %v944}945 946define <vscale x 32 x i16> @vssubu_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {947; CHECK-LABEL: vssubu_vv_nxv32i16:948; CHECK:       # %bb.0:949; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma950; CHECK-NEXT:    vssubu.vv v8, v8, v16, v0.t951; CHECK-NEXT:    ret952  %v = call <vscale x 32 x i16> @llvm.vp.usub.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)953  ret <vscale x 32 x i16> %v954}955 956define <vscale x 32 x i16> @vssubu_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {957; CHECK-LABEL: vssubu_vv_nxv32i16_unmasked:958; CHECK:       # %bb.0:959; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma960; CHECK-NEXT:    vssubu.vv v8, v8, v16961; CHECK-NEXT:    ret962  %v = call <vscale x 32 x i16> @llvm.vp.usub.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)963  ret <vscale x 32 x i16> %v964}965 966define <vscale x 32 x i16> @vssubu_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {967; CHECK-LABEL: vssubu_vx_nxv32i16:968; CHECK:       # %bb.0:969; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma970; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t971; CHECK-NEXT:    ret972  %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0973  %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer974  %v = call <vscale x 32 x i16> @llvm.vp.usub.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)975  ret <vscale x 32 x i16> %v976}977 978define <vscale x 32 x i16> @vssubu_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {979; CHECK-LABEL: vssubu_vx_nxv32i16_unmasked:980; CHECK:       # %bb.0:981; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma982; CHECK-NEXT:    vssubu.vx v8, v8, a0983; CHECK-NEXT:    ret984  %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0985  %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer986  %v = call <vscale x 32 x i16> @llvm.vp.usub.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)987  ret <vscale x 32 x i16> %v988}989 990define <vscale x 32 x i16> @vssubu_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {991; CHECK-LABEL: vssubu_vi_nxv32i16:992; CHECK:       # %bb.0:993; CHECK-NEXT:    li a1, -1994; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma995; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t996; CHECK-NEXT:    ret997  %v = call <vscale x 32 x i16> @llvm.vp.usub.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 -1), <vscale x 32 x i1> %m, i32 %evl)998  ret <vscale x 32 x i16> %v999}1000 1001define <vscale x 32 x i16> @vssubu_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {1002; CHECK-LABEL: vssubu_vi_nxv32i16_unmasked:1003; CHECK:       # %bb.0:1004; CHECK-NEXT:    li a1, -11005; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma1006; CHECK-NEXT:    vssubu.vx v8, v8, a11007; CHECK-NEXT:    ret1008  %v = call <vscale x 32 x i16> @llvm.vp.usub.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)1009  ret <vscale x 32 x i16> %v1010}1011 1012define <vscale x 1 x i32> @vssubu_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1013; CHECK-LABEL: vssubu_vv_nxv1i32:1014; CHECK:       # %bb.0:1015; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma1016; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t1017; CHECK-NEXT:    ret1018  %v = call <vscale x 1 x i32> @llvm.vp.usub.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)1019  ret <vscale x 1 x i32> %v1020}1021 1022define <vscale x 1 x i32> @vssubu_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {1023; CHECK-LABEL: vssubu_vv_nxv1i32_unmasked:1024; CHECK:       # %bb.0:1025; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma1026; CHECK-NEXT:    vssubu.vv v8, v8, v91027; CHECK-NEXT:    ret1028  %v = call <vscale x 1 x i32> @llvm.vp.usub.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)1029  ret <vscale x 1 x i32> %v1030}1031 1032define <vscale x 1 x i32> @vssubu_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1033; CHECK-LABEL: vssubu_vx_nxv1i32:1034; CHECK:       # %bb.0:1035; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma1036; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t1037; CHECK-NEXT:    ret1038  %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 01039  %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer1040  %v = call <vscale x 1 x i32> @llvm.vp.usub.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)1041  ret <vscale x 1 x i32> %v1042}1043 1044define <vscale x 1 x i32> @vssubu_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {1045; CHECK-LABEL: vssubu_vx_nxv1i32_unmasked:1046; CHECK:       # %bb.0:1047; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma1048; CHECK-NEXT:    vssubu.vx v8, v8, a01049; CHECK-NEXT:    ret1050  %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 01051  %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer1052  %v = call <vscale x 1 x i32> @llvm.vp.usub.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)1053  ret <vscale x 1 x i32> %v1054}1055 1056define <vscale x 1 x i32> @vssubu_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {1057; CHECK-LABEL: vssubu_vi_nxv1i32:1058; CHECK:       # %bb.0:1059; CHECK-NEXT:    li a1, -11060; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma1061; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t1062; CHECK-NEXT:    ret1063  %v = call <vscale x 1 x i32> @llvm.vp.usub.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 -1), <vscale x 1 x i1> %m, i32 %evl)1064  ret <vscale x 1 x i32> %v1065}1066 1067define <vscale x 1 x i32> @vssubu_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {1068; CHECK-LABEL: vssubu_vi_nxv1i32_unmasked:1069; CHECK:       # %bb.0:1070; CHECK-NEXT:    li a1, -11071; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma1072; CHECK-NEXT:    vssubu.vx v8, v8, a11073; CHECK-NEXT:    ret1074  %v = call <vscale x 1 x i32> @llvm.vp.usub.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)1075  ret <vscale x 1 x i32> %v1076}1077 1078define <vscale x 2 x i32> @vssubu_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1079; CHECK-LABEL: vssubu_vv_nxv2i32:1080; CHECK:       # %bb.0:1081; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1082; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t1083; CHECK-NEXT:    ret1084  %v = call <vscale x 2 x i32> @llvm.vp.usub.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)1085  ret <vscale x 2 x i32> %v1086}1087 1088define <vscale x 2 x i32> @vssubu_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {1089; CHECK-LABEL: vssubu_vv_nxv2i32_unmasked:1090; CHECK:       # %bb.0:1091; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1092; CHECK-NEXT:    vssubu.vv v8, v8, v91093; CHECK-NEXT:    ret1094  %v = call <vscale x 2 x i32> @llvm.vp.usub.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)1095  ret <vscale x 2 x i32> %v1096}1097 1098define <vscale x 2 x i32> @vssubu_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1099; CHECK-LABEL: vssubu_vx_nxv2i32:1100; CHECK:       # %bb.0:1101; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma1102; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t1103; CHECK-NEXT:    ret1104  %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 01105  %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer1106  %v = call <vscale x 2 x i32> @llvm.vp.usub.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)1107  ret <vscale x 2 x i32> %v1108}1109 1110define <vscale x 2 x i32> @vssubu_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {1111; CHECK-LABEL: vssubu_vx_nxv2i32_unmasked:1112; CHECK:       # %bb.0:1113; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma1114; CHECK-NEXT:    vssubu.vx v8, v8, a01115; CHECK-NEXT:    ret1116  %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 01117  %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer1118  %v = call <vscale x 2 x i32> @llvm.vp.usub.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)1119  ret <vscale x 2 x i32> %v1120}1121 1122define <vscale x 2 x i32> @vssubu_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {1123; CHECK-LABEL: vssubu_vi_nxv2i32:1124; CHECK:       # %bb.0:1125; CHECK-NEXT:    li a1, -11126; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1127; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t1128; CHECK-NEXT:    ret1129  %v = call <vscale x 2 x i32> @llvm.vp.usub.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 -1), <vscale x 2 x i1> %m, i32 %evl)1130  ret <vscale x 2 x i32> %v1131}1132 1133define <vscale x 2 x i32> @vssubu_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {1134; CHECK-LABEL: vssubu_vi_nxv2i32_unmasked:1135; CHECK:       # %bb.0:1136; CHECK-NEXT:    li a1, -11137; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1138; CHECK-NEXT:    vssubu.vx v8, v8, a11139; CHECK-NEXT:    ret1140  %v = call <vscale x 2 x i32> @llvm.vp.usub.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)1141  ret <vscale x 2 x i32> %v1142}1143 1144define <vscale x 4 x i32> @vssubu_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1145; CHECK-LABEL: vssubu_vv_nxv4i32:1146; CHECK:       # %bb.0:1147; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1148; CHECK-NEXT:    vssubu.vv v8, v8, v10, v0.t1149; CHECK-NEXT:    ret1150  %v = call <vscale x 4 x i32> @llvm.vp.usub.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)1151  ret <vscale x 4 x i32> %v1152}1153 1154define <vscale x 4 x i32> @vssubu_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {1155; CHECK-LABEL: vssubu_vv_nxv4i32_unmasked:1156; CHECK:       # %bb.0:1157; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1158; CHECK-NEXT:    vssubu.vv v8, v8, v101159; CHECK-NEXT:    ret1160  %v = call <vscale x 4 x i32> @llvm.vp.usub.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)1161  ret <vscale x 4 x i32> %v1162}1163 1164define <vscale x 4 x i32> @vssubu_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1165; CHECK-LABEL: vssubu_vx_nxv4i32:1166; CHECK:       # %bb.0:1167; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma1168; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t1169; CHECK-NEXT:    ret1170  %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 01171  %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1172  %v = call <vscale x 4 x i32> @llvm.vp.usub.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)1173  ret <vscale x 4 x i32> %v1174}1175 1176define <vscale x 4 x i32> @vssubu_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {1177; CHECK-LABEL: vssubu_vx_nxv4i32_unmasked:1178; CHECK:       # %bb.0:1179; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma1180; CHECK-NEXT:    vssubu.vx v8, v8, a01181; CHECK-NEXT:    ret1182  %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 01183  %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1184  %v = call <vscale x 4 x i32> @llvm.vp.usub.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)1185  ret <vscale x 4 x i32> %v1186}1187 1188define <vscale x 4 x i32> @vssubu_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {1189; CHECK-LABEL: vssubu_vi_nxv4i32:1190; CHECK:       # %bb.0:1191; CHECK-NEXT:    li a1, -11192; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1193; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t1194; CHECK-NEXT:    ret1195  %v = call <vscale x 4 x i32> @llvm.vp.usub.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 -1), <vscale x 4 x i1> %m, i32 %evl)1196  ret <vscale x 4 x i32> %v1197}1198 1199define <vscale x 4 x i32> @vssubu_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {1200; CHECK-LABEL: vssubu_vi_nxv4i32_unmasked:1201; CHECK:       # %bb.0:1202; CHECK-NEXT:    li a1, -11203; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1204; CHECK-NEXT:    vssubu.vx v8, v8, a11205; CHECK-NEXT:    ret1206  %v = call <vscale x 4 x i32> @llvm.vp.usub.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)1207  ret <vscale x 4 x i32> %v1208}1209 1210define <vscale x 8 x i32> @vssubu_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1211; CHECK-LABEL: vssubu_vv_nxv8i32:1212; CHECK:       # %bb.0:1213; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1214; CHECK-NEXT:    vssubu.vv v8, v8, v12, v0.t1215; CHECK-NEXT:    ret1216  %v = call <vscale x 8 x i32> @llvm.vp.usub.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)1217  ret <vscale x 8 x i32> %v1218}1219 1220define <vscale x 8 x i32> @vssubu_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {1221; CHECK-LABEL: vssubu_vv_nxv8i32_unmasked:1222; CHECK:       # %bb.0:1223; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1224; CHECK-NEXT:    vssubu.vv v8, v8, v121225; CHECK-NEXT:    ret1226  %v = call <vscale x 8 x i32> @llvm.vp.usub.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)1227  ret <vscale x 8 x i32> %v1228}1229 1230define <vscale x 8 x i32> @vssubu_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1231; CHECK-LABEL: vssubu_vx_nxv8i32:1232; CHECK:       # %bb.0:1233; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma1234; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t1235; CHECK-NEXT:    ret1236  %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 01237  %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer1238  %v = call <vscale x 8 x i32> @llvm.vp.usub.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)1239  ret <vscale x 8 x i32> %v1240}1241 1242define <vscale x 8 x i32> @vssubu_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {1243; CHECK-LABEL: vssubu_vx_nxv8i32_unmasked:1244; CHECK:       # %bb.0:1245; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma1246; CHECK-NEXT:    vssubu.vx v8, v8, a01247; CHECK-NEXT:    ret1248  %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 01249  %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer1250  %v = call <vscale x 8 x i32> @llvm.vp.usub.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)1251  ret <vscale x 8 x i32> %v1252}1253 1254define <vscale x 8 x i32> @vssubu_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1255; CHECK-LABEL: vssubu_vi_nxv8i32:1256; CHECK:       # %bb.0:1257; CHECK-NEXT:    li a1, -11258; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1259; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t1260; CHECK-NEXT:    ret1261  %v = call <vscale x 8 x i32> @llvm.vp.usub.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 -1), <vscale x 8 x i1> %m, i32 %evl)1262  ret <vscale x 8 x i32> %v1263}1264 1265define <vscale x 8 x i32> @vssubu_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {1266; CHECK-LABEL: vssubu_vi_nxv8i32_unmasked:1267; CHECK:       # %bb.0:1268; CHECK-NEXT:    li a1, -11269; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1270; CHECK-NEXT:    vssubu.vx v8, v8, a11271; CHECK-NEXT:    ret1272  %v = call <vscale x 8 x i32> @llvm.vp.usub.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)1273  ret <vscale x 8 x i32> %v1274}1275 1276define <vscale x 16 x i32> @vssubu_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {1277; CHECK-LABEL: vssubu_vv_nxv16i32:1278; CHECK:       # %bb.0:1279; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1280; CHECK-NEXT:    vssubu.vv v8, v8, v16, v0.t1281; CHECK-NEXT:    ret1282  %v = call <vscale x 16 x i32> @llvm.vp.usub.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)1283  ret <vscale x 16 x i32> %v1284}1285 1286define <vscale x 16 x i32> @vssubu_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {1287; CHECK-LABEL: vssubu_vv_nxv16i32_unmasked:1288; CHECK:       # %bb.0:1289; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1290; CHECK-NEXT:    vssubu.vv v8, v8, v161291; CHECK-NEXT:    ret1292  %v = call <vscale x 16 x i32> @llvm.vp.usub.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)1293  ret <vscale x 16 x i32> %v1294}1295 1296define <vscale x 16 x i32> @vssubu_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {1297; CHECK-LABEL: vssubu_vx_nxv16i32:1298; CHECK:       # %bb.0:1299; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma1300; CHECK-NEXT:    vssubu.vx v8, v8, a0, v0.t1301; CHECK-NEXT:    ret1302  %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 01303  %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer1304  %v = call <vscale x 16 x i32> @llvm.vp.usub.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)1305  ret <vscale x 16 x i32> %v1306}1307 1308define <vscale x 16 x i32> @vssubu_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {1309; CHECK-LABEL: vssubu_vx_nxv16i32_unmasked:1310; CHECK:       # %bb.0:1311; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma1312; CHECK-NEXT:    vssubu.vx v8, v8, a01313; CHECK-NEXT:    ret1314  %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 01315  %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer1316  %v = call <vscale x 16 x i32> @llvm.vp.usub.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)1317  ret <vscale x 16 x i32> %v1318}1319 1320define <vscale x 16 x i32> @vssubu_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {1321; CHECK-LABEL: vssubu_vi_nxv16i32:1322; CHECK:       # %bb.0:1323; CHECK-NEXT:    li a1, -11324; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1325; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t1326; CHECK-NEXT:    ret1327  %v = call <vscale x 16 x i32> @llvm.vp.usub.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 -1), <vscale x 16 x i1> %m, i32 %evl)1328  ret <vscale x 16 x i32> %v1329}1330 1331define <vscale x 16 x i32> @vssubu_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {1332; CHECK-LABEL: vssubu_vi_nxv16i32_unmasked:1333; CHECK:       # %bb.0:1334; CHECK-NEXT:    li a1, -11335; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1336; CHECK-NEXT:    vssubu.vx v8, v8, a11337; CHECK-NEXT:    ret1338  %v = call <vscale x 16 x i32> @llvm.vp.usub.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)1339  ret <vscale x 16 x i32> %v1340}1341 1342; Test that split-legalization works then the mask needs manual splitting.1343 1344define <vscale x 32 x i32> @vssubu_vi_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {1345; CHECK-LABEL: vssubu_vi_nxv32i32:1346; CHECK:       # %bb.0:1347; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma1348; CHECK-NEXT:    vmv1r.v v24, v01349; CHECK-NEXT:    csrr a1, vlenb1350; CHECK-NEXT:    srli a2, a1, 21351; CHECK-NEXT:    slli a1, a1, 11352; CHECK-NEXT:    vslidedown.vx v0, v0, a21353; CHECK-NEXT:    sub a2, a0, a11354; CHECK-NEXT:    sltu a3, a0, a21355; CHECK-NEXT:    addi a3, a3, -11356; CHECK-NEXT:    and a3, a3, a21357; CHECK-NEXT:    li a2, -11358; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma1359; CHECK-NEXT:    vssubu.vx v16, v16, a2, v0.t1360; CHECK-NEXT:    bltu a0, a1, .LBB118_21361; CHECK-NEXT:  # %bb.1:1362; CHECK-NEXT:    mv a0, a11363; CHECK-NEXT:  .LBB118_2:1364; CHECK-NEXT:    vmv1r.v v0, v241365; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1366; CHECK-NEXT:    vssubu.vx v8, v8, a2, v0.t1367; CHECK-NEXT:    ret1368  %v = call <vscale x 32 x i32> @llvm.vp.usub.sat.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> %m, i32 %evl)1369  ret <vscale x 32 x i32> %v1370}1371 1372define <vscale x 32 x i32> @vssubu_vi_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 zeroext %evl) {1373; CHECK-LABEL: vssubu_vi_nxv32i32_unmasked:1374; CHECK:       # %bb.0:1375; CHECK-NEXT:    csrr a1, vlenb1376; CHECK-NEXT:    slli a1, a1, 11377; CHECK-NEXT:    sub a2, a0, a11378; CHECK-NEXT:    sltu a3, a0, a21379; CHECK-NEXT:    addi a3, a3, -11380; CHECK-NEXT:    and a3, a3, a21381; CHECK-NEXT:    li a2, -11382; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma1383; CHECK-NEXT:    vssubu.vx v16, v16, a21384; CHECK-NEXT:    bltu a0, a1, .LBB119_21385; CHECK-NEXT:  # %bb.1:1386; CHECK-NEXT:    mv a0, a11387; CHECK-NEXT:  .LBB119_2:1388; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1389; CHECK-NEXT:    vssubu.vx v8, v8, a21390; CHECK-NEXT:    ret1391  %v = call <vscale x 32 x i32> @llvm.vp.usub.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)1392  ret <vscale x 32 x i32> %v1393}1394 1395define <vscale x 1 x i64> @vssubu_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1396; CHECK-LABEL: vssubu_vv_nxv1i64:1397; CHECK:       # %bb.0:1398; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1399; CHECK-NEXT:    vssubu.vv v8, v8, v9, v0.t1400; CHECK-NEXT:    ret1401  %v = call <vscale x 1 x i64> @llvm.vp.usub.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)1402  ret <vscale x 1 x i64> %v1403}1404 1405define <vscale x 1 x i64> @vssubu_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {1406; CHECK-LABEL: vssubu_vv_nxv1i64_unmasked:1407; CHECK:       # %bb.0:1408; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1409; CHECK-NEXT:    vssubu.vv v8, v8, v91410; CHECK-NEXT:    ret1411  %v = call <vscale x 1 x i64> @llvm.vp.usub.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)1412  ret <vscale x 1 x i64> %v1413}1414 1415define <vscale x 1 x i64> @vssubu_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1416; RV32-LABEL: vssubu_vx_nxv1i64:1417; RV32:       # %bb.0:1418; RV32-NEXT:    addi sp, sp, -161419; RV32-NEXT:    .cfi_def_cfa_offset 161420; RV32-NEXT:    sw a0, 8(sp)1421; RV32-NEXT:    sw a1, 12(sp)1422; RV32-NEXT:    addi a0, sp, 81423; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma1424; RV32-NEXT:    vlse64.v v9, (a0), zero1425; RV32-NEXT:    vssubu.vv v8, v8, v9, v0.t1426; RV32-NEXT:    addi sp, sp, 161427; RV32-NEXT:    .cfi_def_cfa_offset 01428; RV32-NEXT:    ret1429;1430; RV64-LABEL: vssubu_vx_nxv1i64:1431; RV64:       # %bb.0:1432; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma1433; RV64-NEXT:    vssubu.vx v8, v8, a0, v0.t1434; RV64-NEXT:    ret1435  %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01436  %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1437  %v = call <vscale x 1 x i64> @llvm.vp.usub.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)1438  ret <vscale x 1 x i64> %v1439}1440 1441define <vscale x 1 x i64> @vssubu_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {1442; RV32-LABEL: vssubu_vx_nxv1i64_unmasked:1443; RV32:       # %bb.0:1444; RV32-NEXT:    addi sp, sp, -161445; RV32-NEXT:    .cfi_def_cfa_offset 161446; RV32-NEXT:    sw a0, 8(sp)1447; RV32-NEXT:    sw a1, 12(sp)1448; RV32-NEXT:    addi a0, sp, 81449; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma1450; RV32-NEXT:    vlse64.v v9, (a0), zero1451; RV32-NEXT:    vssubu.vv v8, v8, v91452; RV32-NEXT:    addi sp, sp, 161453; RV32-NEXT:    .cfi_def_cfa_offset 01454; RV32-NEXT:    ret1455;1456; RV64-LABEL: vssubu_vx_nxv1i64_unmasked:1457; RV64:       # %bb.0:1458; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma1459; RV64-NEXT:    vssubu.vx v8, v8, a01460; RV64-NEXT:    ret1461  %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01462  %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1463  %v = call <vscale x 1 x i64> @llvm.vp.usub.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)1464  ret <vscale x 1 x i64> %v1465}1466 1467define <vscale x 1 x i64> @vssubu_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {1468; CHECK-LABEL: vssubu_vi_nxv1i64:1469; CHECK:       # %bb.0:1470; CHECK-NEXT:    li a1, -11471; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1472; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t1473; CHECK-NEXT:    ret1474  %v = call <vscale x 1 x i64> @llvm.vp.usub.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 -1), <vscale x 1 x i1> %m, i32 %evl)1475  ret <vscale x 1 x i64> %v1476}1477 1478define <vscale x 1 x i64> @vssubu_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {1479; CHECK-LABEL: vssubu_vi_nxv1i64_unmasked:1480; CHECK:       # %bb.0:1481; CHECK-NEXT:    li a1, -11482; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1483; CHECK-NEXT:    vssubu.vx v8, v8, a11484; CHECK-NEXT:    ret1485  %v = call <vscale x 1 x i64> @llvm.vp.usub.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)1486  ret <vscale x 1 x i64> %v1487}1488 1489define <vscale x 2 x i64> @vssubu_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1490; CHECK-LABEL: vssubu_vv_nxv2i64:1491; CHECK:       # %bb.0:1492; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1493; CHECK-NEXT:    vssubu.vv v8, v8, v10, v0.t1494; CHECK-NEXT:    ret1495  %v = call <vscale x 2 x i64> @llvm.vp.usub.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)1496  ret <vscale x 2 x i64> %v1497}1498 1499define <vscale x 2 x i64> @vssubu_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {1500; CHECK-LABEL: vssubu_vv_nxv2i64_unmasked:1501; CHECK:       # %bb.0:1502; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1503; CHECK-NEXT:    vssubu.vv v8, v8, v101504; CHECK-NEXT:    ret1505  %v = call <vscale x 2 x i64> @llvm.vp.usub.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)1506  ret <vscale x 2 x i64> %v1507}1508 1509define <vscale x 2 x i64> @vssubu_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1510; RV32-LABEL: vssubu_vx_nxv2i64:1511; RV32:       # %bb.0:1512; RV32-NEXT:    addi sp, sp, -161513; RV32-NEXT:    .cfi_def_cfa_offset 161514; RV32-NEXT:    sw a0, 8(sp)1515; RV32-NEXT:    sw a1, 12(sp)1516; RV32-NEXT:    addi a0, sp, 81517; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma1518; RV32-NEXT:    vlse64.v v10, (a0), zero1519; RV32-NEXT:    vssubu.vv v8, v8, v10, v0.t1520; RV32-NEXT:    addi sp, sp, 161521; RV32-NEXT:    .cfi_def_cfa_offset 01522; RV32-NEXT:    ret1523;1524; RV64-LABEL: vssubu_vx_nxv2i64:1525; RV64:       # %bb.0:1526; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma1527; RV64-NEXT:    vssubu.vx v8, v8, a0, v0.t1528; RV64-NEXT:    ret1529  %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01530  %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1531  %v = call <vscale x 2 x i64> @llvm.vp.usub.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)1532  ret <vscale x 2 x i64> %v1533}1534 1535define <vscale x 2 x i64> @vssubu_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {1536; RV32-LABEL: vssubu_vx_nxv2i64_unmasked:1537; RV32:       # %bb.0:1538; RV32-NEXT:    addi sp, sp, -161539; RV32-NEXT:    .cfi_def_cfa_offset 161540; RV32-NEXT:    sw a0, 8(sp)1541; RV32-NEXT:    sw a1, 12(sp)1542; RV32-NEXT:    addi a0, sp, 81543; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma1544; RV32-NEXT:    vlse64.v v10, (a0), zero1545; RV32-NEXT:    vssubu.vv v8, v8, v101546; RV32-NEXT:    addi sp, sp, 161547; RV32-NEXT:    .cfi_def_cfa_offset 01548; RV32-NEXT:    ret1549;1550; RV64-LABEL: vssubu_vx_nxv2i64_unmasked:1551; RV64:       # %bb.0:1552; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma1553; RV64-NEXT:    vssubu.vx v8, v8, a01554; RV64-NEXT:    ret1555  %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01556  %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1557  %v = call <vscale x 2 x i64> @llvm.vp.usub.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)1558  ret <vscale x 2 x i64> %v1559}1560 1561define <vscale x 2 x i64> @vssubu_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {1562; CHECK-LABEL: vssubu_vi_nxv2i64:1563; CHECK:       # %bb.0:1564; CHECK-NEXT:    li a1, -11565; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1566; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t1567; CHECK-NEXT:    ret1568  %v = call <vscale x 2 x i64> @llvm.vp.usub.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 -1), <vscale x 2 x i1> %m, i32 %evl)1569  ret <vscale x 2 x i64> %v1570}1571 1572define <vscale x 2 x i64> @vssubu_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {1573; CHECK-LABEL: vssubu_vi_nxv2i64_unmasked:1574; CHECK:       # %bb.0:1575; CHECK-NEXT:    li a1, -11576; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1577; CHECK-NEXT:    vssubu.vx v8, v8, a11578; CHECK-NEXT:    ret1579  %v = call <vscale x 2 x i64> @llvm.vp.usub.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)1580  ret <vscale x 2 x i64> %v1581}1582 1583define <vscale x 4 x i64> @vssubu_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1584; CHECK-LABEL: vssubu_vv_nxv4i64:1585; CHECK:       # %bb.0:1586; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1587; CHECK-NEXT:    vssubu.vv v8, v8, v12, v0.t1588; CHECK-NEXT:    ret1589  %v = call <vscale x 4 x i64> @llvm.vp.usub.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)1590  ret <vscale x 4 x i64> %v1591}1592 1593define <vscale x 4 x i64> @vssubu_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {1594; CHECK-LABEL: vssubu_vv_nxv4i64_unmasked:1595; CHECK:       # %bb.0:1596; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1597; CHECK-NEXT:    vssubu.vv v8, v8, v121598; CHECK-NEXT:    ret1599  %v = call <vscale x 4 x i64> @llvm.vp.usub.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)1600  ret <vscale x 4 x i64> %v1601}1602 1603define <vscale x 4 x i64> @vssubu_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1604; RV32-LABEL: vssubu_vx_nxv4i64:1605; RV32:       # %bb.0:1606; RV32-NEXT:    addi sp, sp, -161607; RV32-NEXT:    .cfi_def_cfa_offset 161608; RV32-NEXT:    sw a0, 8(sp)1609; RV32-NEXT:    sw a1, 12(sp)1610; RV32-NEXT:    addi a0, sp, 81611; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma1612; RV32-NEXT:    vlse64.v v12, (a0), zero1613; RV32-NEXT:    vssubu.vv v8, v8, v12, v0.t1614; RV32-NEXT:    addi sp, sp, 161615; RV32-NEXT:    .cfi_def_cfa_offset 01616; RV32-NEXT:    ret1617;1618; RV64-LABEL: vssubu_vx_nxv4i64:1619; RV64:       # %bb.0:1620; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma1621; RV64-NEXT:    vssubu.vx v8, v8, a0, v0.t1622; RV64-NEXT:    ret1623  %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01624  %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1625  %v = call <vscale x 4 x i64> @llvm.vp.usub.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)1626  ret <vscale x 4 x i64> %v1627}1628 1629define <vscale x 4 x i64> @vssubu_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {1630; RV32-LABEL: vssubu_vx_nxv4i64_unmasked:1631; RV32:       # %bb.0:1632; RV32-NEXT:    addi sp, sp, -161633; RV32-NEXT:    .cfi_def_cfa_offset 161634; RV32-NEXT:    sw a0, 8(sp)1635; RV32-NEXT:    sw a1, 12(sp)1636; RV32-NEXT:    addi a0, sp, 81637; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma1638; RV32-NEXT:    vlse64.v v12, (a0), zero1639; RV32-NEXT:    vssubu.vv v8, v8, v121640; RV32-NEXT:    addi sp, sp, 161641; RV32-NEXT:    .cfi_def_cfa_offset 01642; RV32-NEXT:    ret1643;1644; RV64-LABEL: vssubu_vx_nxv4i64_unmasked:1645; RV64:       # %bb.0:1646; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma1647; RV64-NEXT:    vssubu.vx v8, v8, a01648; RV64-NEXT:    ret1649  %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01650  %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1651  %v = call <vscale x 4 x i64> @llvm.vp.usub.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)1652  ret <vscale x 4 x i64> %v1653}1654 1655define <vscale x 4 x i64> @vssubu_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {1656; CHECK-LABEL: vssubu_vi_nxv4i64:1657; CHECK:       # %bb.0:1658; CHECK-NEXT:    li a1, -11659; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1660; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t1661; CHECK-NEXT:    ret1662  %v = call <vscale x 4 x i64> @llvm.vp.usub.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 -1), <vscale x 4 x i1> %m, i32 %evl)1663  ret <vscale x 4 x i64> %v1664}1665 1666define <vscale x 4 x i64> @vssubu_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {1667; CHECK-LABEL: vssubu_vi_nxv4i64_unmasked:1668; CHECK:       # %bb.0:1669; CHECK-NEXT:    li a1, -11670; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1671; CHECK-NEXT:    vssubu.vx v8, v8, a11672; CHECK-NEXT:    ret1673  %v = call <vscale x 4 x i64> @llvm.vp.usub.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)1674  ret <vscale x 4 x i64> %v1675}1676 1677define <vscale x 8 x i64> @vssubu_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1678; CHECK-LABEL: vssubu_vv_nxv8i64:1679; CHECK:       # %bb.0:1680; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1681; CHECK-NEXT:    vssubu.vv v8, v8, v16, v0.t1682; CHECK-NEXT:    ret1683  %v = call <vscale x 8 x i64> @llvm.vp.usub.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)1684  ret <vscale x 8 x i64> %v1685}1686 1687define <vscale x 8 x i64> @vssubu_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {1688; CHECK-LABEL: vssubu_vv_nxv8i64_unmasked:1689; CHECK:       # %bb.0:1690; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1691; CHECK-NEXT:    vssubu.vv v8, v8, v161692; CHECK-NEXT:    ret1693  %v = call <vscale x 8 x i64> @llvm.vp.usub.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)1694  ret <vscale x 8 x i64> %v1695}1696 1697define <vscale x 8 x i64> @vssubu_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1698; RV32-LABEL: vssubu_vx_nxv8i64:1699; RV32:       # %bb.0:1700; RV32-NEXT:    addi sp, sp, -161701; RV32-NEXT:    .cfi_def_cfa_offset 161702; RV32-NEXT:    sw a0, 8(sp)1703; RV32-NEXT:    sw a1, 12(sp)1704; RV32-NEXT:    addi a0, sp, 81705; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma1706; RV32-NEXT:    vlse64.v v16, (a0), zero1707; RV32-NEXT:    vssubu.vv v8, v8, v16, v0.t1708; RV32-NEXT:    addi sp, sp, 161709; RV32-NEXT:    .cfi_def_cfa_offset 01710; RV32-NEXT:    ret1711;1712; RV64-LABEL: vssubu_vx_nxv8i64:1713; RV64:       # %bb.0:1714; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma1715; RV64-NEXT:    vssubu.vx v8, v8, a0, v0.t1716; RV64-NEXT:    ret1717  %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01718  %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1719  %v = call <vscale x 8 x i64> @llvm.vp.usub.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1720  ret <vscale x 8 x i64> %v1721}1722 1723define <vscale x 8 x i64> @vssubu_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {1724; RV32-LABEL: vssubu_vx_nxv8i64_unmasked:1725; RV32:       # %bb.0:1726; RV32-NEXT:    addi sp, sp, -161727; RV32-NEXT:    .cfi_def_cfa_offset 161728; RV32-NEXT:    sw a0, 8(sp)1729; RV32-NEXT:    sw a1, 12(sp)1730; RV32-NEXT:    addi a0, sp, 81731; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma1732; RV32-NEXT:    vlse64.v v16, (a0), zero1733; RV32-NEXT:    vssubu.vv v8, v8, v161734; RV32-NEXT:    addi sp, sp, 161735; RV32-NEXT:    .cfi_def_cfa_offset 01736; RV32-NEXT:    ret1737;1738; RV64-LABEL: vssubu_vx_nxv8i64_unmasked:1739; RV64:       # %bb.0:1740; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma1741; RV64-NEXT:    vssubu.vx v8, v8, a01742; RV64-NEXT:    ret1743  %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01744  %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1745  %v = call <vscale x 8 x i64> @llvm.vp.usub.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)1746  ret <vscale x 8 x i64> %v1747}1748 1749define <vscale x 8 x i64> @vssubu_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1750; CHECK-LABEL: vssubu_vi_nxv8i64:1751; CHECK:       # %bb.0:1752; CHECK-NEXT:    li a1, -11753; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1754; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t1755; CHECK-NEXT:    ret1756  %v = call <vscale x 8 x i64> @llvm.vp.usub.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 -1), <vscale x 8 x i1> %m, i32 %evl)1757  ret <vscale x 8 x i64> %v1758}1759 1760define <vscale x 8 x i64> @vssubu_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1761; CHECK-LABEL: vssubu_vi_nxv8i64_unmasked:1762; CHECK:       # %bb.0:1763; CHECK-NEXT:    li a1, -11764; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1765; CHECK-NEXT:    vssubu.vx v8, v8, a11766; CHECK-NEXT:    ret1767  %v = call <vscale x 8 x i64> @llvm.vp.usub.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)1768  ret <vscale x 8 x i64> %v1769}1770