2160 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v,+m -verify-machineinstrs < %s \3; RUN: | FileCheck %s --check-prefixes=CHECK,RV324; RUN: llc -mtriple=riscv64 -mattr=+v,+m -verify-machineinstrs < %s \5; RUN: | FileCheck %s --check-prefixes=CHECK,RV646 7; FIXME: We're missing canonicalizations of ISD::VP_SETCC equivalent to those8; for ISD::SETCC, e.g., splats aren't moved to the RHS.9 10define <8 x i1> @icmp_eq_vv_v8i7(<8 x i7> %va, <8 x i7> %vb, <8 x i1> %m, i32 zeroext %evl) {11; CHECK-LABEL: icmp_eq_vv_v8i7:12; CHECK: # %bb.0:13; CHECK-NEXT: li a1, 12714; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma15; CHECK-NEXT: vand.vx v9, v9, a116; CHECK-NEXT: vand.vx v8, v8, a117; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma18; CHECK-NEXT: vmseq.vv v0, v8, v9, v0.t19; CHECK-NEXT: ret20 %v = call <8 x i1> @llvm.vp.icmp.v8i7(<8 x i7> %va, <8 x i7> %vb, metadata !"eq", <8 x i1> %m, i32 %evl)21 ret <8 x i1> %v22}23 24define <8 x i1> @icmp_eq_vx_v8i7(<8 x i7> %va, i7 %b, <8 x i1> %m, i32 zeroext %evl) {25; CHECK-LABEL: icmp_eq_vx_v8i7:26; CHECK: # %bb.0:27; CHECK-NEXT: li a2, 12728; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma29; CHECK-NEXT: vmv.v.x v9, a030; CHECK-NEXT: vand.vx v8, v8, a231; CHECK-NEXT: vand.vx v9, v9, a232; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma33; CHECK-NEXT: vmseq.vv v0, v8, v9, v0.t34; CHECK-NEXT: ret35 %elt.head = insertelement <8 x i7> poison, i7 %b, i32 036 %vb = shufflevector <8 x i7> %elt.head, <8 x i7> poison, <8 x i32> zeroinitializer37 %v = call <8 x i1> @llvm.vp.icmp.v8i7(<8 x i7> %va, <8 x i7> %vb, metadata !"eq", <8 x i1> %m, i32 %evl)38 ret <8 x i1> %v39}40 41define <8 x i1> @icmp_eq_vx_swap_v8i7(<8 x i7> %va, i7 %b, <8 x i1> %m, i32 zeroext %evl) {42; CHECK-LABEL: icmp_eq_vx_swap_v8i7:43; CHECK: # %bb.0:44; CHECK-NEXT: li a2, 12745; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma46; CHECK-NEXT: vmv.v.x v9, a047; CHECK-NEXT: vand.vx v8, v8, a248; CHECK-NEXT: vand.vx v9, v9, a249; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma50; CHECK-NEXT: vmseq.vv v0, v9, v8, v0.t51; CHECK-NEXT: ret52 %elt.head = insertelement <8 x i7> poison, i7 %b, i32 053 %vb = shufflevector <8 x i7> %elt.head, <8 x i7> poison, <8 x i32> zeroinitializer54 %v = call <8 x i1> @llvm.vp.icmp.v8i7(<8 x i7> %vb, <8 x i7> %va, metadata !"eq", <8 x i1> %m, i32 %evl)55 ret <8 x i1> %v56}57 58define <5 x i1> @icmp_eq_vv_v5i8(<5 x i8> %va, <5 x i8> %vb, <5 x i1> %m, i32 zeroext %evl) {59; CHECK-LABEL: icmp_eq_vv_v5i8:60; CHECK: # %bb.0:61; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma62; CHECK-NEXT: vmseq.vv v0, v8, v9, v0.t63; CHECK-NEXT: ret64 %v = call <5 x i1> @llvm.vp.icmp.v5i8(<5 x i8> %va, <5 x i8> %vb, metadata !"eq", <5 x i1> %m, i32 %evl)65 ret <5 x i1> %v66}67 68define <5 x i1> @icmp_eq_vx_v5i8(<5 x i8> %va, i8 %b, <5 x i1> %m, i32 zeroext %evl) {69; CHECK-LABEL: icmp_eq_vx_v5i8:70; CHECK: # %bb.0:71; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma72; CHECK-NEXT: vmseq.vx v0, v8, a0, v0.t73; CHECK-NEXT: ret74 %elt.head = insertelement <5 x i8> poison, i8 %b, i32 075 %vb = shufflevector <5 x i8> %elt.head, <5 x i8> poison, <5 x i32> zeroinitializer76 %v = call <5 x i1> @llvm.vp.icmp.v5i8(<5 x i8> %va, <5 x i8> %vb, metadata !"eq", <5 x i1> %m, i32 %evl)77 ret <5 x i1> %v78}79 80define <5 x i1> @icmp_eq_vx_swap_v5i8(<5 x i8> %va, i8 %b, <5 x i1> %m, i32 zeroext %evl) {81; CHECK-LABEL: icmp_eq_vx_swap_v5i8:82; CHECK: # %bb.0:83; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma84; CHECK-NEXT: vmseq.vx v0, v8, a0, v0.t85; CHECK-NEXT: ret86 %elt.head = insertelement <5 x i8> poison, i8 %b, i32 087 %vb = shufflevector <5 x i8> %elt.head, <5 x i8> poison, <5 x i32> zeroinitializer88 %v = call <5 x i1> @llvm.vp.icmp.v5i8(<5 x i8> %vb, <5 x i8> %va, metadata !"eq", <5 x i1> %m, i32 %evl)89 ret <5 x i1> %v90}91 92define <8 x i1> @icmp_eq_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {93; CHECK-LABEL: icmp_eq_vv_v8i8:94; CHECK: # %bb.0:95; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma96; CHECK-NEXT: vmseq.vv v0, v8, v9, v0.t97; CHECK-NEXT: ret98 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"eq", <8 x i1> %m, i32 %evl)99 ret <8 x i1> %v100}101 102define <8 x i1> @icmp_eq_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {103; CHECK-LABEL: icmp_eq_vx_v8i8:104; CHECK: # %bb.0:105; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma106; CHECK-NEXT: vmseq.vx v0, v8, a0, v0.t107; CHECK-NEXT: ret108 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0109 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer110 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"eq", <8 x i1> %m, i32 %evl)111 ret <8 x i1> %v112}113 114define <8 x i1> @icmp_eq_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {115; CHECK-LABEL: icmp_eq_vx_swap_v8i8:116; CHECK: # %bb.0:117; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma118; CHECK-NEXT: vmseq.vx v0, v8, a0, v0.t119; CHECK-NEXT: ret120 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0121 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer122 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %vb, <8 x i8> %va, metadata !"eq", <8 x i1> %m, i32 %evl)123 ret <8 x i1> %v124}125 126define <8 x i1> @icmp_eq_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {127; CHECK-LABEL: icmp_eq_vi_v8i8:128; CHECK: # %bb.0:129; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma130; CHECK-NEXT: vmseq.vi v0, v8, 4, v0.t131; CHECK-NEXT: ret132 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), metadata !"eq", <8 x i1> %m, i32 %evl)133 ret <8 x i1> %v134}135 136define <8 x i1> @icmp_eq_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {137; CHECK-LABEL: icmp_eq_vi_swap_v8i8:138; CHECK: # %bb.0:139; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma140; CHECK-NEXT: vmseq.vi v0, v8, 4, v0.t141; CHECK-NEXT: ret142 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> splat (i8 4), <8 x i8> %va, metadata !"eq", <8 x i1> %m, i32 %evl)143 ret <8 x i1> %v144}145 146define <8 x i1> @icmp_ne_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {147; CHECK-LABEL: icmp_ne_vv_v8i8:148; CHECK: # %bb.0:149; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma150; CHECK-NEXT: vmsne.vv v0, v8, v9, v0.t151; CHECK-NEXT: ret152 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"ne", <8 x i1> %m, i32 %evl)153 ret <8 x i1> %v154}155 156define <8 x i1> @icmp_ne_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {157; CHECK-LABEL: icmp_ne_vx_v8i8:158; CHECK: # %bb.0:159; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma160; CHECK-NEXT: vmsne.vx v0, v8, a0, v0.t161; CHECK-NEXT: ret162 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0163 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer164 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"ne", <8 x i1> %m, i32 %evl)165 ret <8 x i1> %v166}167 168define <8 x i1> @icmp_ne_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {169; CHECK-LABEL: icmp_ne_vx_swap_v8i8:170; CHECK: # %bb.0:171; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma172; CHECK-NEXT: vmsne.vx v0, v8, a0, v0.t173; CHECK-NEXT: ret174 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0175 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer176 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %vb, <8 x i8> %va, metadata !"ne", <8 x i1> %m, i32 %evl)177 ret <8 x i1> %v178}179 180define <8 x i1> @icmp_ne_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {181; CHECK-LABEL: icmp_ne_vi_v8i8:182; CHECK: # %bb.0:183; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma184; CHECK-NEXT: vmsne.vi v0, v8, 4, v0.t185; CHECK-NEXT: ret186 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), metadata !"ne", <8 x i1> %m, i32 %evl)187 ret <8 x i1> %v188}189 190define <8 x i1> @icmp_ne_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {191; CHECK-LABEL: icmp_ne_vi_swap_v8i8:192; CHECK: # %bb.0:193; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma194; CHECK-NEXT: vmsne.vi v0, v8, 4, v0.t195; CHECK-NEXT: ret196 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> splat (i8 4), <8 x i8> %va, metadata !"ne", <8 x i1> %m, i32 %evl)197 ret <8 x i1> %v198}199 200define <8 x i1> @icmp_ugt_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {201; CHECK-LABEL: icmp_ugt_vv_v8i8:202; CHECK: # %bb.0:203; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma204; CHECK-NEXT: vmsltu.vv v0, v9, v8, v0.t205; CHECK-NEXT: ret206 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"ugt", <8 x i1> %m, i32 %evl)207 ret <8 x i1> %v208}209 210define <8 x i1> @icmp_ugt_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {211; CHECK-LABEL: icmp_ugt_vx_v8i8:212; CHECK: # %bb.0:213; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma214; CHECK-NEXT: vmsgtu.vx v0, v8, a0, v0.t215; CHECK-NEXT: ret216 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0217 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer218 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"ugt", <8 x i1> %m, i32 %evl)219 ret <8 x i1> %v220}221 222define <8 x i1> @icmp_ugt_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {223; CHECK-LABEL: icmp_ugt_vx_swap_v8i8:224; CHECK: # %bb.0:225; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma226; CHECK-NEXT: vmsltu.vx v0, v8, a0, v0.t227; CHECK-NEXT: ret228 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0229 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer230 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %vb, <8 x i8> %va, metadata !"ugt", <8 x i1> %m, i32 %evl)231 ret <8 x i1> %v232}233 234define <8 x i1> @icmp_ugt_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {235; CHECK-LABEL: icmp_ugt_vi_v8i8:236; CHECK: # %bb.0:237; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma238; CHECK-NEXT: vmsgtu.vi v0, v8, 4, v0.t239; CHECK-NEXT: ret240 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), metadata !"ugt", <8 x i1> %m, i32 %evl)241 ret <8 x i1> %v242}243 244define <8 x i1> @icmp_ugt_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {245; CHECK-LABEL: icmp_ugt_vi_swap_v8i8:246; CHECK: # %bb.0:247; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma248; CHECK-NEXT: vmsleu.vi v0, v8, 3, v0.t249; CHECK-NEXT: ret250 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> splat (i8 4), <8 x i8> %va, metadata !"ugt", <8 x i1> %m, i32 %evl)251 ret <8 x i1> %v252}253 254define <8 x i1> @icmp_uge_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {255; CHECK-LABEL: icmp_uge_vv_v8i8:256; CHECK: # %bb.0:257; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma258; CHECK-NEXT: vmsleu.vv v0, v9, v8, v0.t259; CHECK-NEXT: ret260 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"uge", <8 x i1> %m, i32 %evl)261 ret <8 x i1> %v262}263 264define <8 x i1> @icmp_uge_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {265; CHECK-LABEL: icmp_uge_vx_v8i8:266; CHECK: # %bb.0:267; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma268; CHECK-NEXT: vmv.v.x v9, a0269; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma270; CHECK-NEXT: vmsleu.vv v0, v9, v8, v0.t271; CHECK-NEXT: ret272 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0273 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer274 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"uge", <8 x i1> %m, i32 %evl)275 ret <8 x i1> %v276}277 278define <8 x i1> @icmp_uge_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {279; CHECK-LABEL: icmp_uge_vx_swap_v8i8:280; CHECK: # %bb.0:281; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma282; CHECK-NEXT: vmsleu.vx v0, v8, a0, v0.t283; CHECK-NEXT: ret284 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0285 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer286 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %vb, <8 x i8> %va, metadata !"uge", <8 x i1> %m, i32 %evl)287 ret <8 x i1> %v288}289 290define <8 x i1> @icmp_uge_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {291; CHECK-LABEL: icmp_uge_vi_v8i8:292; CHECK: # %bb.0:293; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma294; CHECK-NEXT: vmsgtu.vi v0, v8, 3, v0.t295; CHECK-NEXT: ret296 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), metadata !"uge", <8 x i1> %m, i32 %evl)297 ret <8 x i1> %v298}299 300define <8 x i1> @icmp_uge_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {301; CHECK-LABEL: icmp_uge_vi_swap_v8i8:302; CHECK: # %bb.0:303; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma304; CHECK-NEXT: vmsleu.vi v0, v8, 4, v0.t305; CHECK-NEXT: ret306 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> splat (i8 4), <8 x i8> %va, metadata !"uge", <8 x i1> %m, i32 %evl)307 ret <8 x i1> %v308}309 310define <8 x i1> @icmp_ult_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {311; CHECK-LABEL: icmp_ult_vv_v8i8:312; CHECK: # %bb.0:313; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma314; CHECK-NEXT: vmsltu.vv v0, v8, v9, v0.t315; CHECK-NEXT: ret316 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"ult", <8 x i1> %m, i32 %evl)317 ret <8 x i1> %v318}319 320define <8 x i1> @icmp_ult_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {321; CHECK-LABEL: icmp_ult_vx_v8i8:322; CHECK: # %bb.0:323; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma324; CHECK-NEXT: vmsltu.vx v0, v8, a0, v0.t325; CHECK-NEXT: ret326 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0327 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer328 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"ult", <8 x i1> %m, i32 %evl)329 ret <8 x i1> %v330}331 332define <8 x i1> @icmp_ult_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {333; CHECK-LABEL: icmp_ult_vx_swap_v8i8:334; CHECK: # %bb.0:335; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma336; CHECK-NEXT: vmsgtu.vx v0, v8, a0, v0.t337; CHECK-NEXT: ret338 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0339 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer340 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %vb, <8 x i8> %va, metadata !"ult", <8 x i1> %m, i32 %evl)341 ret <8 x i1> %v342}343 344define <8 x i1> @icmp_ult_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {345; CHECK-LABEL: icmp_ult_vi_v8i8:346; CHECK: # %bb.0:347; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma348; CHECK-NEXT: vmsleu.vi v0, v8, 3, v0.t349; CHECK-NEXT: ret350 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), metadata !"ult", <8 x i1> %m, i32 %evl)351 ret <8 x i1> %v352}353 354define <8 x i1> @icmp_ult_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {355; CHECK-LABEL: icmp_ult_vi_swap_v8i8:356; CHECK: # %bb.0:357; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma358; CHECK-NEXT: vmsgtu.vi v0, v8, 4, v0.t359; CHECK-NEXT: ret360 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> splat (i8 4), <8 x i8> %va, metadata !"ult", <8 x i1> %m, i32 %evl)361 ret <8 x i1> %v362}363 364define <8 x i1> @icmp_sgt_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {365; CHECK-LABEL: icmp_sgt_vv_v8i8:366; CHECK: # %bb.0:367; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma368; CHECK-NEXT: vmslt.vv v0, v9, v8, v0.t369; CHECK-NEXT: ret370 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"sgt", <8 x i1> %m, i32 %evl)371 ret <8 x i1> %v372}373 374define <8 x i1> @icmp_sgt_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {375; CHECK-LABEL: icmp_sgt_vx_v8i8:376; CHECK: # %bb.0:377; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma378; CHECK-NEXT: vmsgt.vx v0, v8, a0, v0.t379; CHECK-NEXT: ret380 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0381 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer382 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"sgt", <8 x i1> %m, i32 %evl)383 ret <8 x i1> %v384}385 386define <8 x i1> @icmp_sgt_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {387; CHECK-LABEL: icmp_sgt_vx_swap_v8i8:388; CHECK: # %bb.0:389; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma390; CHECK-NEXT: vmslt.vx v0, v8, a0, v0.t391; CHECK-NEXT: ret392 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0393 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer394 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %vb, <8 x i8> %va, metadata !"sgt", <8 x i1> %m, i32 %evl)395 ret <8 x i1> %v396}397 398define <8 x i1> @icmp_sgt_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {399; CHECK-LABEL: icmp_sgt_vi_v8i8:400; CHECK: # %bb.0:401; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma402; CHECK-NEXT: vmsgt.vi v0, v8, 4, v0.t403; CHECK-NEXT: ret404 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), metadata !"sgt", <8 x i1> %m, i32 %evl)405 ret <8 x i1> %v406}407 408define <8 x i1> @icmp_sgt_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {409; CHECK-LABEL: icmp_sgt_vi_swap_v8i8:410; CHECK: # %bb.0:411; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma412; CHECK-NEXT: vmsle.vi v0, v8, 3, v0.t413; CHECK-NEXT: ret414 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> splat (i8 4), <8 x i8> %va, metadata !"sgt", <8 x i1> %m, i32 %evl)415 ret <8 x i1> %v416}417 418define <8 x i1> @icmp_sge_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {419; CHECK-LABEL: icmp_sge_vv_v8i8:420; CHECK: # %bb.0:421; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma422; CHECK-NEXT: vmsle.vv v0, v9, v8, v0.t423; CHECK-NEXT: ret424 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"sge", <8 x i1> %m, i32 %evl)425 ret <8 x i1> %v426}427 428define <8 x i1> @icmp_sge_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {429; CHECK-LABEL: icmp_sge_vx_v8i8:430; CHECK: # %bb.0:431; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma432; CHECK-NEXT: vmv.v.x v9, a0433; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma434; CHECK-NEXT: vmsle.vv v0, v9, v8, v0.t435; CHECK-NEXT: ret436 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0437 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer438 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"sge", <8 x i1> %m, i32 %evl)439 ret <8 x i1> %v440}441 442define <8 x i1> @icmp_sge_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {443; CHECK-LABEL: icmp_sge_vx_swap_v8i8:444; CHECK: # %bb.0:445; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma446; CHECK-NEXT: vmsle.vx v0, v8, a0, v0.t447; CHECK-NEXT: ret448 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0449 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer450 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %vb, <8 x i8> %va, metadata !"sge", <8 x i1> %m, i32 %evl)451 ret <8 x i1> %v452}453 454define <8 x i1> @icmp_sge_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {455; CHECK-LABEL: icmp_sge_vi_v8i8:456; CHECK: # %bb.0:457; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma458; CHECK-NEXT: vmsgt.vi v0, v8, 3, v0.t459; CHECK-NEXT: ret460 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), metadata !"sge", <8 x i1> %m, i32 %evl)461 ret <8 x i1> %v462}463 464define <8 x i1> @icmp_sge_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {465; CHECK-LABEL: icmp_sge_vi_swap_v8i8:466; CHECK: # %bb.0:467; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma468; CHECK-NEXT: vmsle.vi v0, v8, 4, v0.t469; CHECK-NEXT: ret470 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> splat (i8 4), <8 x i8> %va, metadata !"sge", <8 x i1> %m, i32 %evl)471 ret <8 x i1> %v472}473 474define <8 x i1> @icmp_slt_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {475; CHECK-LABEL: icmp_slt_vv_v8i8:476; CHECK: # %bb.0:477; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma478; CHECK-NEXT: vmslt.vv v0, v8, v9, v0.t479; CHECK-NEXT: ret480 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"slt", <8 x i1> %m, i32 %evl)481 ret <8 x i1> %v482}483 484define <8 x i1> @icmp_slt_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {485; CHECK-LABEL: icmp_slt_vx_v8i8:486; CHECK: # %bb.0:487; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma488; CHECK-NEXT: vmslt.vx v0, v8, a0, v0.t489; CHECK-NEXT: ret490 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0491 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer492 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"slt", <8 x i1> %m, i32 %evl)493 ret <8 x i1> %v494}495 496define <8 x i1> @icmp_slt_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {497; CHECK-LABEL: icmp_slt_vx_swap_v8i8:498; CHECK: # %bb.0:499; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma500; CHECK-NEXT: vmsgt.vx v0, v8, a0, v0.t501; CHECK-NEXT: ret502 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0503 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer504 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %vb, <8 x i8> %va, metadata !"slt", <8 x i1> %m, i32 %evl)505 ret <8 x i1> %v506}507 508define <8 x i1> @icmp_slt_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {509; CHECK-LABEL: icmp_slt_vi_v8i8:510; CHECK: # %bb.0:511; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma512; CHECK-NEXT: vmsle.vi v0, v8, 3, v0.t513; CHECK-NEXT: ret514 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), metadata !"slt", <8 x i1> %m, i32 %evl)515 ret <8 x i1> %v516}517 518define <8 x i1> @icmp_slt_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {519; CHECK-LABEL: icmp_slt_vi_swap_v8i8:520; CHECK: # %bb.0:521; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma522; CHECK-NEXT: vmsgt.vi v0, v8, 4, v0.t523; CHECK-NEXT: ret524 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> splat (i8 4), <8 x i8> %va, metadata !"slt", <8 x i1> %m, i32 %evl)525 ret <8 x i1> %v526}527 528define <8 x i1> @icmp_sle_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {529; CHECK-LABEL: icmp_sle_vv_v8i8:530; CHECK: # %bb.0:531; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma532; CHECK-NEXT: vmsle.vv v0, v8, v9, v0.t533; CHECK-NEXT: ret534 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"sle", <8 x i1> %m, i32 %evl)535 ret <8 x i1> %v536}537 538define <8 x i1> @icmp_sle_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {539; CHECK-LABEL: icmp_sle_vx_v8i8:540; CHECK: # %bb.0:541; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma542; CHECK-NEXT: vmsle.vx v0, v8, a0, v0.t543; CHECK-NEXT: ret544 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0545 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer546 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> %vb, metadata !"sle", <8 x i1> %m, i32 %evl)547 ret <8 x i1> %v548}549 550define <8 x i1> @icmp_sle_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {551; CHECK-LABEL: icmp_sle_vx_swap_v8i8:552; CHECK: # %bb.0:553; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma554; CHECK-NEXT: vmv.v.x v9, a0555; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma556; CHECK-NEXT: vmsle.vv v0, v9, v8, v0.t557; CHECK-NEXT: ret558 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0559 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer560 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %vb, <8 x i8> %va, metadata !"sle", <8 x i1> %m, i32 %evl)561 ret <8 x i1> %v562}563 564define <8 x i1> @icmp_sle_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {565; CHECK-LABEL: icmp_sle_vi_v8i8:566; CHECK: # %bb.0:567; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma568; CHECK-NEXT: vmsle.vi v0, v8, 4, v0.t569; CHECK-NEXT: ret570 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), metadata !"sle", <8 x i1> %m, i32 %evl)571 ret <8 x i1> %v572}573 574define <8 x i1> @icmp_sle_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {575; CHECK-LABEL: icmp_sle_vi_swap_v8i8:576; CHECK: # %bb.0:577; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma578; CHECK-NEXT: vmsgt.vi v0, v8, 3, v0.t579; CHECK-NEXT: ret580 %v = call <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8> splat (i8 4), <8 x i8> %va, metadata !"sle", <8 x i1> %m, i32 %evl)581 ret <8 x i1> %v582}583 584define <256 x i1> @icmp_eq_vv_v256i8(<256 x i8> %va, <256 x i8> %vb, <256 x i1> %m, i32 zeroext %evl) {585; CHECK-LABEL: icmp_eq_vv_v256i8:586; CHECK: # %bb.0:587; CHECK-NEXT: addi sp, sp, -16588; CHECK-NEXT: .cfi_def_cfa_offset 16589; CHECK-NEXT: csrr a1, vlenb590; CHECK-NEXT: slli a1, a1, 3591; CHECK-NEXT: sub sp, sp, a1592; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb593; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma594; CHECK-NEXT: vmv1r.v v7, v0595; CHECK-NEXT: addi a1, sp, 16596; CHECK-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill597; CHECK-NEXT: li a1, 128598; CHECK-NEXT: addi a4, a0, 128599; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma600; CHECK-NEXT: vlm.v v0, (a2)601; CHECK-NEXT: addi a2, a3, -128602; CHECK-NEXT: vle8.v v24, (a4)603; CHECK-NEXT: sltu a4, a3, a2604; CHECK-NEXT: vle8.v v8, (a0)605; CHECK-NEXT: addi a4, a4, -1606; CHECK-NEXT: and a2, a4, a2607; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma608; CHECK-NEXT: vmseq.vv v6, v16, v24, v0.t609; CHECK-NEXT: bltu a3, a1, .LBB51_2610; CHECK-NEXT: # %bb.1:611; CHECK-NEXT: li a3, 128612; CHECK-NEXT: .LBB51_2:613; CHECK-NEXT: vmv1r.v v0, v7614; CHECK-NEXT: addi a0, sp, 16615; CHECK-NEXT: vl8r.v v24, (a0) # vscale x 64-byte Folded Reload616; CHECK-NEXT: vsetvli zero, a3, e8, m8, ta, ma617; CHECK-NEXT: vmseq.vv v16, v24, v8, v0.t618; CHECK-NEXT: vmv1r.v v0, v16619; CHECK-NEXT: vmv1r.v v8, v6620; CHECK-NEXT: csrr a0, vlenb621; CHECK-NEXT: slli a0, a0, 3622; CHECK-NEXT: add sp, sp, a0623; CHECK-NEXT: .cfi_def_cfa sp, 16624; CHECK-NEXT: addi sp, sp, 16625; CHECK-NEXT: .cfi_def_cfa_offset 0626; CHECK-NEXT: ret627 %v = call <256 x i1> @llvm.vp.icmp.v256i8(<256 x i8> %va, <256 x i8> %vb, metadata !"eq", <256 x i1> %m, i32 %evl)628 ret <256 x i1> %v629}630 631define <256 x i1> @icmp_eq_vx_v256i8(<256 x i8> %va, i8 %b, <256 x i1> %m, i32 zeroext %evl) {632; CHECK-LABEL: icmp_eq_vx_v256i8:633; CHECK: # %bb.0:634; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma635; CHECK-NEXT: vmv1r.v v24, v0636; CHECK-NEXT: li a3, 128637; CHECK-NEXT: vsetvli zero, a3, e8, m8, ta, ma638; CHECK-NEXT: vlm.v v0, (a1)639; CHECK-NEXT: addi a1, a2, -128640; CHECK-NEXT: sltu a4, a2, a1641; CHECK-NEXT: addi a4, a4, -1642; CHECK-NEXT: and a1, a4, a1643; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma644; CHECK-NEXT: vmseq.vx v25, v16, a0, v0.t645; CHECK-NEXT: bltu a2, a3, .LBB52_2646; CHECK-NEXT: # %bb.1:647; CHECK-NEXT: li a2, 128648; CHECK-NEXT: .LBB52_2:649; CHECK-NEXT: vmv1r.v v0, v24650; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma651; CHECK-NEXT: vmseq.vx v16, v8, a0, v0.t652; CHECK-NEXT: vmv1r.v v0, v16653; CHECK-NEXT: vmv1r.v v8, v25654; CHECK-NEXT: ret655 %elt.head = insertelement <256 x i8> poison, i8 %b, i32 0656 %vb = shufflevector <256 x i8> %elt.head, <256 x i8> poison, <256 x i32> zeroinitializer657 %v = call <256 x i1> @llvm.vp.icmp.v256i8(<256 x i8> %va, <256 x i8> %vb, metadata !"eq", <256 x i1> %m, i32 %evl)658 ret <256 x i1> %v659}660 661define <256 x i1> @icmp_eq_vx_swap_v256i8(<256 x i8> %va, i8 %b, <256 x i1> %m, i32 zeroext %evl) {662; CHECK-LABEL: icmp_eq_vx_swap_v256i8:663; CHECK: # %bb.0:664; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma665; CHECK-NEXT: vmv1r.v v24, v0666; CHECK-NEXT: li a3, 128667; CHECK-NEXT: vsetvli zero, a3, e8, m8, ta, ma668; CHECK-NEXT: vlm.v v0, (a1)669; CHECK-NEXT: addi a1, a2, -128670; CHECK-NEXT: sltu a4, a2, a1671; CHECK-NEXT: addi a4, a4, -1672; CHECK-NEXT: and a1, a4, a1673; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma674; CHECK-NEXT: vmseq.vx v25, v16, a0, v0.t675; CHECK-NEXT: bltu a2, a3, .LBB53_2676; CHECK-NEXT: # %bb.1:677; CHECK-NEXT: li a2, 128678; CHECK-NEXT: .LBB53_2:679; CHECK-NEXT: vmv1r.v v0, v24680; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma681; CHECK-NEXT: vmseq.vx v16, v8, a0, v0.t682; CHECK-NEXT: vmv1r.v v0, v16683; CHECK-NEXT: vmv1r.v v8, v25684; CHECK-NEXT: ret685 %elt.head = insertelement <256 x i8> poison, i8 %b, i32 0686 %vb = shufflevector <256 x i8> %elt.head, <256 x i8> poison, <256 x i32> zeroinitializer687 %v = call <256 x i1> @llvm.vp.icmp.v256i8(<256 x i8> %vb, <256 x i8> %va, metadata !"eq", <256 x i1> %m, i32 %evl)688 ret <256 x i1> %v689}690 691define <8 x i1> @icmp_eq_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {692; CHECK-LABEL: icmp_eq_vv_v8i32:693; CHECK: # %bb.0:694; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma695; CHECK-NEXT: vmseq.vv v12, v8, v10, v0.t696; CHECK-NEXT: vmv1r.v v0, v12697; CHECK-NEXT: ret698 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"eq", <8 x i1> %m, i32 %evl)699 ret <8 x i1> %v700}701 702define <8 x i1> @icmp_eq_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {703; CHECK-LABEL: icmp_eq_vx_v8i32:704; CHECK: # %bb.0:705; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma706; CHECK-NEXT: vmseq.vx v10, v8, a0, v0.t707; CHECK-NEXT: vmv1r.v v0, v10708; CHECK-NEXT: ret709 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0710 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer711 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"eq", <8 x i1> %m, i32 %evl)712 ret <8 x i1> %v713}714 715define <8 x i1> @icmp_eq_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {716; CHECK-LABEL: icmp_eq_vx_swap_v8i32:717; CHECK: # %bb.0:718; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma719; CHECK-NEXT: vmseq.vx v10, v8, a0, v0.t720; CHECK-NEXT: vmv1r.v v0, v10721; CHECK-NEXT: ret722 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0723 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer724 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %vb, <8 x i32> %va, metadata !"eq", <8 x i1> %m, i32 %evl)725 ret <8 x i1> %v726}727 728define <8 x i1> @icmp_eq_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {729; CHECK-LABEL: icmp_eq_vi_v8i32:730; CHECK: # %bb.0:731; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma732; CHECK-NEXT: vmseq.vi v10, v8, 4, v0.t733; CHECK-NEXT: vmv1r.v v0, v10734; CHECK-NEXT: ret735 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), metadata !"eq", <8 x i1> %m, i32 %evl)736 ret <8 x i1> %v737}738 739define <8 x i1> @icmp_eq_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {740; CHECK-LABEL: icmp_eq_vi_swap_v8i32:741; CHECK: # %bb.0:742; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma743; CHECK-NEXT: vmseq.vi v10, v8, 4, v0.t744; CHECK-NEXT: vmv1r.v v0, v10745; CHECK-NEXT: ret746 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> splat (i32 4), <8 x i32> %va, metadata !"eq", <8 x i1> %m, i32 %evl)747 ret <8 x i1> %v748}749 750define <8 x i1> @icmp_ne_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {751; CHECK-LABEL: icmp_ne_vv_v8i32:752; CHECK: # %bb.0:753; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma754; CHECK-NEXT: vmsne.vv v12, v8, v10, v0.t755; CHECK-NEXT: vmv1r.v v0, v12756; CHECK-NEXT: ret757 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"ne", <8 x i1> %m, i32 %evl)758 ret <8 x i1> %v759}760 761define <8 x i1> @icmp_ne_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {762; CHECK-LABEL: icmp_ne_vx_v8i32:763; CHECK: # %bb.0:764; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma765; CHECK-NEXT: vmsne.vx v10, v8, a0, v0.t766; CHECK-NEXT: vmv1r.v v0, v10767; CHECK-NEXT: ret768 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0769 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer770 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"ne", <8 x i1> %m, i32 %evl)771 ret <8 x i1> %v772}773 774define <8 x i1> @icmp_ne_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {775; CHECK-LABEL: icmp_ne_vx_swap_v8i32:776; CHECK: # %bb.0:777; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma778; CHECK-NEXT: vmsne.vx v10, v8, a0, v0.t779; CHECK-NEXT: vmv1r.v v0, v10780; CHECK-NEXT: ret781 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0782 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer783 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %vb, <8 x i32> %va, metadata !"ne", <8 x i1> %m, i32 %evl)784 ret <8 x i1> %v785}786 787define <8 x i1> @icmp_ne_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {788; CHECK-LABEL: icmp_ne_vi_v8i32:789; CHECK: # %bb.0:790; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma791; CHECK-NEXT: vmsne.vi v10, v8, 4, v0.t792; CHECK-NEXT: vmv1r.v v0, v10793; CHECK-NEXT: ret794 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), metadata !"ne", <8 x i1> %m, i32 %evl)795 ret <8 x i1> %v796}797 798define <8 x i1> @icmp_ne_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {799; CHECK-LABEL: icmp_ne_vi_swap_v8i32:800; CHECK: # %bb.0:801; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma802; CHECK-NEXT: vmsne.vi v10, v8, 4, v0.t803; CHECK-NEXT: vmv1r.v v0, v10804; CHECK-NEXT: ret805 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> splat (i32 4), <8 x i32> %va, metadata !"ne", <8 x i1> %m, i32 %evl)806 ret <8 x i1> %v807}808 809define <8 x i1> @icmp_ugt_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {810; CHECK-LABEL: icmp_ugt_vv_v8i32:811; CHECK: # %bb.0:812; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma813; CHECK-NEXT: vmsltu.vv v12, v10, v8, v0.t814; CHECK-NEXT: vmv1r.v v0, v12815; CHECK-NEXT: ret816 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"ugt", <8 x i1> %m, i32 %evl)817 ret <8 x i1> %v818}819 820define <8 x i1> @icmp_ugt_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {821; CHECK-LABEL: icmp_ugt_vx_v8i32:822; CHECK: # %bb.0:823; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma824; CHECK-NEXT: vmsgtu.vx v10, v8, a0, v0.t825; CHECK-NEXT: vmv1r.v v0, v10826; CHECK-NEXT: ret827 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0828 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer829 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"ugt", <8 x i1> %m, i32 %evl)830 ret <8 x i1> %v831}832 833define <8 x i1> @icmp_ugt_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {834; CHECK-LABEL: icmp_ugt_vx_swap_v8i32:835; CHECK: # %bb.0:836; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma837; CHECK-NEXT: vmsltu.vx v10, v8, a0, v0.t838; CHECK-NEXT: vmv1r.v v0, v10839; CHECK-NEXT: ret840 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0841 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer842 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %vb, <8 x i32> %va, metadata !"ugt", <8 x i1> %m, i32 %evl)843 ret <8 x i1> %v844}845 846define <8 x i1> @icmp_ugt_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {847; CHECK-LABEL: icmp_ugt_vi_v8i32:848; CHECK: # %bb.0:849; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma850; CHECK-NEXT: vmsgtu.vi v10, v8, 4, v0.t851; CHECK-NEXT: vmv1r.v v0, v10852; CHECK-NEXT: ret853 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), metadata !"ugt", <8 x i1> %m, i32 %evl)854 ret <8 x i1> %v855}856 857define <8 x i1> @icmp_ugt_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {858; CHECK-LABEL: icmp_ugt_vi_swap_v8i32:859; CHECK: # %bb.0:860; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma861; CHECK-NEXT: vmsleu.vi v10, v8, 3, v0.t862; CHECK-NEXT: vmv1r.v v0, v10863; CHECK-NEXT: ret864 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> splat (i32 4), <8 x i32> %va, metadata !"ugt", <8 x i1> %m, i32 %evl)865 ret <8 x i1> %v866}867 868define <8 x i1> @icmp_uge_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {869; CHECK-LABEL: icmp_uge_vv_v8i32:870; CHECK: # %bb.0:871; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma872; CHECK-NEXT: vmsleu.vv v12, v10, v8, v0.t873; CHECK-NEXT: vmv1r.v v0, v12874; CHECK-NEXT: ret875 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"uge", <8 x i1> %m, i32 %evl)876 ret <8 x i1> %v877}878 879define <8 x i1> @icmp_uge_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {880; CHECK-LABEL: icmp_uge_vx_v8i32:881; CHECK: # %bb.0:882; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma883; CHECK-NEXT: vmv.v.x v12, a0884; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma885; CHECK-NEXT: vmsleu.vv v10, v12, v8, v0.t886; CHECK-NEXT: vmv1r.v v0, v10887; CHECK-NEXT: ret888 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0889 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer890 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"uge", <8 x i1> %m, i32 %evl)891 ret <8 x i1> %v892}893 894define <8 x i1> @icmp_uge_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {895; CHECK-LABEL: icmp_uge_vx_swap_v8i32:896; CHECK: # %bb.0:897; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma898; CHECK-NEXT: vmsleu.vx v10, v8, a0, v0.t899; CHECK-NEXT: vmv1r.v v0, v10900; CHECK-NEXT: ret901 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0902 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer903 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %vb, <8 x i32> %va, metadata !"uge", <8 x i1> %m, i32 %evl)904 ret <8 x i1> %v905}906 907define <8 x i1> @icmp_uge_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {908; CHECK-LABEL: icmp_uge_vi_v8i32:909; CHECK: # %bb.0:910; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma911; CHECK-NEXT: vmsgtu.vi v10, v8, 3, v0.t912; CHECK-NEXT: vmv1r.v v0, v10913; CHECK-NEXT: ret914 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), metadata !"uge", <8 x i1> %m, i32 %evl)915 ret <8 x i1> %v916}917 918define <8 x i1> @icmp_uge_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {919; CHECK-LABEL: icmp_uge_vi_swap_v8i32:920; CHECK: # %bb.0:921; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma922; CHECK-NEXT: vmsleu.vi v10, v8, 4, v0.t923; CHECK-NEXT: vmv1r.v v0, v10924; CHECK-NEXT: ret925 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> splat (i32 4), <8 x i32> %va, metadata !"uge", <8 x i1> %m, i32 %evl)926 ret <8 x i1> %v927}928 929define <8 x i1> @icmp_ult_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {930; CHECK-LABEL: icmp_ult_vv_v8i32:931; CHECK: # %bb.0:932; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma933; CHECK-NEXT: vmsltu.vv v12, v8, v10, v0.t934; CHECK-NEXT: vmv1r.v v0, v12935; CHECK-NEXT: ret936 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"ult", <8 x i1> %m, i32 %evl)937 ret <8 x i1> %v938}939 940define <8 x i1> @icmp_ult_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {941; CHECK-LABEL: icmp_ult_vx_v8i32:942; CHECK: # %bb.0:943; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma944; CHECK-NEXT: vmsltu.vx v10, v8, a0, v0.t945; CHECK-NEXT: vmv1r.v v0, v10946; CHECK-NEXT: ret947 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0948 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer949 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"ult", <8 x i1> %m, i32 %evl)950 ret <8 x i1> %v951}952 953define <8 x i1> @icmp_ult_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {954; CHECK-LABEL: icmp_ult_vx_swap_v8i32:955; CHECK: # %bb.0:956; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma957; CHECK-NEXT: vmsgtu.vx v10, v8, a0, v0.t958; CHECK-NEXT: vmv1r.v v0, v10959; CHECK-NEXT: ret960 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0961 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer962 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %vb, <8 x i32> %va, metadata !"ult", <8 x i1> %m, i32 %evl)963 ret <8 x i1> %v964}965 966define <8 x i1> @icmp_ult_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {967; CHECK-LABEL: icmp_ult_vi_v8i32:968; CHECK: # %bb.0:969; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma970; CHECK-NEXT: vmsleu.vi v10, v8, 3, v0.t971; CHECK-NEXT: vmv1r.v v0, v10972; CHECK-NEXT: ret973 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), metadata !"ult", <8 x i1> %m, i32 %evl)974 ret <8 x i1> %v975}976 977define <8 x i1> @icmp_ult_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {978; CHECK-LABEL: icmp_ult_vi_swap_v8i32:979; CHECK: # %bb.0:980; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma981; CHECK-NEXT: vmsgtu.vi v10, v8, 4, v0.t982; CHECK-NEXT: vmv1r.v v0, v10983; CHECK-NEXT: ret984 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> splat (i32 4), <8 x i32> %va, metadata !"ult", <8 x i1> %m, i32 %evl)985 ret <8 x i1> %v986}987 988define <8 x i1> @icmp_sgt_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {989; CHECK-LABEL: icmp_sgt_vv_v8i32:990; CHECK: # %bb.0:991; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma992; CHECK-NEXT: vmslt.vv v12, v10, v8, v0.t993; CHECK-NEXT: vmv1r.v v0, v12994; CHECK-NEXT: ret995 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"sgt", <8 x i1> %m, i32 %evl)996 ret <8 x i1> %v997}998 999define <8 x i1> @icmp_sgt_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {1000; CHECK-LABEL: icmp_sgt_vx_v8i32:1001; CHECK: # %bb.0:1002; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma1003; CHECK-NEXT: vmsgt.vx v10, v8, a0, v0.t1004; CHECK-NEXT: vmv1r.v v0, v101005; CHECK-NEXT: ret1006 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 01007 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer1008 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"sgt", <8 x i1> %m, i32 %evl)1009 ret <8 x i1> %v1010}1011 1012define <8 x i1> @icmp_sgt_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {1013; CHECK-LABEL: icmp_sgt_vx_swap_v8i32:1014; CHECK: # %bb.0:1015; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma1016; CHECK-NEXT: vmslt.vx v10, v8, a0, v0.t1017; CHECK-NEXT: vmv1r.v v0, v101018; CHECK-NEXT: ret1019 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 01020 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer1021 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %vb, <8 x i32> %va, metadata !"sgt", <8 x i1> %m, i32 %evl)1022 ret <8 x i1> %v1023}1024 1025define <8 x i1> @icmp_sgt_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {1026; CHECK-LABEL: icmp_sgt_vi_v8i32:1027; CHECK: # %bb.0:1028; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1029; CHECK-NEXT: vmsgt.vi v10, v8, 4, v0.t1030; CHECK-NEXT: vmv1r.v v0, v101031; CHECK-NEXT: ret1032 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), metadata !"sgt", <8 x i1> %m, i32 %evl)1033 ret <8 x i1> %v1034}1035 1036define <8 x i1> @icmp_sgt_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {1037; CHECK-LABEL: icmp_sgt_vi_swap_v8i32:1038; CHECK: # %bb.0:1039; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1040; CHECK-NEXT: vmsle.vi v10, v8, 3, v0.t1041; CHECK-NEXT: vmv1r.v v0, v101042; CHECK-NEXT: ret1043 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> splat (i32 4), <8 x i32> %va, metadata !"sgt", <8 x i1> %m, i32 %evl)1044 ret <8 x i1> %v1045}1046 1047define <8 x i1> @icmp_sge_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {1048; CHECK-LABEL: icmp_sge_vv_v8i32:1049; CHECK: # %bb.0:1050; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1051; CHECK-NEXT: vmsle.vv v12, v10, v8, v0.t1052; CHECK-NEXT: vmv1r.v v0, v121053; CHECK-NEXT: ret1054 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"sge", <8 x i1> %m, i32 %evl)1055 ret <8 x i1> %v1056}1057 1058define <8 x i1> @icmp_sge_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {1059; CHECK-LABEL: icmp_sge_vx_v8i32:1060; CHECK: # %bb.0:1061; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma1062; CHECK-NEXT: vmv.v.x v12, a01063; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma1064; CHECK-NEXT: vmsle.vv v10, v12, v8, v0.t1065; CHECK-NEXT: vmv1r.v v0, v101066; CHECK-NEXT: ret1067 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 01068 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer1069 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"sge", <8 x i1> %m, i32 %evl)1070 ret <8 x i1> %v1071}1072 1073define <8 x i1> @icmp_sge_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {1074; CHECK-LABEL: icmp_sge_vx_swap_v8i32:1075; CHECK: # %bb.0:1076; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma1077; CHECK-NEXT: vmsle.vx v10, v8, a0, v0.t1078; CHECK-NEXT: vmv1r.v v0, v101079; CHECK-NEXT: ret1080 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 01081 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer1082 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %vb, <8 x i32> %va, metadata !"sge", <8 x i1> %m, i32 %evl)1083 ret <8 x i1> %v1084}1085 1086define <8 x i1> @icmp_sge_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {1087; CHECK-LABEL: icmp_sge_vi_v8i32:1088; CHECK: # %bb.0:1089; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1090; CHECK-NEXT: vmsgt.vi v10, v8, 3, v0.t1091; CHECK-NEXT: vmv1r.v v0, v101092; CHECK-NEXT: ret1093 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), metadata !"sge", <8 x i1> %m, i32 %evl)1094 ret <8 x i1> %v1095}1096 1097define <8 x i1> @icmp_sge_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {1098; CHECK-LABEL: icmp_sge_vi_swap_v8i32:1099; CHECK: # %bb.0:1100; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1101; CHECK-NEXT: vmsle.vi v10, v8, 4, v0.t1102; CHECK-NEXT: vmv1r.v v0, v101103; CHECK-NEXT: ret1104 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> splat (i32 4), <8 x i32> %va, metadata !"sge", <8 x i1> %m, i32 %evl)1105 ret <8 x i1> %v1106}1107 1108define <8 x i1> @icmp_slt_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {1109; CHECK-LABEL: icmp_slt_vv_v8i32:1110; CHECK: # %bb.0:1111; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1112; CHECK-NEXT: vmslt.vv v12, v8, v10, v0.t1113; CHECK-NEXT: vmv1r.v v0, v121114; CHECK-NEXT: ret1115 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"slt", <8 x i1> %m, i32 %evl)1116 ret <8 x i1> %v1117}1118 1119define <8 x i1> @icmp_slt_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {1120; CHECK-LABEL: icmp_slt_vx_v8i32:1121; CHECK: # %bb.0:1122; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma1123; CHECK-NEXT: vmslt.vx v10, v8, a0, v0.t1124; CHECK-NEXT: vmv1r.v v0, v101125; CHECK-NEXT: ret1126 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 01127 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer1128 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"slt", <8 x i1> %m, i32 %evl)1129 ret <8 x i1> %v1130}1131 1132define <8 x i1> @icmp_slt_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {1133; CHECK-LABEL: icmp_slt_vx_swap_v8i32:1134; CHECK: # %bb.0:1135; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma1136; CHECK-NEXT: vmsgt.vx v10, v8, a0, v0.t1137; CHECK-NEXT: vmv1r.v v0, v101138; CHECK-NEXT: ret1139 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 01140 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer1141 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %vb, <8 x i32> %va, metadata !"slt", <8 x i1> %m, i32 %evl)1142 ret <8 x i1> %v1143}1144 1145define <8 x i1> @icmp_slt_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {1146; CHECK-LABEL: icmp_slt_vi_v8i32:1147; CHECK: # %bb.0:1148; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1149; CHECK-NEXT: vmsle.vi v10, v8, 3, v0.t1150; CHECK-NEXT: vmv1r.v v0, v101151; CHECK-NEXT: ret1152 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), metadata !"slt", <8 x i1> %m, i32 %evl)1153 ret <8 x i1> %v1154}1155 1156define <8 x i1> @icmp_slt_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {1157; CHECK-LABEL: icmp_slt_vi_swap_v8i32:1158; CHECK: # %bb.0:1159; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1160; CHECK-NEXT: vmsgt.vi v10, v8, 4, v0.t1161; CHECK-NEXT: vmv1r.v v0, v101162; CHECK-NEXT: ret1163 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> splat (i32 4), <8 x i32> %va, metadata !"slt", <8 x i1> %m, i32 %evl)1164 ret <8 x i1> %v1165}1166 1167define <8 x i1> @icmp_sle_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {1168; CHECK-LABEL: icmp_sle_vv_v8i32:1169; CHECK: # %bb.0:1170; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1171; CHECK-NEXT: vmsle.vv v12, v8, v10, v0.t1172; CHECK-NEXT: vmv1r.v v0, v121173; CHECK-NEXT: ret1174 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"sle", <8 x i1> %m, i32 %evl)1175 ret <8 x i1> %v1176}1177 1178define <8 x i1> @icmp_sle_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {1179; CHECK-LABEL: icmp_sle_vx_v8i32:1180; CHECK: # %bb.0:1181; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma1182; CHECK-NEXT: vmsle.vx v10, v8, a0, v0.t1183; CHECK-NEXT: vmv1r.v v0, v101184; CHECK-NEXT: ret1185 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 01186 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer1187 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> %vb, metadata !"sle", <8 x i1> %m, i32 %evl)1188 ret <8 x i1> %v1189}1190 1191define <8 x i1> @icmp_sle_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {1192; CHECK-LABEL: icmp_sle_vx_swap_v8i32:1193; CHECK: # %bb.0:1194; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma1195; CHECK-NEXT: vmv.v.x v12, a01196; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma1197; CHECK-NEXT: vmsle.vv v10, v12, v8, v0.t1198; CHECK-NEXT: vmv1r.v v0, v101199; CHECK-NEXT: ret1200 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 01201 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer1202 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %vb, <8 x i32> %va, metadata !"sle", <8 x i1> %m, i32 %evl)1203 ret <8 x i1> %v1204}1205 1206define <8 x i1> @icmp_sle_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {1207; CHECK-LABEL: icmp_sle_vi_v8i32:1208; CHECK: # %bb.0:1209; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1210; CHECK-NEXT: vmsle.vi v10, v8, 4, v0.t1211; CHECK-NEXT: vmv1r.v v0, v101212; CHECK-NEXT: ret1213 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), metadata !"sle", <8 x i1> %m, i32 %evl)1214 ret <8 x i1> %v1215}1216 1217define <8 x i1> @icmp_sle_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {1218; CHECK-LABEL: icmp_sle_vi_swap_v8i32:1219; CHECK: # %bb.0:1220; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1221; CHECK-NEXT: vmsgt.vi v10, v8, 3, v0.t1222; CHECK-NEXT: vmv1r.v v0, v101223; CHECK-NEXT: ret1224 %v = call <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32> splat (i32 4), <8 x i32> %va, metadata !"sle", <8 x i1> %m, i32 %evl)1225 ret <8 x i1> %v1226}1227 1228define <64 x i1> @icmp_eq_vv_v64i32(<64 x i32> %va, <64 x i32> %vb, <64 x i1> %m, i32 zeroext %evl) {1229; CHECK-LABEL: icmp_eq_vv_v64i32:1230; CHECK: # %bb.0:1231; CHECK-NEXT: addi sp, sp, -161232; CHECK-NEXT: .cfi_def_cfa_offset 161233; CHECK-NEXT: csrr a1, vlenb1234; CHECK-NEXT: slli a1, a1, 31235; CHECK-NEXT: sub sp, sp, a11236; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb1237; CHECK-NEXT: addi a1, sp, 161238; CHECK-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill1239; CHECK-NEXT: addi a1, a0, 1281240; CHECK-NEXT: li a3, 321241; CHECK-NEXT: vsetvli zero, a3, e32, m8, ta, ma1242; CHECK-NEXT: vle32.v v16, (a1)1243; CHECK-NEXT: vle32.v v24, (a0)1244; CHECK-NEXT: mv a0, a21245; CHECK-NEXT: vsetivli zero, 4, e8, mf2, ta, ma1246; CHECK-NEXT: vslidedown.vi v7, v0, 41247; CHECK-NEXT: bltu a2, a3, .LBB99_21248; CHECK-NEXT: # %bb.1:1249; CHECK-NEXT: li a0, 321250; CHECK-NEXT: .LBB99_2:1251; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma1252; CHECK-NEXT: vmseq.vv v6, v8, v24, v0.t1253; CHECK-NEXT: addi a0, a2, -321254; CHECK-NEXT: sltu a1, a2, a01255; CHECK-NEXT: addi a1, a1, -11256; CHECK-NEXT: and a0, a1, a01257; CHECK-NEXT: vmv1r.v v0, v71258; CHECK-NEXT: addi a1, sp, 161259; CHECK-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload1260; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma1261; CHECK-NEXT: vmseq.vv v8, v24, v16, v0.t1262; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma1263; CHECK-NEXT: vslideup.vi v6, v8, 41264; CHECK-NEXT: vmv1r.v v0, v61265; CHECK-NEXT: csrr a0, vlenb1266; CHECK-NEXT: slli a0, a0, 31267; CHECK-NEXT: add sp, sp, a01268; CHECK-NEXT: .cfi_def_cfa sp, 161269; CHECK-NEXT: addi sp, sp, 161270; CHECK-NEXT: .cfi_def_cfa_offset 01271; CHECK-NEXT: ret1272 %v = call <64 x i1> @llvm.vp.icmp.v64i32(<64 x i32> %va, <64 x i32> %vb, metadata !"eq", <64 x i1> %m, i32 %evl)1273 ret <64 x i1> %v1274}1275 1276define <64 x i1> @icmp_eq_vx_v64i32(<64 x i32> %va, i32 %b, <64 x i1> %m, i32 zeroext %evl) {1277; CHECK-LABEL: icmp_eq_vx_v64i32:1278; CHECK: # %bb.0:1279; CHECK-NEXT: li a3, 321280; CHECK-NEXT: vsetivli zero, 4, e8, mf2, ta, ma1281; CHECK-NEXT: vslidedown.vi v24, v0, 41282; CHECK-NEXT: mv a2, a11283; CHECK-NEXT: bltu a1, a3, .LBB100_21284; CHECK-NEXT: # %bb.1:1285; CHECK-NEXT: li a2, 321286; CHECK-NEXT: .LBB100_2:1287; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma1288; CHECK-NEXT: vmseq.vx v25, v8, a0, v0.t1289; CHECK-NEXT: addi a2, a1, -321290; CHECK-NEXT: sltu a1, a1, a21291; CHECK-NEXT: addi a1, a1, -11292; CHECK-NEXT: and a1, a1, a21293; CHECK-NEXT: vmv1r.v v0, v241294; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma1295; CHECK-NEXT: vmseq.vx v8, v16, a0, v0.t1296; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma1297; CHECK-NEXT: vslideup.vi v25, v8, 41298; CHECK-NEXT: vmv1r.v v0, v251299; CHECK-NEXT: ret1300 %elt.head = insertelement <64 x i32> poison, i32 %b, i32 01301 %vb = shufflevector <64 x i32> %elt.head, <64 x i32> poison, <64 x i32> zeroinitializer1302 %v = call <64 x i1> @llvm.vp.icmp.v64i32(<64 x i32> %va, <64 x i32> %vb, metadata !"eq", <64 x i1> %m, i32 %evl)1303 ret <64 x i1> %v1304}1305 1306define <64 x i1> @icmp_eq_vx_swap_v64i32(<64 x i32> %va, i32 %b, <64 x i1> %m, i32 zeroext %evl) {1307; CHECK-LABEL: icmp_eq_vx_swap_v64i32:1308; CHECK: # %bb.0:1309; CHECK-NEXT: li a3, 321310; CHECK-NEXT: vsetivli zero, 4, e8, mf2, ta, ma1311; CHECK-NEXT: vslidedown.vi v24, v0, 41312; CHECK-NEXT: mv a2, a11313; CHECK-NEXT: bltu a1, a3, .LBB101_21314; CHECK-NEXT: # %bb.1:1315; CHECK-NEXT: li a2, 321316; CHECK-NEXT: .LBB101_2:1317; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma1318; CHECK-NEXT: vmseq.vx v25, v8, a0, v0.t1319; CHECK-NEXT: addi a2, a1, -321320; CHECK-NEXT: sltu a1, a1, a21321; CHECK-NEXT: addi a1, a1, -11322; CHECK-NEXT: and a1, a1, a21323; CHECK-NEXT: vmv1r.v v0, v241324; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma1325; CHECK-NEXT: vmseq.vx v8, v16, a0, v0.t1326; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma1327; CHECK-NEXT: vslideup.vi v25, v8, 41328; CHECK-NEXT: vmv1r.v v0, v251329; CHECK-NEXT: ret1330 %elt.head = insertelement <64 x i32> poison, i32 %b, i32 01331 %vb = shufflevector <64 x i32> %elt.head, <64 x i32> poison, <64 x i32> zeroinitializer1332 %v = call <64 x i1> @llvm.vp.icmp.v64i32(<64 x i32> %vb, <64 x i32> %va, metadata !"eq", <64 x i1> %m, i32 %evl)1333 ret <64 x i1> %v1334}1335 1336define <8 x i1> @icmp_eq_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {1337; CHECK-LABEL: icmp_eq_vv_v8i64:1338; CHECK: # %bb.0:1339; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1340; CHECK-NEXT: vmseq.vv v16, v8, v12, v0.t1341; CHECK-NEXT: vmv1r.v v0, v161342; CHECK-NEXT: ret1343 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"eq", <8 x i1> %m, i32 %evl)1344 ret <8 x i1> %v1345}1346 1347define <8 x i1> @icmp_eq_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1348; RV32-LABEL: icmp_eq_vx_v8i64:1349; RV32: # %bb.0:1350; RV32-NEXT: addi sp, sp, -161351; RV32-NEXT: .cfi_def_cfa_offset 161352; RV32-NEXT: sw a0, 8(sp)1353; RV32-NEXT: sw a1, 12(sp)1354; RV32-NEXT: addi a0, sp, 81355; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1356; RV32-NEXT: vlse64.v v16, (a0), zero1357; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1358; RV32-NEXT: vmseq.vv v12, v8, v16, v0.t1359; RV32-NEXT: vmv1r.v v0, v121360; RV32-NEXT: addi sp, sp, 161361; RV32-NEXT: .cfi_def_cfa_offset 01362; RV32-NEXT: ret1363;1364; RV64-LABEL: icmp_eq_vx_v8i64:1365; RV64: # %bb.0:1366; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1367; RV64-NEXT: vmseq.vx v12, v8, a0, v0.t1368; RV64-NEXT: vmv1r.v v0, v121369; RV64-NEXT: ret1370 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01371 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1372 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"eq", <8 x i1> %m, i32 %evl)1373 ret <8 x i1> %v1374}1375 1376define <8 x i1> @icmp_eq_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1377; RV32-LABEL: icmp_eq_vx_swap_v8i64:1378; RV32: # %bb.0:1379; RV32-NEXT: addi sp, sp, -161380; RV32-NEXT: .cfi_def_cfa_offset 161381; RV32-NEXT: sw a0, 8(sp)1382; RV32-NEXT: sw a1, 12(sp)1383; RV32-NEXT: addi a0, sp, 81384; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1385; RV32-NEXT: vlse64.v v16, (a0), zero1386; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1387; RV32-NEXT: vmseq.vv v12, v16, v8, v0.t1388; RV32-NEXT: vmv1r.v v0, v121389; RV32-NEXT: addi sp, sp, 161390; RV32-NEXT: .cfi_def_cfa_offset 01391; RV32-NEXT: ret1392;1393; RV64-LABEL: icmp_eq_vx_swap_v8i64:1394; RV64: # %bb.0:1395; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1396; RV64-NEXT: vmseq.vx v12, v8, a0, v0.t1397; RV64-NEXT: vmv1r.v v0, v121398; RV64-NEXT: ret1399 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01400 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1401 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %vb, <8 x i64> %va, metadata !"eq", <8 x i1> %m, i32 %evl)1402 ret <8 x i1> %v1403}1404 1405define <8 x i1> @icmp_eq_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1406; CHECK-LABEL: icmp_eq_vi_v8i64:1407; CHECK: # %bb.0:1408; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1409; CHECK-NEXT: vmseq.vi v12, v8, 4, v0.t1410; CHECK-NEXT: vmv1r.v v0, v121411; CHECK-NEXT: ret1412 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), metadata !"eq", <8 x i1> %m, i32 %evl)1413 ret <8 x i1> %v1414}1415 1416define <8 x i1> @icmp_eq_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1417; CHECK-LABEL: icmp_eq_vi_swap_v8i64:1418; CHECK: # %bb.0:1419; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1420; CHECK-NEXT: vmseq.vi v12, v8, 4, v0.t1421; CHECK-NEXT: vmv1r.v v0, v121422; CHECK-NEXT: ret1423 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> splat (i64 4), <8 x i64> %va, metadata !"eq", <8 x i1> %m, i32 %evl)1424 ret <8 x i1> %v1425}1426 1427define <8 x i1> @icmp_ne_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {1428; CHECK-LABEL: icmp_ne_vv_v8i64:1429; CHECK: # %bb.0:1430; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1431; CHECK-NEXT: vmsne.vv v16, v8, v12, v0.t1432; CHECK-NEXT: vmv1r.v v0, v161433; CHECK-NEXT: ret1434 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"ne", <8 x i1> %m, i32 %evl)1435 ret <8 x i1> %v1436}1437 1438define <8 x i1> @icmp_ne_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1439; RV32-LABEL: icmp_ne_vx_v8i64:1440; RV32: # %bb.0:1441; RV32-NEXT: addi sp, sp, -161442; RV32-NEXT: .cfi_def_cfa_offset 161443; RV32-NEXT: sw a0, 8(sp)1444; RV32-NEXT: sw a1, 12(sp)1445; RV32-NEXT: addi a0, sp, 81446; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1447; RV32-NEXT: vlse64.v v16, (a0), zero1448; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1449; RV32-NEXT: vmsne.vv v12, v8, v16, v0.t1450; RV32-NEXT: vmv1r.v v0, v121451; RV32-NEXT: addi sp, sp, 161452; RV32-NEXT: .cfi_def_cfa_offset 01453; RV32-NEXT: ret1454;1455; RV64-LABEL: icmp_ne_vx_v8i64:1456; RV64: # %bb.0:1457; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1458; RV64-NEXT: vmsne.vx v12, v8, a0, v0.t1459; RV64-NEXT: vmv1r.v v0, v121460; RV64-NEXT: ret1461 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01462 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1463 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"ne", <8 x i1> %m, i32 %evl)1464 ret <8 x i1> %v1465}1466 1467define <8 x i1> @icmp_ne_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1468; RV32-LABEL: icmp_ne_vx_swap_v8i64:1469; RV32: # %bb.0:1470; RV32-NEXT: addi sp, sp, -161471; RV32-NEXT: .cfi_def_cfa_offset 161472; RV32-NEXT: sw a0, 8(sp)1473; RV32-NEXT: sw a1, 12(sp)1474; RV32-NEXT: addi a0, sp, 81475; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1476; RV32-NEXT: vlse64.v v16, (a0), zero1477; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1478; RV32-NEXT: vmsne.vv v12, v16, v8, v0.t1479; RV32-NEXT: vmv1r.v v0, v121480; RV32-NEXT: addi sp, sp, 161481; RV32-NEXT: .cfi_def_cfa_offset 01482; RV32-NEXT: ret1483;1484; RV64-LABEL: icmp_ne_vx_swap_v8i64:1485; RV64: # %bb.0:1486; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1487; RV64-NEXT: vmsne.vx v12, v8, a0, v0.t1488; RV64-NEXT: vmv1r.v v0, v121489; RV64-NEXT: ret1490 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01491 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1492 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %vb, <8 x i64> %va, metadata !"ne", <8 x i1> %m, i32 %evl)1493 ret <8 x i1> %v1494}1495 1496define <8 x i1> @icmp_ne_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1497; CHECK-LABEL: icmp_ne_vi_v8i64:1498; CHECK: # %bb.0:1499; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1500; CHECK-NEXT: vmsne.vi v12, v8, 4, v0.t1501; CHECK-NEXT: vmv1r.v v0, v121502; CHECK-NEXT: ret1503 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), metadata !"ne", <8 x i1> %m, i32 %evl)1504 ret <8 x i1> %v1505}1506 1507define <8 x i1> @icmp_ne_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1508; CHECK-LABEL: icmp_ne_vi_swap_v8i64:1509; CHECK: # %bb.0:1510; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1511; CHECK-NEXT: vmsne.vi v12, v8, 4, v0.t1512; CHECK-NEXT: vmv1r.v v0, v121513; CHECK-NEXT: ret1514 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> splat (i64 4), <8 x i64> %va, metadata !"ne", <8 x i1> %m, i32 %evl)1515 ret <8 x i1> %v1516}1517 1518define <8 x i1> @icmp_ugt_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {1519; CHECK-LABEL: icmp_ugt_vv_v8i64:1520; CHECK: # %bb.0:1521; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1522; CHECK-NEXT: vmsltu.vv v16, v12, v8, v0.t1523; CHECK-NEXT: vmv1r.v v0, v161524; CHECK-NEXT: ret1525 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"ugt", <8 x i1> %m, i32 %evl)1526 ret <8 x i1> %v1527}1528 1529define <8 x i1> @icmp_ugt_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1530; RV32-LABEL: icmp_ugt_vx_v8i64:1531; RV32: # %bb.0:1532; RV32-NEXT: addi sp, sp, -161533; RV32-NEXT: .cfi_def_cfa_offset 161534; RV32-NEXT: sw a0, 8(sp)1535; RV32-NEXT: sw a1, 12(sp)1536; RV32-NEXT: addi a0, sp, 81537; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1538; RV32-NEXT: vlse64.v v16, (a0), zero1539; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1540; RV32-NEXT: vmsltu.vv v12, v16, v8, v0.t1541; RV32-NEXT: vmv1r.v v0, v121542; RV32-NEXT: addi sp, sp, 161543; RV32-NEXT: .cfi_def_cfa_offset 01544; RV32-NEXT: ret1545;1546; RV64-LABEL: icmp_ugt_vx_v8i64:1547; RV64: # %bb.0:1548; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1549; RV64-NEXT: vmsgtu.vx v12, v8, a0, v0.t1550; RV64-NEXT: vmv1r.v v0, v121551; RV64-NEXT: ret1552 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01553 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1554 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"ugt", <8 x i1> %m, i32 %evl)1555 ret <8 x i1> %v1556}1557 1558define <8 x i1> @icmp_ugt_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1559; RV32-LABEL: icmp_ugt_vx_swap_v8i64:1560; RV32: # %bb.0:1561; RV32-NEXT: addi sp, sp, -161562; RV32-NEXT: .cfi_def_cfa_offset 161563; RV32-NEXT: sw a0, 8(sp)1564; RV32-NEXT: sw a1, 12(sp)1565; RV32-NEXT: addi a0, sp, 81566; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1567; RV32-NEXT: vlse64.v v16, (a0), zero1568; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1569; RV32-NEXT: vmsltu.vv v12, v8, v16, v0.t1570; RV32-NEXT: vmv1r.v v0, v121571; RV32-NEXT: addi sp, sp, 161572; RV32-NEXT: .cfi_def_cfa_offset 01573; RV32-NEXT: ret1574;1575; RV64-LABEL: icmp_ugt_vx_swap_v8i64:1576; RV64: # %bb.0:1577; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1578; RV64-NEXT: vmsltu.vx v12, v8, a0, v0.t1579; RV64-NEXT: vmv1r.v v0, v121580; RV64-NEXT: ret1581 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01582 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1583 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %vb, <8 x i64> %va, metadata !"ugt", <8 x i1> %m, i32 %evl)1584 ret <8 x i1> %v1585}1586 1587define <8 x i1> @icmp_ugt_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1588; CHECK-LABEL: icmp_ugt_vi_v8i64:1589; CHECK: # %bb.0:1590; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1591; CHECK-NEXT: vmsgtu.vi v12, v8, 4, v0.t1592; CHECK-NEXT: vmv1r.v v0, v121593; CHECK-NEXT: ret1594 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), metadata !"ugt", <8 x i1> %m, i32 %evl)1595 ret <8 x i1> %v1596}1597 1598define <8 x i1> @icmp_ugt_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1599; CHECK-LABEL: icmp_ugt_vi_swap_v8i64:1600; CHECK: # %bb.0:1601; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1602; CHECK-NEXT: vmsleu.vi v12, v8, 3, v0.t1603; CHECK-NEXT: vmv1r.v v0, v121604; CHECK-NEXT: ret1605 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> splat (i64 4), <8 x i64> %va, metadata !"ugt", <8 x i1> %m, i32 %evl)1606 ret <8 x i1> %v1607}1608 1609define <8 x i1> @icmp_uge_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {1610; CHECK-LABEL: icmp_uge_vv_v8i64:1611; CHECK: # %bb.0:1612; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1613; CHECK-NEXT: vmsleu.vv v16, v12, v8, v0.t1614; CHECK-NEXT: vmv1r.v v0, v161615; CHECK-NEXT: ret1616 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"uge", <8 x i1> %m, i32 %evl)1617 ret <8 x i1> %v1618}1619 1620define <8 x i1> @icmp_uge_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1621; RV32-LABEL: icmp_uge_vx_v8i64:1622; RV32: # %bb.0:1623; RV32-NEXT: addi sp, sp, -161624; RV32-NEXT: .cfi_def_cfa_offset 161625; RV32-NEXT: sw a0, 8(sp)1626; RV32-NEXT: sw a1, 12(sp)1627; RV32-NEXT: addi a0, sp, 81628; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1629; RV32-NEXT: vlse64.v v16, (a0), zero1630; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1631; RV32-NEXT: vmsleu.vv v12, v16, v8, v0.t1632; RV32-NEXT: vmv1r.v v0, v121633; RV32-NEXT: addi sp, sp, 161634; RV32-NEXT: .cfi_def_cfa_offset 01635; RV32-NEXT: ret1636;1637; RV64-LABEL: icmp_uge_vx_v8i64:1638; RV64: # %bb.0:1639; RV64-NEXT: vsetivli zero, 8, e64, m4, ta, ma1640; RV64-NEXT: vmv.v.x v16, a01641; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1642; RV64-NEXT: vmsleu.vv v12, v16, v8, v0.t1643; RV64-NEXT: vmv1r.v v0, v121644; RV64-NEXT: ret1645 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01646 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1647 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"uge", <8 x i1> %m, i32 %evl)1648 ret <8 x i1> %v1649}1650 1651define <8 x i1> @icmp_uge_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1652; RV32-LABEL: icmp_uge_vx_swap_v8i64:1653; RV32: # %bb.0:1654; RV32-NEXT: addi sp, sp, -161655; RV32-NEXT: .cfi_def_cfa_offset 161656; RV32-NEXT: sw a0, 8(sp)1657; RV32-NEXT: sw a1, 12(sp)1658; RV32-NEXT: addi a0, sp, 81659; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1660; RV32-NEXT: vlse64.v v16, (a0), zero1661; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1662; RV32-NEXT: vmsleu.vv v12, v8, v16, v0.t1663; RV32-NEXT: vmv1r.v v0, v121664; RV32-NEXT: addi sp, sp, 161665; RV32-NEXT: .cfi_def_cfa_offset 01666; RV32-NEXT: ret1667;1668; RV64-LABEL: icmp_uge_vx_swap_v8i64:1669; RV64: # %bb.0:1670; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1671; RV64-NEXT: vmsleu.vx v12, v8, a0, v0.t1672; RV64-NEXT: vmv1r.v v0, v121673; RV64-NEXT: ret1674 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01675 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1676 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %vb, <8 x i64> %va, metadata !"uge", <8 x i1> %m, i32 %evl)1677 ret <8 x i1> %v1678}1679 1680define <8 x i1> @icmp_uge_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1681; CHECK-LABEL: icmp_uge_vi_v8i64:1682; CHECK: # %bb.0:1683; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1684; CHECK-NEXT: vmsgtu.vi v12, v8, 3, v0.t1685; CHECK-NEXT: vmv1r.v v0, v121686; CHECK-NEXT: ret1687 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), metadata !"uge", <8 x i1> %m, i32 %evl)1688 ret <8 x i1> %v1689}1690 1691define <8 x i1> @icmp_uge_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1692; CHECK-LABEL: icmp_uge_vi_swap_v8i64:1693; CHECK: # %bb.0:1694; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1695; CHECK-NEXT: vmsleu.vi v12, v8, 4, v0.t1696; CHECK-NEXT: vmv1r.v v0, v121697; CHECK-NEXT: ret1698 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> splat (i64 4), <8 x i64> %va, metadata !"uge", <8 x i1> %m, i32 %evl)1699 ret <8 x i1> %v1700}1701 1702define <8 x i1> @icmp_ult_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {1703; CHECK-LABEL: icmp_ult_vv_v8i64:1704; CHECK: # %bb.0:1705; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1706; CHECK-NEXT: vmsltu.vv v16, v8, v12, v0.t1707; CHECK-NEXT: vmv1r.v v0, v161708; CHECK-NEXT: ret1709 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"ult", <8 x i1> %m, i32 %evl)1710 ret <8 x i1> %v1711}1712 1713define <8 x i1> @icmp_ult_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1714; RV32-LABEL: icmp_ult_vx_v8i64:1715; RV32: # %bb.0:1716; RV32-NEXT: addi sp, sp, -161717; RV32-NEXT: .cfi_def_cfa_offset 161718; RV32-NEXT: sw a0, 8(sp)1719; RV32-NEXT: sw a1, 12(sp)1720; RV32-NEXT: addi a0, sp, 81721; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1722; RV32-NEXT: vlse64.v v16, (a0), zero1723; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1724; RV32-NEXT: vmsltu.vv v12, v8, v16, v0.t1725; RV32-NEXT: vmv1r.v v0, v121726; RV32-NEXT: addi sp, sp, 161727; RV32-NEXT: .cfi_def_cfa_offset 01728; RV32-NEXT: ret1729;1730; RV64-LABEL: icmp_ult_vx_v8i64:1731; RV64: # %bb.0:1732; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1733; RV64-NEXT: vmsltu.vx v12, v8, a0, v0.t1734; RV64-NEXT: vmv1r.v v0, v121735; RV64-NEXT: ret1736 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01737 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1738 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"ult", <8 x i1> %m, i32 %evl)1739 ret <8 x i1> %v1740}1741 1742define <8 x i1> @icmp_ult_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1743; RV32-LABEL: icmp_ult_vx_swap_v8i64:1744; RV32: # %bb.0:1745; RV32-NEXT: addi sp, sp, -161746; RV32-NEXT: .cfi_def_cfa_offset 161747; RV32-NEXT: sw a0, 8(sp)1748; RV32-NEXT: sw a1, 12(sp)1749; RV32-NEXT: addi a0, sp, 81750; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1751; RV32-NEXT: vlse64.v v16, (a0), zero1752; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1753; RV32-NEXT: vmsltu.vv v12, v16, v8, v0.t1754; RV32-NEXT: vmv1r.v v0, v121755; RV32-NEXT: addi sp, sp, 161756; RV32-NEXT: .cfi_def_cfa_offset 01757; RV32-NEXT: ret1758;1759; RV64-LABEL: icmp_ult_vx_swap_v8i64:1760; RV64: # %bb.0:1761; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1762; RV64-NEXT: vmsgtu.vx v12, v8, a0, v0.t1763; RV64-NEXT: vmv1r.v v0, v121764; RV64-NEXT: ret1765 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01766 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1767 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %vb, <8 x i64> %va, metadata !"ult", <8 x i1> %m, i32 %evl)1768 ret <8 x i1> %v1769}1770 1771define <8 x i1> @icmp_ult_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1772; CHECK-LABEL: icmp_ult_vi_v8i64:1773; CHECK: # %bb.0:1774; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1775; CHECK-NEXT: vmsleu.vi v12, v8, 3, v0.t1776; CHECK-NEXT: vmv1r.v v0, v121777; CHECK-NEXT: ret1778 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), metadata !"ult", <8 x i1> %m, i32 %evl)1779 ret <8 x i1> %v1780}1781 1782define <8 x i1> @icmp_ult_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1783; CHECK-LABEL: icmp_ult_vi_swap_v8i64:1784; CHECK: # %bb.0:1785; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1786; CHECK-NEXT: vmsgtu.vi v12, v8, 4, v0.t1787; CHECK-NEXT: vmv1r.v v0, v121788; CHECK-NEXT: ret1789 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> splat (i64 4), <8 x i64> %va, metadata !"ult", <8 x i1> %m, i32 %evl)1790 ret <8 x i1> %v1791}1792 1793define <8 x i1> @icmp_sgt_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {1794; CHECK-LABEL: icmp_sgt_vv_v8i64:1795; CHECK: # %bb.0:1796; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1797; CHECK-NEXT: vmslt.vv v16, v12, v8, v0.t1798; CHECK-NEXT: vmv1r.v v0, v161799; CHECK-NEXT: ret1800 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"sgt", <8 x i1> %m, i32 %evl)1801 ret <8 x i1> %v1802}1803 1804define <8 x i1> @icmp_sgt_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1805; RV32-LABEL: icmp_sgt_vx_v8i64:1806; RV32: # %bb.0:1807; RV32-NEXT: addi sp, sp, -161808; RV32-NEXT: .cfi_def_cfa_offset 161809; RV32-NEXT: sw a0, 8(sp)1810; RV32-NEXT: sw a1, 12(sp)1811; RV32-NEXT: addi a0, sp, 81812; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1813; RV32-NEXT: vlse64.v v16, (a0), zero1814; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1815; RV32-NEXT: vmslt.vv v12, v16, v8, v0.t1816; RV32-NEXT: vmv1r.v v0, v121817; RV32-NEXT: addi sp, sp, 161818; RV32-NEXT: .cfi_def_cfa_offset 01819; RV32-NEXT: ret1820;1821; RV64-LABEL: icmp_sgt_vx_v8i64:1822; RV64: # %bb.0:1823; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1824; RV64-NEXT: vmsgt.vx v12, v8, a0, v0.t1825; RV64-NEXT: vmv1r.v v0, v121826; RV64-NEXT: ret1827 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01828 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1829 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"sgt", <8 x i1> %m, i32 %evl)1830 ret <8 x i1> %v1831}1832 1833define <8 x i1> @icmp_sgt_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1834; RV32-LABEL: icmp_sgt_vx_swap_v8i64:1835; RV32: # %bb.0:1836; RV32-NEXT: addi sp, sp, -161837; RV32-NEXT: .cfi_def_cfa_offset 161838; RV32-NEXT: sw a0, 8(sp)1839; RV32-NEXT: sw a1, 12(sp)1840; RV32-NEXT: addi a0, sp, 81841; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1842; RV32-NEXT: vlse64.v v16, (a0), zero1843; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1844; RV32-NEXT: vmslt.vv v12, v8, v16, v0.t1845; RV32-NEXT: vmv1r.v v0, v121846; RV32-NEXT: addi sp, sp, 161847; RV32-NEXT: .cfi_def_cfa_offset 01848; RV32-NEXT: ret1849;1850; RV64-LABEL: icmp_sgt_vx_swap_v8i64:1851; RV64: # %bb.0:1852; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1853; RV64-NEXT: vmslt.vx v12, v8, a0, v0.t1854; RV64-NEXT: vmv1r.v v0, v121855; RV64-NEXT: ret1856 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01857 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1858 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %vb, <8 x i64> %va, metadata !"sgt", <8 x i1> %m, i32 %evl)1859 ret <8 x i1> %v1860}1861 1862define <8 x i1> @icmp_sgt_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1863; CHECK-LABEL: icmp_sgt_vi_v8i64:1864; CHECK: # %bb.0:1865; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1866; CHECK-NEXT: vmsgt.vi v12, v8, 4, v0.t1867; CHECK-NEXT: vmv1r.v v0, v121868; CHECK-NEXT: ret1869 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), metadata !"sgt", <8 x i1> %m, i32 %evl)1870 ret <8 x i1> %v1871}1872 1873define <8 x i1> @icmp_sgt_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1874; CHECK-LABEL: icmp_sgt_vi_swap_v8i64:1875; CHECK: # %bb.0:1876; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1877; CHECK-NEXT: vmsle.vi v12, v8, 3, v0.t1878; CHECK-NEXT: vmv1r.v v0, v121879; CHECK-NEXT: ret1880 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> splat (i64 4), <8 x i64> %va, metadata !"sgt", <8 x i1> %m, i32 %evl)1881 ret <8 x i1> %v1882}1883 1884define <8 x i1> @icmp_sge_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {1885; CHECK-LABEL: icmp_sge_vv_v8i64:1886; CHECK: # %bb.0:1887; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1888; CHECK-NEXT: vmsle.vv v16, v12, v8, v0.t1889; CHECK-NEXT: vmv1r.v v0, v161890; CHECK-NEXT: ret1891 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"sge", <8 x i1> %m, i32 %evl)1892 ret <8 x i1> %v1893}1894 1895define <8 x i1> @icmp_sge_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1896; RV32-LABEL: icmp_sge_vx_v8i64:1897; RV32: # %bb.0:1898; RV32-NEXT: addi sp, sp, -161899; RV32-NEXT: .cfi_def_cfa_offset 161900; RV32-NEXT: sw a0, 8(sp)1901; RV32-NEXT: sw a1, 12(sp)1902; RV32-NEXT: addi a0, sp, 81903; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1904; RV32-NEXT: vlse64.v v16, (a0), zero1905; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1906; RV32-NEXT: vmsle.vv v12, v16, v8, v0.t1907; RV32-NEXT: vmv1r.v v0, v121908; RV32-NEXT: addi sp, sp, 161909; RV32-NEXT: .cfi_def_cfa_offset 01910; RV32-NEXT: ret1911;1912; RV64-LABEL: icmp_sge_vx_v8i64:1913; RV64: # %bb.0:1914; RV64-NEXT: vsetivli zero, 8, e64, m4, ta, ma1915; RV64-NEXT: vmv.v.x v16, a01916; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1917; RV64-NEXT: vmsle.vv v12, v16, v8, v0.t1918; RV64-NEXT: vmv1r.v v0, v121919; RV64-NEXT: ret1920 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01921 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1922 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"sge", <8 x i1> %m, i32 %evl)1923 ret <8 x i1> %v1924}1925 1926define <8 x i1> @icmp_sge_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1927; RV32-LABEL: icmp_sge_vx_swap_v8i64:1928; RV32: # %bb.0:1929; RV32-NEXT: addi sp, sp, -161930; RV32-NEXT: .cfi_def_cfa_offset 161931; RV32-NEXT: sw a0, 8(sp)1932; RV32-NEXT: sw a1, 12(sp)1933; RV32-NEXT: addi a0, sp, 81934; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1935; RV32-NEXT: vlse64.v v16, (a0), zero1936; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1937; RV32-NEXT: vmsle.vv v12, v8, v16, v0.t1938; RV32-NEXT: vmv1r.v v0, v121939; RV32-NEXT: addi sp, sp, 161940; RV32-NEXT: .cfi_def_cfa_offset 01941; RV32-NEXT: ret1942;1943; RV64-LABEL: icmp_sge_vx_swap_v8i64:1944; RV64: # %bb.0:1945; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1946; RV64-NEXT: vmsle.vx v12, v8, a0, v0.t1947; RV64-NEXT: vmv1r.v v0, v121948; RV64-NEXT: ret1949 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01950 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1951 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %vb, <8 x i64> %va, metadata !"sge", <8 x i1> %m, i32 %evl)1952 ret <8 x i1> %v1953}1954 1955define <8 x i1> @icmp_sge_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1956; CHECK-LABEL: icmp_sge_vi_v8i64:1957; CHECK: # %bb.0:1958; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1959; CHECK-NEXT: vmsgt.vi v12, v8, 3, v0.t1960; CHECK-NEXT: vmv1r.v v0, v121961; CHECK-NEXT: ret1962 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), metadata !"sge", <8 x i1> %m, i32 %evl)1963 ret <8 x i1> %v1964}1965 1966define <8 x i1> @icmp_sge_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {1967; CHECK-LABEL: icmp_sge_vi_swap_v8i64:1968; CHECK: # %bb.0:1969; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1970; CHECK-NEXT: vmsle.vi v12, v8, 4, v0.t1971; CHECK-NEXT: vmv1r.v v0, v121972; CHECK-NEXT: ret1973 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> splat (i64 4), <8 x i64> %va, metadata !"sge", <8 x i1> %m, i32 %evl)1974 ret <8 x i1> %v1975}1976 1977define <8 x i1> @icmp_slt_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {1978; CHECK-LABEL: icmp_slt_vv_v8i64:1979; CHECK: # %bb.0:1980; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1981; CHECK-NEXT: vmslt.vv v16, v8, v12, v0.t1982; CHECK-NEXT: vmv1r.v v0, v161983; CHECK-NEXT: ret1984 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"slt", <8 x i1> %m, i32 %evl)1985 ret <8 x i1> %v1986}1987 1988define <8 x i1> @icmp_slt_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {1989; RV32-LABEL: icmp_slt_vx_v8i64:1990; RV32: # %bb.0:1991; RV32-NEXT: addi sp, sp, -161992; RV32-NEXT: .cfi_def_cfa_offset 161993; RV32-NEXT: sw a0, 8(sp)1994; RV32-NEXT: sw a1, 12(sp)1995; RV32-NEXT: addi a0, sp, 81996; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1997; RV32-NEXT: vlse64.v v16, (a0), zero1998; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1999; RV32-NEXT: vmslt.vv v12, v8, v16, v0.t2000; RV32-NEXT: vmv1r.v v0, v122001; RV32-NEXT: addi sp, sp, 162002; RV32-NEXT: .cfi_def_cfa_offset 02003; RV32-NEXT: ret2004;2005; RV64-LABEL: icmp_slt_vx_v8i64:2006; RV64: # %bb.0:2007; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma2008; RV64-NEXT: vmslt.vx v12, v8, a0, v0.t2009; RV64-NEXT: vmv1r.v v0, v122010; RV64-NEXT: ret2011 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 02012 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer2013 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"slt", <8 x i1> %m, i32 %evl)2014 ret <8 x i1> %v2015}2016 2017define <8 x i1> @icmp_slt_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {2018; RV32-LABEL: icmp_slt_vx_swap_v8i64:2019; RV32: # %bb.0:2020; RV32-NEXT: addi sp, sp, -162021; RV32-NEXT: .cfi_def_cfa_offset 162022; RV32-NEXT: sw a0, 8(sp)2023; RV32-NEXT: sw a1, 12(sp)2024; RV32-NEXT: addi a0, sp, 82025; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma2026; RV32-NEXT: vlse64.v v16, (a0), zero2027; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma2028; RV32-NEXT: vmslt.vv v12, v16, v8, v0.t2029; RV32-NEXT: vmv1r.v v0, v122030; RV32-NEXT: addi sp, sp, 162031; RV32-NEXT: .cfi_def_cfa_offset 02032; RV32-NEXT: ret2033;2034; RV64-LABEL: icmp_slt_vx_swap_v8i64:2035; RV64: # %bb.0:2036; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma2037; RV64-NEXT: vmsgt.vx v12, v8, a0, v0.t2038; RV64-NEXT: vmv1r.v v0, v122039; RV64-NEXT: ret2040 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 02041 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer2042 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %vb, <8 x i64> %va, metadata !"slt", <8 x i1> %m, i32 %evl)2043 ret <8 x i1> %v2044}2045 2046define <8 x i1> @icmp_slt_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {2047; CHECK-LABEL: icmp_slt_vi_v8i64:2048; CHECK: # %bb.0:2049; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma2050; CHECK-NEXT: vmsle.vi v12, v8, 3, v0.t2051; CHECK-NEXT: vmv1r.v v0, v122052; CHECK-NEXT: ret2053 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), metadata !"slt", <8 x i1> %m, i32 %evl)2054 ret <8 x i1> %v2055}2056 2057define <8 x i1> @icmp_slt_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {2058; CHECK-LABEL: icmp_slt_vi_swap_v8i64:2059; CHECK: # %bb.0:2060; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma2061; CHECK-NEXT: vmsgt.vi v12, v8, 4, v0.t2062; CHECK-NEXT: vmv1r.v v0, v122063; CHECK-NEXT: ret2064 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> splat (i64 4), <8 x i64> %va, metadata !"slt", <8 x i1> %m, i32 %evl)2065 ret <8 x i1> %v2066}2067 2068define <8 x i1> @icmp_sle_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {2069; CHECK-LABEL: icmp_sle_vv_v8i64:2070; CHECK: # %bb.0:2071; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma2072; CHECK-NEXT: vmsle.vv v16, v8, v12, v0.t2073; CHECK-NEXT: vmv1r.v v0, v162074; CHECK-NEXT: ret2075 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"sle", <8 x i1> %m, i32 %evl)2076 ret <8 x i1> %v2077}2078 2079define <8 x i1> @icmp_sle_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {2080; RV32-LABEL: icmp_sle_vx_v8i64:2081; RV32: # %bb.0:2082; RV32-NEXT: addi sp, sp, -162083; RV32-NEXT: .cfi_def_cfa_offset 162084; RV32-NEXT: sw a0, 8(sp)2085; RV32-NEXT: sw a1, 12(sp)2086; RV32-NEXT: addi a0, sp, 82087; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma2088; RV32-NEXT: vlse64.v v16, (a0), zero2089; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma2090; RV32-NEXT: vmsle.vv v12, v8, v16, v0.t2091; RV32-NEXT: vmv1r.v v0, v122092; RV32-NEXT: addi sp, sp, 162093; RV32-NEXT: .cfi_def_cfa_offset 02094; RV32-NEXT: ret2095;2096; RV64-LABEL: icmp_sle_vx_v8i64:2097; RV64: # %bb.0:2098; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma2099; RV64-NEXT: vmsle.vx v12, v8, a0, v0.t2100; RV64-NEXT: vmv1r.v v0, v122101; RV64-NEXT: ret2102 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 02103 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer2104 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> %vb, metadata !"sle", <8 x i1> %m, i32 %evl)2105 ret <8 x i1> %v2106}2107 2108define <8 x i1> @icmp_sle_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {2109; RV32-LABEL: icmp_sle_vx_swap_v8i64:2110; RV32: # %bb.0:2111; RV32-NEXT: addi sp, sp, -162112; RV32-NEXT: .cfi_def_cfa_offset 162113; RV32-NEXT: sw a0, 8(sp)2114; RV32-NEXT: sw a1, 12(sp)2115; RV32-NEXT: addi a0, sp, 82116; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma2117; RV32-NEXT: vlse64.v v16, (a0), zero2118; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma2119; RV32-NEXT: vmsle.vv v12, v16, v8, v0.t2120; RV32-NEXT: vmv1r.v v0, v122121; RV32-NEXT: addi sp, sp, 162122; RV32-NEXT: .cfi_def_cfa_offset 02123; RV32-NEXT: ret2124;2125; RV64-LABEL: icmp_sle_vx_swap_v8i64:2126; RV64: # %bb.0:2127; RV64-NEXT: vsetivli zero, 8, e64, m4, ta, ma2128; RV64-NEXT: vmv.v.x v16, a02129; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma2130; RV64-NEXT: vmsle.vv v12, v16, v8, v0.t2131; RV64-NEXT: vmv1r.v v0, v122132; RV64-NEXT: ret2133 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 02134 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer2135 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %vb, <8 x i64> %va, metadata !"sle", <8 x i1> %m, i32 %evl)2136 ret <8 x i1> %v2137}2138 2139define <8 x i1> @icmp_sle_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {2140; CHECK-LABEL: icmp_sle_vi_v8i64:2141; CHECK: # %bb.0:2142; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma2143; CHECK-NEXT: vmsle.vi v12, v8, 4, v0.t2144; CHECK-NEXT: vmv1r.v v0, v122145; CHECK-NEXT: ret2146 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), metadata !"sle", <8 x i1> %m, i32 %evl)2147 ret <8 x i1> %v2148}2149 2150define <8 x i1> @icmp_sle_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {2151; CHECK-LABEL: icmp_sle_vi_swap_v8i64:2152; CHECK: # %bb.0:2153; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma2154; CHECK-NEXT: vmsgt.vi v12, v8, 3, v0.t2155; CHECK-NEXT: vmv1r.v v0, v122156; CHECK-NEXT: ret2157 %v = call <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64> splat (i64 4), <8 x i64> %va, metadata !"sle", <8 x i1> %m, i32 %evl)2158 ret <8 x i1> %v2159}2160