1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+v,+m -verify-machineinstrs < %s \ 3; RUN: | FileCheck %s --check-prefixes=CHECK,RV32 4; RUN: llc -mtriple=riscv64 -mattr=+v,+m -verify-machineinstrs < %s \ 5; RUN: | FileCheck %s --check-prefixes=CHECK,RV64 6 7; FIXME: We're missing canonicalizations of ISD::VP_SETCC equivalent to those 8; for ISD::SETCC, e.g., splats aren't moved to the RHS. 9 10declare <8 x i1> @llvm.vp.icmp.v8i7(<8 x i7>, <8 x i7>, metadata, <8 x i1>, i32) 11 12define <8 x i1> @icmp_eq_vv_v8i7(<8 x i7> %va, <8 x i7> %vb, <8 x i1> %m, i32 zeroext %evl) { 13; CHECK-LABEL: icmp_eq_vv_v8i7: 14; CHECK: # %bb.0: 15; CHECK-NEXT: li a1, 127 16; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 17; CHECK-NEXT: vand.vx v9, v9, a1 18; CHECK-NEXT: vand.vx v8, v8, a1 19; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 20; CHECK-NEXT: vmseq.vv v0, v8, v9, v0.t 21; CHECK-NEXT: ret 22 %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) 23 ret <8 x i1> %v 24} 25 26define <8 x i1> @icmp_eq_vx_v8i7(<8 x i7> %va, i7 %b, <8 x i1> %m, i32 zeroext %evl) { 27; CHECK-LABEL: icmp_eq_vx_v8i7: 28; CHECK: # %bb.0: 29; CHECK-NEXT: li a2, 127 30; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 31; CHECK-NEXT: vmv.v.x v9, a0 32; CHECK-NEXT: vand.vx v8, v8, a2 33; CHECK-NEXT: vand.vx v9, v9, a2 34; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 35; CHECK-NEXT: vmseq.vv v0, v8, v9, v0.t 36; CHECK-NEXT: ret 37 %elt.head = insertelement <8 x i7> poison, i7 %b, i32 0 38 %vb = shufflevector <8 x i7> %elt.head, <8 x i7> poison, <8 x i32> zeroinitializer 39 %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) 40 ret <8 x i1> %v 41} 42 43define <8 x i1> @icmp_eq_vx_swap_v8i7(<8 x i7> %va, i7 %b, <8 x i1> %m, i32 zeroext %evl) { 44; CHECK-LABEL: icmp_eq_vx_swap_v8i7: 45; CHECK: # %bb.0: 46; CHECK-NEXT: li a2, 127 47; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 48; CHECK-NEXT: vmv.v.x v9, a0 49; CHECK-NEXT: vand.vx v8, v8, a2 50; CHECK-NEXT: vand.vx v9, v9, a2 51; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 52; CHECK-NEXT: vmseq.vv v0, v9, v8, v0.t 53; CHECK-NEXT: ret 54 %elt.head = insertelement <8 x i7> poison, i7 %b, i32 0 55 %vb = shufflevector <8 x i7> %elt.head, <8 x i7> poison, <8 x i32> zeroinitializer 56 %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) 57 ret <8 x i1> %v 58} 59 60declare <5 x i1> @llvm.vp.icmp.v5i8(<5 x i8>, <5 x i8>, metadata, <5 x i1>, i32) 61 62define <5 x i1> @icmp_eq_vv_v5i8(<5 x i8> %va, <5 x i8> %vb, <5 x i1> %m, i32 zeroext %evl) { 63; CHECK-LABEL: icmp_eq_vv_v5i8: 64; CHECK: # %bb.0: 65; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 66; CHECK-NEXT: vmseq.vv v0, v8, v9, v0.t 67; CHECK-NEXT: ret 68 %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) 69 ret <5 x i1> %v 70} 71 72define <5 x i1> @icmp_eq_vx_v5i8(<5 x i8> %va, i8 %b, <5 x i1> %m, i32 zeroext %evl) { 73; CHECK-LABEL: icmp_eq_vx_v5i8: 74; CHECK: # %bb.0: 75; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 76; CHECK-NEXT: vmseq.vx v0, v8, a0, v0.t 77; CHECK-NEXT: ret 78 %elt.head = insertelement <5 x i8> poison, i8 %b, i32 0 79 %vb = shufflevector <5 x i8> %elt.head, <5 x i8> poison, <5 x i32> zeroinitializer 80 %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) 81 ret <5 x i1> %v 82} 83 84define <5 x i1> @icmp_eq_vx_swap_v5i8(<5 x i8> %va, i8 %b, <5 x i1> %m, i32 zeroext %evl) { 85; CHECK-LABEL: icmp_eq_vx_swap_v5i8: 86; CHECK: # %bb.0: 87; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 88; CHECK-NEXT: vmseq.vx v0, v8, a0, v0.t 89; CHECK-NEXT: ret 90 %elt.head = insertelement <5 x i8> poison, i8 %b, i32 0 91 %vb = shufflevector <5 x i8> %elt.head, <5 x i8> poison, <5 x i32> zeroinitializer 92 %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) 93 ret <5 x i1> %v 94} 95 96declare <8 x i1> @llvm.vp.icmp.v8i8(<8 x i8>, <8 x i8>, metadata, <8 x i1>, i32) 97 98define <8 x i1> @icmp_eq_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) { 99; CHECK-LABEL: icmp_eq_vv_v8i8: 100; CHECK: # %bb.0: 101; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 102; CHECK-NEXT: vmseq.vv v0, v8, v9, v0.t 103; CHECK-NEXT: ret 104 %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) 105 ret <8 x i1> %v 106} 107 108define <8 x i1> @icmp_eq_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 109; CHECK-LABEL: icmp_eq_vx_v8i8: 110; CHECK: # %bb.0: 111; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 112; CHECK-NEXT: vmseq.vx v0, v8, a0, v0.t 113; CHECK-NEXT: ret 114 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 115 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 116 %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) 117 ret <8 x i1> %v 118} 119 120define <8 x i1> @icmp_eq_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 121; CHECK-LABEL: icmp_eq_vx_swap_v8i8: 122; CHECK: # %bb.0: 123; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 124; CHECK-NEXT: vmseq.vx v0, v8, a0, v0.t 125; CHECK-NEXT: ret 126 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 127 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 128 %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) 129 ret <8 x i1> %v 130} 131 132define <8 x i1> @icmp_eq_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 133; CHECK-LABEL: icmp_eq_vi_v8i8: 134; CHECK: # %bb.0: 135; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 136; CHECK-NEXT: vmseq.vi v0, v8, 4, v0.t 137; CHECK-NEXT: ret 138 %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) 139 ret <8 x i1> %v 140} 141 142define <8 x i1> @icmp_eq_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 143; CHECK-LABEL: icmp_eq_vi_swap_v8i8: 144; CHECK: # %bb.0: 145; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 146; CHECK-NEXT: vmseq.vi v0, v8, 4, v0.t 147; CHECK-NEXT: ret 148 %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) 149 ret <8 x i1> %v 150} 151 152define <8 x i1> @icmp_ne_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) { 153; CHECK-LABEL: icmp_ne_vv_v8i8: 154; CHECK: # %bb.0: 155; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 156; CHECK-NEXT: vmsne.vv v0, v8, v9, v0.t 157; CHECK-NEXT: ret 158 %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) 159 ret <8 x i1> %v 160} 161 162define <8 x i1> @icmp_ne_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 163; CHECK-LABEL: icmp_ne_vx_v8i8: 164; CHECK: # %bb.0: 165; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 166; CHECK-NEXT: vmsne.vx v0, v8, a0, v0.t 167; CHECK-NEXT: ret 168 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 169 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 170 %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) 171 ret <8 x i1> %v 172} 173 174define <8 x i1> @icmp_ne_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 175; CHECK-LABEL: icmp_ne_vx_swap_v8i8: 176; CHECK: # %bb.0: 177; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 178; CHECK-NEXT: vmsne.vx v0, v8, a0, v0.t 179; CHECK-NEXT: ret 180 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 181 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 182 %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) 183 ret <8 x i1> %v 184} 185 186define <8 x i1> @icmp_ne_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 187; CHECK-LABEL: icmp_ne_vi_v8i8: 188; CHECK: # %bb.0: 189; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 190; CHECK-NEXT: vmsne.vi v0, v8, 4, v0.t 191; CHECK-NEXT: ret 192 %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) 193 ret <8 x i1> %v 194} 195 196define <8 x i1> @icmp_ne_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 197; CHECK-LABEL: icmp_ne_vi_swap_v8i8: 198; CHECK: # %bb.0: 199; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 200; CHECK-NEXT: vmsne.vi v0, v8, 4, v0.t 201; CHECK-NEXT: ret 202 %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) 203 ret <8 x i1> %v 204} 205 206define <8 x i1> @icmp_ugt_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) { 207; CHECK-LABEL: icmp_ugt_vv_v8i8: 208; CHECK: # %bb.0: 209; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 210; CHECK-NEXT: vmsltu.vv v0, v9, v8, v0.t 211; CHECK-NEXT: ret 212 %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) 213 ret <8 x i1> %v 214} 215 216define <8 x i1> @icmp_ugt_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 217; CHECK-LABEL: icmp_ugt_vx_v8i8: 218; CHECK: # %bb.0: 219; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 220; CHECK-NEXT: vmsgtu.vx v0, v8, a0, v0.t 221; CHECK-NEXT: ret 222 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 223 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 224 %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) 225 ret <8 x i1> %v 226} 227 228define <8 x i1> @icmp_ugt_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 229; CHECK-LABEL: icmp_ugt_vx_swap_v8i8: 230; CHECK: # %bb.0: 231; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 232; CHECK-NEXT: vmsltu.vx v0, v8, a0, v0.t 233; CHECK-NEXT: ret 234 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 235 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 236 %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) 237 ret <8 x i1> %v 238} 239 240define <8 x i1> @icmp_ugt_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 241; CHECK-LABEL: icmp_ugt_vi_v8i8: 242; CHECK: # %bb.0: 243; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 244; CHECK-NEXT: vmsgtu.vi v0, v8, 4, v0.t 245; CHECK-NEXT: ret 246 %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) 247 ret <8 x i1> %v 248} 249 250define <8 x i1> @icmp_ugt_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 251; CHECK-LABEL: icmp_ugt_vi_swap_v8i8: 252; CHECK: # %bb.0: 253; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 254; CHECK-NEXT: vmsleu.vi v0, v8, 3, v0.t 255; CHECK-NEXT: ret 256 %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) 257 ret <8 x i1> %v 258} 259 260define <8 x i1> @icmp_uge_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) { 261; CHECK-LABEL: icmp_uge_vv_v8i8: 262; CHECK: # %bb.0: 263; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 264; CHECK-NEXT: vmsleu.vv v0, v9, v8, v0.t 265; CHECK-NEXT: ret 266 %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) 267 ret <8 x i1> %v 268} 269 270define <8 x i1> @icmp_uge_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 271; CHECK-LABEL: icmp_uge_vx_v8i8: 272; CHECK: # %bb.0: 273; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 274; CHECK-NEXT: vmv.v.x v9, a0 275; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 276; CHECK-NEXT: vmsleu.vv v0, v9, v8, v0.t 277; CHECK-NEXT: ret 278 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 279 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 280 %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) 281 ret <8 x i1> %v 282} 283 284define <8 x i1> @icmp_uge_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 285; CHECK-LABEL: icmp_uge_vx_swap_v8i8: 286; CHECK: # %bb.0: 287; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 288; CHECK-NEXT: vmsleu.vx v0, v8, a0, v0.t 289; CHECK-NEXT: ret 290 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 291 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 292 %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) 293 ret <8 x i1> %v 294} 295 296define <8 x i1> @icmp_uge_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 297; CHECK-LABEL: icmp_uge_vi_v8i8: 298; CHECK: # %bb.0: 299; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 300; CHECK-NEXT: vmsgtu.vi v0, v8, 3, v0.t 301; CHECK-NEXT: ret 302 %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) 303 ret <8 x i1> %v 304} 305 306define <8 x i1> @icmp_uge_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 307; CHECK-LABEL: icmp_uge_vi_swap_v8i8: 308; CHECK: # %bb.0: 309; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 310; CHECK-NEXT: vmsleu.vi v0, v8, 4, v0.t 311; CHECK-NEXT: ret 312 %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) 313 ret <8 x i1> %v 314} 315 316define <8 x i1> @icmp_ult_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) { 317; CHECK-LABEL: icmp_ult_vv_v8i8: 318; CHECK: # %bb.0: 319; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 320; CHECK-NEXT: vmsltu.vv v0, v8, v9, v0.t 321; CHECK-NEXT: ret 322 %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) 323 ret <8 x i1> %v 324} 325 326define <8 x i1> @icmp_ult_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 327; CHECK-LABEL: icmp_ult_vx_v8i8: 328; CHECK: # %bb.0: 329; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 330; CHECK-NEXT: vmsltu.vx v0, v8, a0, v0.t 331; CHECK-NEXT: ret 332 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 333 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 334 %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) 335 ret <8 x i1> %v 336} 337 338define <8 x i1> @icmp_ult_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 339; CHECK-LABEL: icmp_ult_vx_swap_v8i8: 340; CHECK: # %bb.0: 341; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 342; CHECK-NEXT: vmsgtu.vx v0, v8, a0, v0.t 343; CHECK-NEXT: ret 344 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 345 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 346 %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) 347 ret <8 x i1> %v 348} 349 350define <8 x i1> @icmp_ult_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 351; CHECK-LABEL: icmp_ult_vi_v8i8: 352; CHECK: # %bb.0: 353; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 354; CHECK-NEXT: vmsleu.vi v0, v8, 3, v0.t 355; CHECK-NEXT: ret 356 %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) 357 ret <8 x i1> %v 358} 359 360define <8 x i1> @icmp_ult_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 361; CHECK-LABEL: icmp_ult_vi_swap_v8i8: 362; CHECK: # %bb.0: 363; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 364; CHECK-NEXT: vmsgtu.vi v0, v8, 4, v0.t 365; CHECK-NEXT: ret 366 %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) 367 ret <8 x i1> %v 368} 369 370define <8 x i1> @icmp_sgt_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) { 371; CHECK-LABEL: icmp_sgt_vv_v8i8: 372; CHECK: # %bb.0: 373; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 374; CHECK-NEXT: vmslt.vv v0, v9, v8, v0.t 375; CHECK-NEXT: ret 376 %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) 377 ret <8 x i1> %v 378} 379 380define <8 x i1> @icmp_sgt_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 381; CHECK-LABEL: icmp_sgt_vx_v8i8: 382; CHECK: # %bb.0: 383; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 384; CHECK-NEXT: vmsgt.vx v0, v8, a0, v0.t 385; CHECK-NEXT: ret 386 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 387 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 388 %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) 389 ret <8 x i1> %v 390} 391 392define <8 x i1> @icmp_sgt_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 393; CHECK-LABEL: icmp_sgt_vx_swap_v8i8: 394; CHECK: # %bb.0: 395; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 396; CHECK-NEXT: vmslt.vx v0, v8, a0, v0.t 397; CHECK-NEXT: ret 398 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 399 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 400 %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) 401 ret <8 x i1> %v 402} 403 404define <8 x i1> @icmp_sgt_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 405; CHECK-LABEL: icmp_sgt_vi_v8i8: 406; CHECK: # %bb.0: 407; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 408; CHECK-NEXT: vmsgt.vi v0, v8, 4, v0.t 409; CHECK-NEXT: ret 410 %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) 411 ret <8 x i1> %v 412} 413 414define <8 x i1> @icmp_sgt_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 415; CHECK-LABEL: icmp_sgt_vi_swap_v8i8: 416; CHECK: # %bb.0: 417; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 418; CHECK-NEXT: vmsle.vi v0, v8, 3, v0.t 419; CHECK-NEXT: ret 420 %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) 421 ret <8 x i1> %v 422} 423 424define <8 x i1> @icmp_sge_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) { 425; CHECK-LABEL: icmp_sge_vv_v8i8: 426; CHECK: # %bb.0: 427; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 428; CHECK-NEXT: vmsle.vv v0, v9, v8, v0.t 429; CHECK-NEXT: ret 430 %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) 431 ret <8 x i1> %v 432} 433 434define <8 x i1> @icmp_sge_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 435; CHECK-LABEL: icmp_sge_vx_v8i8: 436; CHECK: # %bb.0: 437; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 438; CHECK-NEXT: vmv.v.x v9, a0 439; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 440; CHECK-NEXT: vmsle.vv v0, v9, v8, v0.t 441; CHECK-NEXT: ret 442 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 443 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 444 %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) 445 ret <8 x i1> %v 446} 447 448define <8 x i1> @icmp_sge_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 449; CHECK-LABEL: icmp_sge_vx_swap_v8i8: 450; CHECK: # %bb.0: 451; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 452; CHECK-NEXT: vmsle.vx v0, v8, a0, v0.t 453; CHECK-NEXT: ret 454 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 455 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 456 %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) 457 ret <8 x i1> %v 458} 459 460define <8 x i1> @icmp_sge_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 461; CHECK-LABEL: icmp_sge_vi_v8i8: 462; CHECK: # %bb.0: 463; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 464; CHECK-NEXT: vmsgt.vi v0, v8, 3, v0.t 465; CHECK-NEXT: ret 466 %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) 467 ret <8 x i1> %v 468} 469 470define <8 x i1> @icmp_sge_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 471; CHECK-LABEL: icmp_sge_vi_swap_v8i8: 472; CHECK: # %bb.0: 473; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 474; CHECK-NEXT: vmsle.vi v0, v8, 4, v0.t 475; CHECK-NEXT: ret 476 %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) 477 ret <8 x i1> %v 478} 479 480define <8 x i1> @icmp_slt_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) { 481; CHECK-LABEL: icmp_slt_vv_v8i8: 482; CHECK: # %bb.0: 483; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 484; CHECK-NEXT: vmslt.vv v0, v8, v9, v0.t 485; CHECK-NEXT: ret 486 %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) 487 ret <8 x i1> %v 488} 489 490define <8 x i1> @icmp_slt_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 491; CHECK-LABEL: icmp_slt_vx_v8i8: 492; CHECK: # %bb.0: 493; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 494; CHECK-NEXT: vmslt.vx v0, v8, a0, v0.t 495; CHECK-NEXT: ret 496 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 497 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 498 %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) 499 ret <8 x i1> %v 500} 501 502define <8 x i1> @icmp_slt_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 503; CHECK-LABEL: icmp_slt_vx_swap_v8i8: 504; CHECK: # %bb.0: 505; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 506; CHECK-NEXT: vmsgt.vx v0, v8, a0, v0.t 507; CHECK-NEXT: ret 508 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 509 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 510 %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) 511 ret <8 x i1> %v 512} 513 514define <8 x i1> @icmp_slt_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 515; CHECK-LABEL: icmp_slt_vi_v8i8: 516; CHECK: # %bb.0: 517; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 518; CHECK-NEXT: vmsle.vi v0, v8, 3, v0.t 519; CHECK-NEXT: ret 520 %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) 521 ret <8 x i1> %v 522} 523 524define <8 x i1> @icmp_slt_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 525; CHECK-LABEL: icmp_slt_vi_swap_v8i8: 526; CHECK: # %bb.0: 527; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 528; CHECK-NEXT: vmsgt.vi v0, v8, 4, v0.t 529; CHECK-NEXT: ret 530 %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) 531 ret <8 x i1> %v 532} 533 534define <8 x i1> @icmp_sle_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) { 535; CHECK-LABEL: icmp_sle_vv_v8i8: 536; CHECK: # %bb.0: 537; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 538; CHECK-NEXT: vmsle.vv v0, v8, v9, v0.t 539; CHECK-NEXT: ret 540 %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) 541 ret <8 x i1> %v 542} 543 544define <8 x i1> @icmp_sle_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 545; CHECK-LABEL: icmp_sle_vx_v8i8: 546; CHECK: # %bb.0: 547; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 548; CHECK-NEXT: vmsle.vx v0, v8, a0, v0.t 549; CHECK-NEXT: ret 550 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 551 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 552 %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) 553 ret <8 x i1> %v 554} 555 556define <8 x i1> @icmp_sle_vx_swap_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 557; CHECK-LABEL: icmp_sle_vx_swap_v8i8: 558; CHECK: # %bb.0: 559; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 560; CHECK-NEXT: vmv.v.x v9, a0 561; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 562; CHECK-NEXT: vmsle.vv v0, v9, v8, v0.t 563; CHECK-NEXT: ret 564 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 565 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 566 %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) 567 ret <8 x i1> %v 568} 569 570define <8 x i1> @icmp_sle_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 571; CHECK-LABEL: icmp_sle_vi_v8i8: 572; CHECK: # %bb.0: 573; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 574; CHECK-NEXT: vmsle.vi v0, v8, 4, v0.t 575; CHECK-NEXT: ret 576 %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) 577 ret <8 x i1> %v 578} 579 580define <8 x i1> @icmp_sle_vi_swap_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 581; CHECK-LABEL: icmp_sle_vi_swap_v8i8: 582; CHECK: # %bb.0: 583; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 584; CHECK-NEXT: vmsgt.vi v0, v8, 3, v0.t 585; CHECK-NEXT: ret 586 %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) 587 ret <8 x i1> %v 588} 589 590declare <256 x i1> @llvm.vp.icmp.v256i8(<256 x i8>, <256 x i8>, metadata, <256 x i1>, i32) 591 592define <256 x i1> @icmp_eq_vv_v256i8(<256 x i8> %va, <256 x i8> %vb, <256 x i1> %m, i32 zeroext %evl) { 593; CHECK-LABEL: icmp_eq_vv_v256i8: 594; CHECK: # %bb.0: 595; CHECK-NEXT: addi sp, sp, -16 596; CHECK-NEXT: .cfi_def_cfa_offset 16 597; CHECK-NEXT: csrr a1, vlenb 598; CHECK-NEXT: slli a1, a1, 4 599; CHECK-NEXT: sub sp, sp, a1 600; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb 601; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma 602; CHECK-NEXT: vmv1r.v v7, v0 603; CHECK-NEXT: csrr a1, vlenb 604; CHECK-NEXT: slli a1, a1, 3 605; CHECK-NEXT: add a1, sp, a1 606; CHECK-NEXT: addi a1, a1, 16 607; CHECK-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill 608; CHECK-NEXT: li a1, 128 609; CHECK-NEXT: addi a4, a0, 128 610; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 611; CHECK-NEXT: vlm.v v0, (a2) 612; CHECK-NEXT: addi a2, a3, -128 613; CHECK-NEXT: vle8.v v8, (a4) 614; CHECK-NEXT: sltu a4, a3, a2 615; CHECK-NEXT: vle8.v v24, (a0) 616; CHECK-NEXT: addi a0, sp, 16 617; CHECK-NEXT: vs8r.v v24, (a0) # Unknown-size Folded Spill 618; CHECK-NEXT: addi a4, a4, -1 619; CHECK-NEXT: and a2, a4, a2 620; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma 621; CHECK-NEXT: vmseq.vv v6, v16, v8, v0.t 622; CHECK-NEXT: bltu a3, a1, .LBB51_2 623; CHECK-NEXT: # %bb.1: 624; CHECK-NEXT: li a3, 128 625; CHECK-NEXT: .LBB51_2: 626; CHECK-NEXT: vmv1r.v v0, v7 627; CHECK-NEXT: csrr a0, vlenb 628; CHECK-NEXT: slli a0, a0, 3 629; CHECK-NEXT: add a0, sp, a0 630; CHECK-NEXT: addi a0, a0, 16 631; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload 632; CHECK-NEXT: addi a0, sp, 16 633; CHECK-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload 634; CHECK-NEXT: vsetvli zero, a3, e8, m8, ta, ma 635; CHECK-NEXT: vmseq.vv v16, v8, v24, v0.t 636; CHECK-NEXT: vmv1r.v v0, v16 637; CHECK-NEXT: vmv1r.v v8, v6 638; CHECK-NEXT: csrr a0, vlenb 639; CHECK-NEXT: slli a0, a0, 4 640; CHECK-NEXT: add sp, sp, a0 641; CHECK-NEXT: .cfi_def_cfa sp, 16 642; CHECK-NEXT: addi sp, sp, 16 643; CHECK-NEXT: .cfi_def_cfa_offset 0 644; CHECK-NEXT: ret 645 %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) 646 ret <256 x i1> %v 647} 648 649define <256 x i1> @icmp_eq_vx_v256i8(<256 x i8> %va, i8 %b, <256 x i1> %m, i32 zeroext %evl) { 650; CHECK-LABEL: icmp_eq_vx_v256i8: 651; CHECK: # %bb.0: 652; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma 653; CHECK-NEXT: vmv1r.v v24, v0 654; CHECK-NEXT: li a3, 128 655; CHECK-NEXT: vsetvli zero, a3, e8, m8, ta, ma 656; CHECK-NEXT: vlm.v v0, (a1) 657; CHECK-NEXT: addi a1, a2, -128 658; CHECK-NEXT: sltu a4, a2, a1 659; CHECK-NEXT: addi a4, a4, -1 660; CHECK-NEXT: and a1, a4, a1 661; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 662; CHECK-NEXT: vmseq.vx v25, v16, a0, v0.t 663; CHECK-NEXT: bltu a2, a3, .LBB52_2 664; CHECK-NEXT: # %bb.1: 665; CHECK-NEXT: li a2, 128 666; CHECK-NEXT: .LBB52_2: 667; CHECK-NEXT: vmv1r.v v0, v24 668; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma 669; CHECK-NEXT: vmseq.vx v16, v8, a0, v0.t 670; CHECK-NEXT: vmv1r.v v0, v16 671; CHECK-NEXT: vmv1r.v v8, v25 672; CHECK-NEXT: ret 673 %elt.head = insertelement <256 x i8> poison, i8 %b, i32 0 674 %vb = shufflevector <256 x i8> %elt.head, <256 x i8> poison, <256 x i32> zeroinitializer 675 %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) 676 ret <256 x i1> %v 677} 678 679define <256 x i1> @icmp_eq_vx_swap_v256i8(<256 x i8> %va, i8 %b, <256 x i1> %m, i32 zeroext %evl) { 680; CHECK-LABEL: icmp_eq_vx_swap_v256i8: 681; CHECK: # %bb.0: 682; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma 683; CHECK-NEXT: vmv1r.v v24, v0 684; CHECK-NEXT: li a3, 128 685; CHECK-NEXT: vsetvli zero, a3, e8, m8, ta, ma 686; CHECK-NEXT: vlm.v v0, (a1) 687; CHECK-NEXT: addi a1, a2, -128 688; CHECK-NEXT: sltu a4, a2, a1 689; CHECK-NEXT: addi a4, a4, -1 690; CHECK-NEXT: and a1, a4, a1 691; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 692; CHECK-NEXT: vmseq.vx v25, v16, a0, v0.t 693; CHECK-NEXT: bltu a2, a3, .LBB53_2 694; CHECK-NEXT: # %bb.1: 695; CHECK-NEXT: li a2, 128 696; CHECK-NEXT: .LBB53_2: 697; CHECK-NEXT: vmv1r.v v0, v24 698; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma 699; CHECK-NEXT: vmseq.vx v16, v8, a0, v0.t 700; CHECK-NEXT: vmv1r.v v0, v16 701; CHECK-NEXT: vmv1r.v v8, v25 702; CHECK-NEXT: ret 703 %elt.head = insertelement <256 x i8> poison, i8 %b, i32 0 704 %vb = shufflevector <256 x i8> %elt.head, <256 x i8> poison, <256 x i32> zeroinitializer 705 %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) 706 ret <256 x i1> %v 707} 708 709declare <8 x i1> @llvm.vp.icmp.v8i32(<8 x i32>, <8 x i32>, metadata, <8 x i1>, i32) 710 711define <8 x i1> @icmp_eq_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) { 712; CHECK-LABEL: icmp_eq_vv_v8i32: 713; CHECK: # %bb.0: 714; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 715; CHECK-NEXT: vmseq.vv v12, v8, v10, v0.t 716; CHECK-NEXT: vmv1r.v v0, v12 717; CHECK-NEXT: ret 718 %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) 719 ret <8 x i1> %v 720} 721 722define <8 x i1> @icmp_eq_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 723; CHECK-LABEL: icmp_eq_vx_v8i32: 724; CHECK: # %bb.0: 725; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 726; CHECK-NEXT: vmseq.vx v10, v8, a0, v0.t 727; CHECK-NEXT: vmv1r.v v0, v10 728; CHECK-NEXT: ret 729 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 730 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 731 %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) 732 ret <8 x i1> %v 733} 734 735define <8 x i1> @icmp_eq_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 736; CHECK-LABEL: icmp_eq_vx_swap_v8i32: 737; CHECK: # %bb.0: 738; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 739; CHECK-NEXT: vmseq.vx v10, v8, a0, v0.t 740; CHECK-NEXT: vmv1r.v v0, v10 741; CHECK-NEXT: ret 742 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 743 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 744 %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) 745 ret <8 x i1> %v 746} 747 748define <8 x i1> @icmp_eq_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 749; CHECK-LABEL: icmp_eq_vi_v8i32: 750; CHECK: # %bb.0: 751; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 752; CHECK-NEXT: vmseq.vi v10, v8, 4, v0.t 753; CHECK-NEXT: vmv1r.v v0, v10 754; CHECK-NEXT: ret 755 %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) 756 ret <8 x i1> %v 757} 758 759define <8 x i1> @icmp_eq_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 760; CHECK-LABEL: icmp_eq_vi_swap_v8i32: 761; CHECK: # %bb.0: 762; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 763; CHECK-NEXT: vmseq.vi v10, v8, 4, v0.t 764; CHECK-NEXT: vmv1r.v v0, v10 765; CHECK-NEXT: ret 766 %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) 767 ret <8 x i1> %v 768} 769 770define <8 x i1> @icmp_ne_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) { 771; CHECK-LABEL: icmp_ne_vv_v8i32: 772; CHECK: # %bb.0: 773; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 774; CHECK-NEXT: vmsne.vv v12, v8, v10, v0.t 775; CHECK-NEXT: vmv1r.v v0, v12 776; CHECK-NEXT: ret 777 %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) 778 ret <8 x i1> %v 779} 780 781define <8 x i1> @icmp_ne_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 782; CHECK-LABEL: icmp_ne_vx_v8i32: 783; CHECK: # %bb.0: 784; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 785; CHECK-NEXT: vmsne.vx v10, v8, a0, v0.t 786; CHECK-NEXT: vmv1r.v v0, v10 787; CHECK-NEXT: ret 788 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 789 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 790 %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) 791 ret <8 x i1> %v 792} 793 794define <8 x i1> @icmp_ne_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 795; CHECK-LABEL: icmp_ne_vx_swap_v8i32: 796; CHECK: # %bb.0: 797; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 798; CHECK-NEXT: vmsne.vx v10, v8, a0, v0.t 799; CHECK-NEXT: vmv1r.v v0, v10 800; CHECK-NEXT: ret 801 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 802 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 803 %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) 804 ret <8 x i1> %v 805} 806 807define <8 x i1> @icmp_ne_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 808; CHECK-LABEL: icmp_ne_vi_v8i32: 809; CHECK: # %bb.0: 810; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 811; CHECK-NEXT: vmsne.vi v10, v8, 4, v0.t 812; CHECK-NEXT: vmv1r.v v0, v10 813; CHECK-NEXT: ret 814 %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) 815 ret <8 x i1> %v 816} 817 818define <8 x i1> @icmp_ne_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 819; CHECK-LABEL: icmp_ne_vi_swap_v8i32: 820; CHECK: # %bb.0: 821; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 822; CHECK-NEXT: vmsne.vi v10, v8, 4, v0.t 823; CHECK-NEXT: vmv1r.v v0, v10 824; CHECK-NEXT: ret 825 %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) 826 ret <8 x i1> %v 827} 828 829define <8 x i1> @icmp_ugt_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) { 830; CHECK-LABEL: icmp_ugt_vv_v8i32: 831; CHECK: # %bb.0: 832; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 833; CHECK-NEXT: vmsltu.vv v12, v10, v8, v0.t 834; CHECK-NEXT: vmv1r.v v0, v12 835; CHECK-NEXT: ret 836 %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) 837 ret <8 x i1> %v 838} 839 840define <8 x i1> @icmp_ugt_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 841; CHECK-LABEL: icmp_ugt_vx_v8i32: 842; CHECK: # %bb.0: 843; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 844; CHECK-NEXT: vmsgtu.vx v10, v8, a0, v0.t 845; CHECK-NEXT: vmv1r.v v0, v10 846; CHECK-NEXT: ret 847 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 848 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 849 %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) 850 ret <8 x i1> %v 851} 852 853define <8 x i1> @icmp_ugt_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 854; CHECK-LABEL: icmp_ugt_vx_swap_v8i32: 855; CHECK: # %bb.0: 856; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 857; CHECK-NEXT: vmsltu.vx v10, v8, a0, v0.t 858; CHECK-NEXT: vmv1r.v v0, v10 859; CHECK-NEXT: ret 860 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 861 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 862 %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) 863 ret <8 x i1> %v 864} 865 866define <8 x i1> @icmp_ugt_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 867; CHECK-LABEL: icmp_ugt_vi_v8i32: 868; CHECK: # %bb.0: 869; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 870; CHECK-NEXT: vmsgtu.vi v10, v8, 4, v0.t 871; CHECK-NEXT: vmv1r.v v0, v10 872; CHECK-NEXT: ret 873 %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) 874 ret <8 x i1> %v 875} 876 877define <8 x i1> @icmp_ugt_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 878; CHECK-LABEL: icmp_ugt_vi_swap_v8i32: 879; CHECK: # %bb.0: 880; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 881; CHECK-NEXT: vmsleu.vi v10, v8, 3, v0.t 882; CHECK-NEXT: vmv1r.v v0, v10 883; CHECK-NEXT: ret 884 %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) 885 ret <8 x i1> %v 886} 887 888define <8 x i1> @icmp_uge_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) { 889; CHECK-LABEL: icmp_uge_vv_v8i32: 890; CHECK: # %bb.0: 891; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 892; CHECK-NEXT: vmsleu.vv v12, v10, v8, v0.t 893; CHECK-NEXT: vmv1r.v v0, v12 894; CHECK-NEXT: ret 895 %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) 896 ret <8 x i1> %v 897} 898 899define <8 x i1> @icmp_uge_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 900; CHECK-LABEL: icmp_uge_vx_v8i32: 901; CHECK: # %bb.0: 902; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 903; CHECK-NEXT: vmv.v.x v12, a0 904; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 905; CHECK-NEXT: vmsleu.vv v10, v12, v8, v0.t 906; CHECK-NEXT: vmv1r.v v0, v10 907; CHECK-NEXT: ret 908 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 909 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 910 %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) 911 ret <8 x i1> %v 912} 913 914define <8 x i1> @icmp_uge_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 915; CHECK-LABEL: icmp_uge_vx_swap_v8i32: 916; CHECK: # %bb.0: 917; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 918; CHECK-NEXT: vmsleu.vx v10, v8, a0, v0.t 919; CHECK-NEXT: vmv1r.v v0, v10 920; CHECK-NEXT: ret 921 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 922 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 923 %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) 924 ret <8 x i1> %v 925} 926 927define <8 x i1> @icmp_uge_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 928; CHECK-LABEL: icmp_uge_vi_v8i32: 929; CHECK: # %bb.0: 930; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 931; CHECK-NEXT: vmsgtu.vi v10, v8, 3, v0.t 932; CHECK-NEXT: vmv1r.v v0, v10 933; CHECK-NEXT: ret 934 %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) 935 ret <8 x i1> %v 936} 937 938define <8 x i1> @icmp_uge_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 939; CHECK-LABEL: icmp_uge_vi_swap_v8i32: 940; CHECK: # %bb.0: 941; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 942; CHECK-NEXT: vmsleu.vi v10, v8, 4, v0.t 943; CHECK-NEXT: vmv1r.v v0, v10 944; CHECK-NEXT: ret 945 %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) 946 ret <8 x i1> %v 947} 948 949define <8 x i1> @icmp_ult_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) { 950; CHECK-LABEL: icmp_ult_vv_v8i32: 951; CHECK: # %bb.0: 952; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 953; CHECK-NEXT: vmsltu.vv v12, v8, v10, v0.t 954; CHECK-NEXT: vmv1r.v v0, v12 955; CHECK-NEXT: ret 956 %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) 957 ret <8 x i1> %v 958} 959 960define <8 x i1> @icmp_ult_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 961; CHECK-LABEL: icmp_ult_vx_v8i32: 962; CHECK: # %bb.0: 963; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 964; CHECK-NEXT: vmsltu.vx v10, v8, a0, v0.t 965; CHECK-NEXT: vmv1r.v v0, v10 966; CHECK-NEXT: ret 967 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 968 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 969 %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) 970 ret <8 x i1> %v 971} 972 973define <8 x i1> @icmp_ult_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 974; CHECK-LABEL: icmp_ult_vx_swap_v8i32: 975; CHECK: # %bb.0: 976; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 977; CHECK-NEXT: vmsgtu.vx v10, v8, a0, v0.t 978; CHECK-NEXT: vmv1r.v v0, v10 979; CHECK-NEXT: ret 980 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 981 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 982 %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) 983 ret <8 x i1> %v 984} 985 986define <8 x i1> @icmp_ult_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 987; CHECK-LABEL: icmp_ult_vi_v8i32: 988; CHECK: # %bb.0: 989; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 990; CHECK-NEXT: vmsleu.vi v10, v8, 3, v0.t 991; CHECK-NEXT: vmv1r.v v0, v10 992; CHECK-NEXT: ret 993 %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) 994 ret <8 x i1> %v 995} 996 997define <8 x i1> @icmp_ult_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 998; CHECK-LABEL: icmp_ult_vi_swap_v8i32: 999; CHECK: # %bb.0: 1000; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1001; CHECK-NEXT: vmsgtu.vi v10, v8, 4, v0.t 1002; CHECK-NEXT: vmv1r.v v0, v10 1003; CHECK-NEXT: ret 1004 %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) 1005 ret <8 x i1> %v 1006} 1007 1008define <8 x i1> @icmp_sgt_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) { 1009; CHECK-LABEL: icmp_sgt_vv_v8i32: 1010; CHECK: # %bb.0: 1011; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1012; CHECK-NEXT: vmslt.vv v12, v10, v8, v0.t 1013; CHECK-NEXT: vmv1r.v v0, v12 1014; CHECK-NEXT: ret 1015 %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) 1016 ret <8 x i1> %v 1017} 1018 1019define <8 x i1> @icmp_sgt_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 1020; CHECK-LABEL: icmp_sgt_vx_v8i32: 1021; CHECK: # %bb.0: 1022; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1023; CHECK-NEXT: vmsgt.vx v10, v8, a0, v0.t 1024; CHECK-NEXT: vmv1r.v v0, v10 1025; CHECK-NEXT: ret 1026 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 1027 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 1028 %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) 1029 ret <8 x i1> %v 1030} 1031 1032define <8 x i1> @icmp_sgt_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 1033; CHECK-LABEL: icmp_sgt_vx_swap_v8i32: 1034; CHECK: # %bb.0: 1035; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1036; CHECK-NEXT: vmslt.vx v10, v8, a0, v0.t 1037; CHECK-NEXT: vmv1r.v v0, v10 1038; CHECK-NEXT: ret 1039 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 1040 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 1041 %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) 1042 ret <8 x i1> %v 1043} 1044 1045define <8 x i1> @icmp_sgt_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 1046; CHECK-LABEL: icmp_sgt_vi_v8i32: 1047; CHECK: # %bb.0: 1048; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1049; CHECK-NEXT: vmsgt.vi v10, v8, 4, v0.t 1050; CHECK-NEXT: vmv1r.v v0, v10 1051; CHECK-NEXT: ret 1052 %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) 1053 ret <8 x i1> %v 1054} 1055 1056define <8 x i1> @icmp_sgt_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 1057; CHECK-LABEL: icmp_sgt_vi_swap_v8i32: 1058; CHECK: # %bb.0: 1059; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1060; CHECK-NEXT: vmsle.vi v10, v8, 3, v0.t 1061; CHECK-NEXT: vmv1r.v v0, v10 1062; CHECK-NEXT: ret 1063 %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) 1064 ret <8 x i1> %v 1065} 1066 1067define <8 x i1> @icmp_sge_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) { 1068; CHECK-LABEL: icmp_sge_vv_v8i32: 1069; CHECK: # %bb.0: 1070; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1071; CHECK-NEXT: vmsle.vv v12, v10, v8, v0.t 1072; CHECK-NEXT: vmv1r.v v0, v12 1073; CHECK-NEXT: ret 1074 %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) 1075 ret <8 x i1> %v 1076} 1077 1078define <8 x i1> @icmp_sge_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 1079; CHECK-LABEL: icmp_sge_vx_v8i32: 1080; CHECK: # %bb.0: 1081; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1082; CHECK-NEXT: vmv.v.x v12, a0 1083; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1084; CHECK-NEXT: vmsle.vv v10, v12, v8, v0.t 1085; CHECK-NEXT: vmv1r.v v0, v10 1086; CHECK-NEXT: ret 1087 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 1088 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 1089 %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) 1090 ret <8 x i1> %v 1091} 1092 1093define <8 x i1> @icmp_sge_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 1094; CHECK-LABEL: icmp_sge_vx_swap_v8i32: 1095; CHECK: # %bb.0: 1096; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1097; CHECK-NEXT: vmsle.vx v10, v8, a0, v0.t 1098; CHECK-NEXT: vmv1r.v v0, v10 1099; CHECK-NEXT: ret 1100 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 1101 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 1102 %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) 1103 ret <8 x i1> %v 1104} 1105 1106define <8 x i1> @icmp_sge_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 1107; CHECK-LABEL: icmp_sge_vi_v8i32: 1108; CHECK: # %bb.0: 1109; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1110; CHECK-NEXT: vmsgt.vi v10, v8, 3, v0.t 1111; CHECK-NEXT: vmv1r.v v0, v10 1112; CHECK-NEXT: ret 1113 %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) 1114 ret <8 x i1> %v 1115} 1116 1117define <8 x i1> @icmp_sge_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 1118; CHECK-LABEL: icmp_sge_vi_swap_v8i32: 1119; CHECK: # %bb.0: 1120; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1121; CHECK-NEXT: vmsle.vi v10, v8, 4, v0.t 1122; CHECK-NEXT: vmv1r.v v0, v10 1123; CHECK-NEXT: ret 1124 %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) 1125 ret <8 x i1> %v 1126} 1127 1128define <8 x i1> @icmp_slt_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) { 1129; CHECK-LABEL: icmp_slt_vv_v8i32: 1130; CHECK: # %bb.0: 1131; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1132; CHECK-NEXT: vmslt.vv v12, v8, v10, v0.t 1133; CHECK-NEXT: vmv1r.v v0, v12 1134; CHECK-NEXT: ret 1135 %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) 1136 ret <8 x i1> %v 1137} 1138 1139define <8 x i1> @icmp_slt_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 1140; CHECK-LABEL: icmp_slt_vx_v8i32: 1141; CHECK: # %bb.0: 1142; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1143; CHECK-NEXT: vmslt.vx v10, v8, a0, v0.t 1144; CHECK-NEXT: vmv1r.v v0, v10 1145; CHECK-NEXT: ret 1146 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 1147 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 1148 %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) 1149 ret <8 x i1> %v 1150} 1151 1152define <8 x i1> @icmp_slt_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 1153; CHECK-LABEL: icmp_slt_vx_swap_v8i32: 1154; CHECK: # %bb.0: 1155; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1156; CHECK-NEXT: vmsgt.vx v10, v8, a0, v0.t 1157; CHECK-NEXT: vmv1r.v v0, v10 1158; CHECK-NEXT: ret 1159 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 1160 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 1161 %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) 1162 ret <8 x i1> %v 1163} 1164 1165define <8 x i1> @icmp_slt_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 1166; CHECK-LABEL: icmp_slt_vi_v8i32: 1167; CHECK: # %bb.0: 1168; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1169; CHECK-NEXT: vmsle.vi v10, v8, 3, v0.t 1170; CHECK-NEXT: vmv1r.v v0, v10 1171; CHECK-NEXT: ret 1172 %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) 1173 ret <8 x i1> %v 1174} 1175 1176define <8 x i1> @icmp_slt_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 1177; CHECK-LABEL: icmp_slt_vi_swap_v8i32: 1178; CHECK: # %bb.0: 1179; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1180; CHECK-NEXT: vmsgt.vi v10, v8, 4, v0.t 1181; CHECK-NEXT: vmv1r.v v0, v10 1182; CHECK-NEXT: ret 1183 %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) 1184 ret <8 x i1> %v 1185} 1186 1187define <8 x i1> @icmp_sle_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) { 1188; CHECK-LABEL: icmp_sle_vv_v8i32: 1189; CHECK: # %bb.0: 1190; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1191; CHECK-NEXT: vmsle.vv v12, v8, v10, v0.t 1192; CHECK-NEXT: vmv1r.v v0, v12 1193; CHECK-NEXT: ret 1194 %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) 1195 ret <8 x i1> %v 1196} 1197 1198define <8 x i1> @icmp_sle_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 1199; CHECK-LABEL: icmp_sle_vx_v8i32: 1200; CHECK: # %bb.0: 1201; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1202; CHECK-NEXT: vmsle.vx v10, v8, a0, v0.t 1203; CHECK-NEXT: vmv1r.v v0, v10 1204; CHECK-NEXT: ret 1205 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 1206 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 1207 %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) 1208 ret <8 x i1> %v 1209} 1210 1211define <8 x i1> @icmp_sle_vx_swap_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 1212; CHECK-LABEL: icmp_sle_vx_swap_v8i32: 1213; CHECK: # %bb.0: 1214; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1215; CHECK-NEXT: vmv.v.x v12, a0 1216; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1217; CHECK-NEXT: vmsle.vv v10, v12, v8, v0.t 1218; CHECK-NEXT: vmv1r.v v0, v10 1219; CHECK-NEXT: ret 1220 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 1221 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 1222 %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) 1223 ret <8 x i1> %v 1224} 1225 1226define <8 x i1> @icmp_sle_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 1227; CHECK-LABEL: icmp_sle_vi_v8i32: 1228; CHECK: # %bb.0: 1229; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1230; CHECK-NEXT: vmsle.vi v10, v8, 4, v0.t 1231; CHECK-NEXT: vmv1r.v v0, v10 1232; CHECK-NEXT: ret 1233 %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) 1234 ret <8 x i1> %v 1235} 1236 1237define <8 x i1> @icmp_sle_vi_swap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 1238; CHECK-LABEL: icmp_sle_vi_swap_v8i32: 1239; CHECK: # %bb.0: 1240; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1241; CHECK-NEXT: vmsgt.vi v10, v8, 3, v0.t 1242; CHECK-NEXT: vmv1r.v v0, v10 1243; CHECK-NEXT: ret 1244 %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) 1245 ret <8 x i1> %v 1246} 1247 1248declare <64 x i1> @llvm.vp.icmp.v64i32(<64 x i32>, <64 x i32>, metadata, <64 x i1>, i32) 1249 1250define <64 x i1> @icmp_eq_vv_v64i32(<64 x i32> %va, <64 x i32> %vb, <64 x i1> %m, i32 zeroext %evl) { 1251; CHECK-LABEL: icmp_eq_vv_v64i32: 1252; CHECK: # %bb.0: 1253; CHECK-NEXT: addi sp, sp, -16 1254; CHECK-NEXT: .cfi_def_cfa_offset 16 1255; CHECK-NEXT: csrr a1, vlenb 1256; CHECK-NEXT: slli a1, a1, 4 1257; CHECK-NEXT: sub sp, sp, a1 1258; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb 1259; CHECK-NEXT: csrr a1, vlenb 1260; CHECK-NEXT: slli a1, a1, 3 1261; CHECK-NEXT: add a1, sp, a1 1262; CHECK-NEXT: addi a1, a1, 16 1263; CHECK-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill 1264; CHECK-NEXT: addi a1, a0, 128 1265; CHECK-NEXT: li a3, 32 1266; CHECK-NEXT: vsetvli zero, a3, e32, m8, ta, ma 1267; CHECK-NEXT: vle32.v v16, (a1) 1268; CHECK-NEXT: addi a1, sp, 16 1269; CHECK-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill 1270; CHECK-NEXT: vle32.v v16, (a0) 1271; CHECK-NEXT: mv a0, a2 1272; CHECK-NEXT: vsetivli zero, 4, e8, mf2, ta, ma 1273; CHECK-NEXT: vslidedown.vi v24, v0, 4 1274; CHECK-NEXT: bltu a2, a3, .LBB99_2 1275; CHECK-NEXT: # %bb.1: 1276; CHECK-NEXT: li a0, 32 1277; CHECK-NEXT: .LBB99_2: 1278; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1279; CHECK-NEXT: vmseq.vv v7, v8, v16, v0.t 1280; CHECK-NEXT: addi a0, a2, -32 1281; CHECK-NEXT: sltu a1, a2, a0 1282; CHECK-NEXT: addi a1, a1, -1 1283; CHECK-NEXT: and a0, a1, a0 1284; CHECK-NEXT: vmv1r.v v0, v24 1285; CHECK-NEXT: csrr a1, vlenb 1286; CHECK-NEXT: slli a1, a1, 3 1287; CHECK-NEXT: add a1, sp, a1 1288; CHECK-NEXT: addi a1, a1, 16 1289; CHECK-NEXT: vl8r.v v16, (a1) # Unknown-size Folded Reload 1290; CHECK-NEXT: addi a1, sp, 16 1291; CHECK-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload 1292; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1293; CHECK-NEXT: vmseq.vv v8, v16, v24, v0.t 1294; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 1295; CHECK-NEXT: vslideup.vi v7, v8, 4 1296; CHECK-NEXT: vmv1r.v v0, v7 1297; CHECK-NEXT: csrr a0, vlenb 1298; CHECK-NEXT: slli a0, a0, 4 1299; CHECK-NEXT: add sp, sp, a0 1300; CHECK-NEXT: .cfi_def_cfa sp, 16 1301; CHECK-NEXT: addi sp, sp, 16 1302; CHECK-NEXT: .cfi_def_cfa_offset 0 1303; CHECK-NEXT: ret 1304 %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) 1305 ret <64 x i1> %v 1306} 1307 1308define <64 x i1> @icmp_eq_vx_v64i32(<64 x i32> %va, i32 %b, <64 x i1> %m, i32 zeroext %evl) { 1309; CHECK-LABEL: icmp_eq_vx_v64i32: 1310; CHECK: # %bb.0: 1311; CHECK-NEXT: li a3, 32 1312; CHECK-NEXT: vsetivli zero, 4, e8, mf2, ta, ma 1313; CHECK-NEXT: vslidedown.vi v24, v0, 4 1314; CHECK-NEXT: mv a2, a1 1315; CHECK-NEXT: bltu a1, a3, .LBB100_2 1316; CHECK-NEXT: # %bb.1: 1317; CHECK-NEXT: li a2, 32 1318; CHECK-NEXT: .LBB100_2: 1319; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma 1320; CHECK-NEXT: vmseq.vx v25, v8, a0, v0.t 1321; CHECK-NEXT: addi a2, a1, -32 1322; CHECK-NEXT: sltu a1, a1, a2 1323; CHECK-NEXT: addi a1, a1, -1 1324; CHECK-NEXT: and a1, a1, a2 1325; CHECK-NEXT: vmv1r.v v0, v24 1326; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 1327; CHECK-NEXT: vmseq.vx v8, v16, a0, v0.t 1328; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 1329; CHECK-NEXT: vslideup.vi v25, v8, 4 1330; CHECK-NEXT: vmv1r.v v0, v25 1331; CHECK-NEXT: ret 1332 %elt.head = insertelement <64 x i32> poison, i32 %b, i32 0 1333 %vb = shufflevector <64 x i32> %elt.head, <64 x i32> poison, <64 x i32> zeroinitializer 1334 %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) 1335 ret <64 x i1> %v 1336} 1337 1338define <64 x i1> @icmp_eq_vx_swap_v64i32(<64 x i32> %va, i32 %b, <64 x i1> %m, i32 zeroext %evl) { 1339; CHECK-LABEL: icmp_eq_vx_swap_v64i32: 1340; CHECK: # %bb.0: 1341; CHECK-NEXT: li a3, 32 1342; CHECK-NEXT: vsetivli zero, 4, e8, mf2, ta, ma 1343; CHECK-NEXT: vslidedown.vi v24, v0, 4 1344; CHECK-NEXT: mv a2, a1 1345; CHECK-NEXT: bltu a1, a3, .LBB101_2 1346; CHECK-NEXT: # %bb.1: 1347; CHECK-NEXT: li a2, 32 1348; CHECK-NEXT: .LBB101_2: 1349; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma 1350; CHECK-NEXT: vmseq.vx v25, v8, a0, v0.t 1351; CHECK-NEXT: addi a2, a1, -32 1352; CHECK-NEXT: sltu a1, a1, a2 1353; CHECK-NEXT: addi a1, a1, -1 1354; CHECK-NEXT: and a1, a1, a2 1355; CHECK-NEXT: vmv1r.v v0, v24 1356; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 1357; CHECK-NEXT: vmseq.vx v8, v16, a0, v0.t 1358; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 1359; CHECK-NEXT: vslideup.vi v25, v8, 4 1360; CHECK-NEXT: vmv1r.v v0, v25 1361; CHECK-NEXT: ret 1362 %elt.head = insertelement <64 x i32> poison, i32 %b, i32 0 1363 %vb = shufflevector <64 x i32> %elt.head, <64 x i32> poison, <64 x i32> zeroinitializer 1364 %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) 1365 ret <64 x i1> %v 1366} 1367 1368declare <8 x i1> @llvm.vp.icmp.v8i64(<8 x i64>, <8 x i64>, metadata, <8 x i1>, i32) 1369 1370define <8 x i1> @icmp_eq_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) { 1371; CHECK-LABEL: icmp_eq_vv_v8i64: 1372; CHECK: # %bb.0: 1373; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1374; CHECK-NEXT: vmseq.vv v16, v8, v12, v0.t 1375; CHECK-NEXT: vmv1r.v v0, v16 1376; CHECK-NEXT: ret 1377 %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) 1378 ret <8 x i1> %v 1379} 1380 1381define <8 x i1> @icmp_eq_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1382; RV32-LABEL: icmp_eq_vx_v8i64: 1383; RV32: # %bb.0: 1384; RV32-NEXT: addi sp, sp, -16 1385; RV32-NEXT: .cfi_def_cfa_offset 16 1386; RV32-NEXT: sw a0, 8(sp) 1387; RV32-NEXT: sw a1, 12(sp) 1388; RV32-NEXT: addi a0, sp, 8 1389; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1390; RV32-NEXT: vlse64.v v16, (a0), zero 1391; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1392; RV32-NEXT: vmseq.vv v12, v8, v16, v0.t 1393; RV32-NEXT: vmv1r.v v0, v12 1394; RV32-NEXT: addi sp, sp, 16 1395; RV32-NEXT: .cfi_def_cfa_offset 0 1396; RV32-NEXT: ret 1397; 1398; RV64-LABEL: icmp_eq_vx_v8i64: 1399; RV64: # %bb.0: 1400; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1401; RV64-NEXT: vmseq.vx v12, v8, a0, v0.t 1402; RV64-NEXT: vmv1r.v v0, v12 1403; RV64-NEXT: ret 1404 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1405 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1406 %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) 1407 ret <8 x i1> %v 1408} 1409 1410define <8 x i1> @icmp_eq_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1411; RV32-LABEL: icmp_eq_vx_swap_v8i64: 1412; RV32: # %bb.0: 1413; RV32-NEXT: addi sp, sp, -16 1414; RV32-NEXT: .cfi_def_cfa_offset 16 1415; RV32-NEXT: sw a0, 8(sp) 1416; RV32-NEXT: sw a1, 12(sp) 1417; RV32-NEXT: addi a0, sp, 8 1418; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1419; RV32-NEXT: vlse64.v v16, (a0), zero 1420; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1421; RV32-NEXT: vmseq.vv v12, v16, v8, v0.t 1422; RV32-NEXT: vmv1r.v v0, v12 1423; RV32-NEXT: addi sp, sp, 16 1424; RV32-NEXT: .cfi_def_cfa_offset 0 1425; RV32-NEXT: ret 1426; 1427; RV64-LABEL: icmp_eq_vx_swap_v8i64: 1428; RV64: # %bb.0: 1429; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1430; RV64-NEXT: vmseq.vx v12, v8, a0, v0.t 1431; RV64-NEXT: vmv1r.v v0, v12 1432; RV64-NEXT: ret 1433 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1434 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1435 %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) 1436 ret <8 x i1> %v 1437} 1438 1439define <8 x i1> @icmp_eq_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1440; CHECK-LABEL: icmp_eq_vi_v8i64: 1441; CHECK: # %bb.0: 1442; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1443; CHECK-NEXT: vmseq.vi v12, v8, 4, v0.t 1444; CHECK-NEXT: vmv1r.v v0, v12 1445; CHECK-NEXT: ret 1446 %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) 1447 ret <8 x i1> %v 1448} 1449 1450define <8 x i1> @icmp_eq_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1451; CHECK-LABEL: icmp_eq_vi_swap_v8i64: 1452; CHECK: # %bb.0: 1453; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1454; CHECK-NEXT: vmseq.vi v12, v8, 4, v0.t 1455; CHECK-NEXT: vmv1r.v v0, v12 1456; CHECK-NEXT: ret 1457 %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) 1458 ret <8 x i1> %v 1459} 1460 1461define <8 x i1> @icmp_ne_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) { 1462; CHECK-LABEL: icmp_ne_vv_v8i64: 1463; CHECK: # %bb.0: 1464; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1465; CHECK-NEXT: vmsne.vv v16, v8, v12, v0.t 1466; CHECK-NEXT: vmv1r.v v0, v16 1467; CHECK-NEXT: ret 1468 %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) 1469 ret <8 x i1> %v 1470} 1471 1472define <8 x i1> @icmp_ne_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1473; RV32-LABEL: icmp_ne_vx_v8i64: 1474; RV32: # %bb.0: 1475; RV32-NEXT: addi sp, sp, -16 1476; RV32-NEXT: .cfi_def_cfa_offset 16 1477; RV32-NEXT: sw a0, 8(sp) 1478; RV32-NEXT: sw a1, 12(sp) 1479; RV32-NEXT: addi a0, sp, 8 1480; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1481; RV32-NEXT: vlse64.v v16, (a0), zero 1482; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1483; RV32-NEXT: vmsne.vv v12, v8, v16, v0.t 1484; RV32-NEXT: vmv1r.v v0, v12 1485; RV32-NEXT: addi sp, sp, 16 1486; RV32-NEXT: .cfi_def_cfa_offset 0 1487; RV32-NEXT: ret 1488; 1489; RV64-LABEL: icmp_ne_vx_v8i64: 1490; RV64: # %bb.0: 1491; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1492; RV64-NEXT: vmsne.vx v12, v8, a0, v0.t 1493; RV64-NEXT: vmv1r.v v0, v12 1494; RV64-NEXT: ret 1495 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1496 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1497 %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) 1498 ret <8 x i1> %v 1499} 1500 1501define <8 x i1> @icmp_ne_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1502; RV32-LABEL: icmp_ne_vx_swap_v8i64: 1503; RV32: # %bb.0: 1504; RV32-NEXT: addi sp, sp, -16 1505; RV32-NEXT: .cfi_def_cfa_offset 16 1506; RV32-NEXT: sw a0, 8(sp) 1507; RV32-NEXT: sw a1, 12(sp) 1508; RV32-NEXT: addi a0, sp, 8 1509; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1510; RV32-NEXT: vlse64.v v16, (a0), zero 1511; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1512; RV32-NEXT: vmsne.vv v12, v16, v8, v0.t 1513; RV32-NEXT: vmv1r.v v0, v12 1514; RV32-NEXT: addi sp, sp, 16 1515; RV32-NEXT: .cfi_def_cfa_offset 0 1516; RV32-NEXT: ret 1517; 1518; RV64-LABEL: icmp_ne_vx_swap_v8i64: 1519; RV64: # %bb.0: 1520; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1521; RV64-NEXT: vmsne.vx v12, v8, a0, v0.t 1522; RV64-NEXT: vmv1r.v v0, v12 1523; RV64-NEXT: ret 1524 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1525 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1526 %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) 1527 ret <8 x i1> %v 1528} 1529 1530define <8 x i1> @icmp_ne_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1531; CHECK-LABEL: icmp_ne_vi_v8i64: 1532; CHECK: # %bb.0: 1533; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1534; CHECK-NEXT: vmsne.vi v12, v8, 4, v0.t 1535; CHECK-NEXT: vmv1r.v v0, v12 1536; CHECK-NEXT: ret 1537 %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) 1538 ret <8 x i1> %v 1539} 1540 1541define <8 x i1> @icmp_ne_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1542; CHECK-LABEL: icmp_ne_vi_swap_v8i64: 1543; CHECK: # %bb.0: 1544; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1545; CHECK-NEXT: vmsne.vi v12, v8, 4, v0.t 1546; CHECK-NEXT: vmv1r.v v0, v12 1547; CHECK-NEXT: ret 1548 %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) 1549 ret <8 x i1> %v 1550} 1551 1552define <8 x i1> @icmp_ugt_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) { 1553; CHECK-LABEL: icmp_ugt_vv_v8i64: 1554; CHECK: # %bb.0: 1555; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1556; CHECK-NEXT: vmsltu.vv v16, v12, v8, v0.t 1557; CHECK-NEXT: vmv1r.v v0, v16 1558; CHECK-NEXT: ret 1559 %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) 1560 ret <8 x i1> %v 1561} 1562 1563define <8 x i1> @icmp_ugt_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1564; RV32-LABEL: icmp_ugt_vx_v8i64: 1565; RV32: # %bb.0: 1566; RV32-NEXT: addi sp, sp, -16 1567; RV32-NEXT: .cfi_def_cfa_offset 16 1568; RV32-NEXT: sw a0, 8(sp) 1569; RV32-NEXT: sw a1, 12(sp) 1570; RV32-NEXT: addi a0, sp, 8 1571; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1572; RV32-NEXT: vlse64.v v16, (a0), zero 1573; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1574; RV32-NEXT: vmsltu.vv v12, v16, v8, v0.t 1575; RV32-NEXT: vmv1r.v v0, v12 1576; RV32-NEXT: addi sp, sp, 16 1577; RV32-NEXT: .cfi_def_cfa_offset 0 1578; RV32-NEXT: ret 1579; 1580; RV64-LABEL: icmp_ugt_vx_v8i64: 1581; RV64: # %bb.0: 1582; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1583; RV64-NEXT: vmsgtu.vx v12, v8, a0, v0.t 1584; RV64-NEXT: vmv1r.v v0, v12 1585; RV64-NEXT: ret 1586 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1587 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1588 %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) 1589 ret <8 x i1> %v 1590} 1591 1592define <8 x i1> @icmp_ugt_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1593; RV32-LABEL: icmp_ugt_vx_swap_v8i64: 1594; RV32: # %bb.0: 1595; RV32-NEXT: addi sp, sp, -16 1596; RV32-NEXT: .cfi_def_cfa_offset 16 1597; RV32-NEXT: sw a0, 8(sp) 1598; RV32-NEXT: sw a1, 12(sp) 1599; RV32-NEXT: addi a0, sp, 8 1600; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1601; RV32-NEXT: vlse64.v v16, (a0), zero 1602; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1603; RV32-NEXT: vmsltu.vv v12, v8, v16, v0.t 1604; RV32-NEXT: vmv1r.v v0, v12 1605; RV32-NEXT: addi sp, sp, 16 1606; RV32-NEXT: .cfi_def_cfa_offset 0 1607; RV32-NEXT: ret 1608; 1609; RV64-LABEL: icmp_ugt_vx_swap_v8i64: 1610; RV64: # %bb.0: 1611; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1612; RV64-NEXT: vmsltu.vx v12, v8, a0, v0.t 1613; RV64-NEXT: vmv1r.v v0, v12 1614; RV64-NEXT: ret 1615 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1616 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1617 %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) 1618 ret <8 x i1> %v 1619} 1620 1621define <8 x i1> @icmp_ugt_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1622; CHECK-LABEL: icmp_ugt_vi_v8i64: 1623; CHECK: # %bb.0: 1624; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1625; CHECK-NEXT: vmsgtu.vi v12, v8, 4, v0.t 1626; CHECK-NEXT: vmv1r.v v0, v12 1627; CHECK-NEXT: ret 1628 %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) 1629 ret <8 x i1> %v 1630} 1631 1632define <8 x i1> @icmp_ugt_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1633; CHECK-LABEL: icmp_ugt_vi_swap_v8i64: 1634; CHECK: # %bb.0: 1635; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1636; CHECK-NEXT: vmsleu.vi v12, v8, 3, v0.t 1637; CHECK-NEXT: vmv1r.v v0, v12 1638; CHECK-NEXT: ret 1639 %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) 1640 ret <8 x i1> %v 1641} 1642 1643define <8 x i1> @icmp_uge_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) { 1644; CHECK-LABEL: icmp_uge_vv_v8i64: 1645; CHECK: # %bb.0: 1646; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1647; CHECK-NEXT: vmsleu.vv v16, v12, v8, v0.t 1648; CHECK-NEXT: vmv1r.v v0, v16 1649; CHECK-NEXT: ret 1650 %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) 1651 ret <8 x i1> %v 1652} 1653 1654define <8 x i1> @icmp_uge_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1655; RV32-LABEL: icmp_uge_vx_v8i64: 1656; RV32: # %bb.0: 1657; RV32-NEXT: addi sp, sp, -16 1658; RV32-NEXT: .cfi_def_cfa_offset 16 1659; RV32-NEXT: sw a0, 8(sp) 1660; RV32-NEXT: sw a1, 12(sp) 1661; RV32-NEXT: addi a0, sp, 8 1662; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1663; RV32-NEXT: vlse64.v v16, (a0), zero 1664; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1665; RV32-NEXT: vmsleu.vv v12, v16, v8, v0.t 1666; RV32-NEXT: vmv1r.v v0, v12 1667; RV32-NEXT: addi sp, sp, 16 1668; RV32-NEXT: .cfi_def_cfa_offset 0 1669; RV32-NEXT: ret 1670; 1671; RV64-LABEL: icmp_uge_vx_v8i64: 1672; RV64: # %bb.0: 1673; RV64-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1674; RV64-NEXT: vmv.v.x v16, a0 1675; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1676; RV64-NEXT: vmsleu.vv v12, v16, v8, v0.t 1677; RV64-NEXT: vmv1r.v v0, v12 1678; RV64-NEXT: ret 1679 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1680 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1681 %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) 1682 ret <8 x i1> %v 1683} 1684 1685define <8 x i1> @icmp_uge_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1686; RV32-LABEL: icmp_uge_vx_swap_v8i64: 1687; RV32: # %bb.0: 1688; RV32-NEXT: addi sp, sp, -16 1689; RV32-NEXT: .cfi_def_cfa_offset 16 1690; RV32-NEXT: sw a0, 8(sp) 1691; RV32-NEXT: sw a1, 12(sp) 1692; RV32-NEXT: addi a0, sp, 8 1693; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1694; RV32-NEXT: vlse64.v v16, (a0), zero 1695; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1696; RV32-NEXT: vmsleu.vv v12, v8, v16, v0.t 1697; RV32-NEXT: vmv1r.v v0, v12 1698; RV32-NEXT: addi sp, sp, 16 1699; RV32-NEXT: .cfi_def_cfa_offset 0 1700; RV32-NEXT: ret 1701; 1702; RV64-LABEL: icmp_uge_vx_swap_v8i64: 1703; RV64: # %bb.0: 1704; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1705; RV64-NEXT: vmsleu.vx v12, v8, a0, v0.t 1706; RV64-NEXT: vmv1r.v v0, v12 1707; RV64-NEXT: ret 1708 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1709 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1710 %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) 1711 ret <8 x i1> %v 1712} 1713 1714define <8 x i1> @icmp_uge_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1715; CHECK-LABEL: icmp_uge_vi_v8i64: 1716; CHECK: # %bb.0: 1717; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1718; CHECK-NEXT: vmsgtu.vi v12, v8, 3, v0.t 1719; CHECK-NEXT: vmv1r.v v0, v12 1720; CHECK-NEXT: ret 1721 %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) 1722 ret <8 x i1> %v 1723} 1724 1725define <8 x i1> @icmp_uge_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1726; CHECK-LABEL: icmp_uge_vi_swap_v8i64: 1727; CHECK: # %bb.0: 1728; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1729; CHECK-NEXT: vmsleu.vi v12, v8, 4, v0.t 1730; CHECK-NEXT: vmv1r.v v0, v12 1731; CHECK-NEXT: ret 1732 %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) 1733 ret <8 x i1> %v 1734} 1735 1736define <8 x i1> @icmp_ult_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) { 1737; CHECK-LABEL: icmp_ult_vv_v8i64: 1738; CHECK: # %bb.0: 1739; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1740; CHECK-NEXT: vmsltu.vv v16, v8, v12, v0.t 1741; CHECK-NEXT: vmv1r.v v0, v16 1742; CHECK-NEXT: ret 1743 %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) 1744 ret <8 x i1> %v 1745} 1746 1747define <8 x i1> @icmp_ult_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1748; RV32-LABEL: icmp_ult_vx_v8i64: 1749; RV32: # %bb.0: 1750; RV32-NEXT: addi sp, sp, -16 1751; RV32-NEXT: .cfi_def_cfa_offset 16 1752; RV32-NEXT: sw a0, 8(sp) 1753; RV32-NEXT: sw a1, 12(sp) 1754; RV32-NEXT: addi a0, sp, 8 1755; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1756; RV32-NEXT: vlse64.v v16, (a0), zero 1757; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1758; RV32-NEXT: vmsltu.vv v12, v8, v16, v0.t 1759; RV32-NEXT: vmv1r.v v0, v12 1760; RV32-NEXT: addi sp, sp, 16 1761; RV32-NEXT: .cfi_def_cfa_offset 0 1762; RV32-NEXT: ret 1763; 1764; RV64-LABEL: icmp_ult_vx_v8i64: 1765; RV64: # %bb.0: 1766; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1767; RV64-NEXT: vmsltu.vx v12, v8, a0, v0.t 1768; RV64-NEXT: vmv1r.v v0, v12 1769; RV64-NEXT: ret 1770 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1771 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1772 %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) 1773 ret <8 x i1> %v 1774} 1775 1776define <8 x i1> @icmp_ult_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1777; RV32-LABEL: icmp_ult_vx_swap_v8i64: 1778; RV32: # %bb.0: 1779; RV32-NEXT: addi sp, sp, -16 1780; RV32-NEXT: .cfi_def_cfa_offset 16 1781; RV32-NEXT: sw a0, 8(sp) 1782; RV32-NEXT: sw a1, 12(sp) 1783; RV32-NEXT: addi a0, sp, 8 1784; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1785; RV32-NEXT: vlse64.v v16, (a0), zero 1786; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1787; RV32-NEXT: vmsltu.vv v12, v16, v8, v0.t 1788; RV32-NEXT: vmv1r.v v0, v12 1789; RV32-NEXT: addi sp, sp, 16 1790; RV32-NEXT: .cfi_def_cfa_offset 0 1791; RV32-NEXT: ret 1792; 1793; RV64-LABEL: icmp_ult_vx_swap_v8i64: 1794; RV64: # %bb.0: 1795; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1796; RV64-NEXT: vmsgtu.vx v12, v8, a0, v0.t 1797; RV64-NEXT: vmv1r.v v0, v12 1798; RV64-NEXT: ret 1799 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1800 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1801 %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) 1802 ret <8 x i1> %v 1803} 1804 1805define <8 x i1> @icmp_ult_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1806; CHECK-LABEL: icmp_ult_vi_v8i64: 1807; CHECK: # %bb.0: 1808; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1809; CHECK-NEXT: vmsleu.vi v12, v8, 3, v0.t 1810; CHECK-NEXT: vmv1r.v v0, v12 1811; CHECK-NEXT: ret 1812 %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) 1813 ret <8 x i1> %v 1814} 1815 1816define <8 x i1> @icmp_ult_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1817; CHECK-LABEL: icmp_ult_vi_swap_v8i64: 1818; CHECK: # %bb.0: 1819; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1820; CHECK-NEXT: vmsgtu.vi v12, v8, 4, v0.t 1821; CHECK-NEXT: vmv1r.v v0, v12 1822; CHECK-NEXT: ret 1823 %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) 1824 ret <8 x i1> %v 1825} 1826 1827define <8 x i1> @icmp_sgt_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) { 1828; CHECK-LABEL: icmp_sgt_vv_v8i64: 1829; CHECK: # %bb.0: 1830; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1831; CHECK-NEXT: vmslt.vv v16, v12, v8, v0.t 1832; CHECK-NEXT: vmv1r.v v0, v16 1833; CHECK-NEXT: ret 1834 %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) 1835 ret <8 x i1> %v 1836} 1837 1838define <8 x i1> @icmp_sgt_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1839; RV32-LABEL: icmp_sgt_vx_v8i64: 1840; RV32: # %bb.0: 1841; RV32-NEXT: addi sp, sp, -16 1842; RV32-NEXT: .cfi_def_cfa_offset 16 1843; RV32-NEXT: sw a0, 8(sp) 1844; RV32-NEXT: sw a1, 12(sp) 1845; RV32-NEXT: addi a0, sp, 8 1846; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1847; RV32-NEXT: vlse64.v v16, (a0), zero 1848; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1849; RV32-NEXT: vmslt.vv v12, v16, v8, v0.t 1850; RV32-NEXT: vmv1r.v v0, v12 1851; RV32-NEXT: addi sp, sp, 16 1852; RV32-NEXT: .cfi_def_cfa_offset 0 1853; RV32-NEXT: ret 1854; 1855; RV64-LABEL: icmp_sgt_vx_v8i64: 1856; RV64: # %bb.0: 1857; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1858; RV64-NEXT: vmsgt.vx v12, v8, a0, v0.t 1859; RV64-NEXT: vmv1r.v v0, v12 1860; RV64-NEXT: ret 1861 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1862 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1863 %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) 1864 ret <8 x i1> %v 1865} 1866 1867define <8 x i1> @icmp_sgt_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1868; RV32-LABEL: icmp_sgt_vx_swap_v8i64: 1869; RV32: # %bb.0: 1870; RV32-NEXT: addi sp, sp, -16 1871; RV32-NEXT: .cfi_def_cfa_offset 16 1872; RV32-NEXT: sw a0, 8(sp) 1873; RV32-NEXT: sw a1, 12(sp) 1874; RV32-NEXT: addi a0, sp, 8 1875; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1876; RV32-NEXT: vlse64.v v16, (a0), zero 1877; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1878; RV32-NEXT: vmslt.vv v12, v8, v16, v0.t 1879; RV32-NEXT: vmv1r.v v0, v12 1880; RV32-NEXT: addi sp, sp, 16 1881; RV32-NEXT: .cfi_def_cfa_offset 0 1882; RV32-NEXT: ret 1883; 1884; RV64-LABEL: icmp_sgt_vx_swap_v8i64: 1885; RV64: # %bb.0: 1886; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1887; RV64-NEXT: vmslt.vx v12, v8, a0, v0.t 1888; RV64-NEXT: vmv1r.v v0, v12 1889; RV64-NEXT: ret 1890 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1891 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1892 %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) 1893 ret <8 x i1> %v 1894} 1895 1896define <8 x i1> @icmp_sgt_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1897; CHECK-LABEL: icmp_sgt_vi_v8i64: 1898; CHECK: # %bb.0: 1899; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1900; CHECK-NEXT: vmsgt.vi v12, v8, 4, v0.t 1901; CHECK-NEXT: vmv1r.v v0, v12 1902; CHECK-NEXT: ret 1903 %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) 1904 ret <8 x i1> %v 1905} 1906 1907define <8 x i1> @icmp_sgt_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1908; CHECK-LABEL: icmp_sgt_vi_swap_v8i64: 1909; CHECK: # %bb.0: 1910; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1911; CHECK-NEXT: vmsle.vi v12, v8, 3, v0.t 1912; CHECK-NEXT: vmv1r.v v0, v12 1913; CHECK-NEXT: ret 1914 %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) 1915 ret <8 x i1> %v 1916} 1917 1918define <8 x i1> @icmp_sge_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) { 1919; CHECK-LABEL: icmp_sge_vv_v8i64: 1920; CHECK: # %bb.0: 1921; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1922; CHECK-NEXT: vmsle.vv v16, v12, v8, v0.t 1923; CHECK-NEXT: vmv1r.v v0, v16 1924; CHECK-NEXT: ret 1925 %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) 1926 ret <8 x i1> %v 1927} 1928 1929define <8 x i1> @icmp_sge_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1930; RV32-LABEL: icmp_sge_vx_v8i64: 1931; RV32: # %bb.0: 1932; RV32-NEXT: addi sp, sp, -16 1933; RV32-NEXT: .cfi_def_cfa_offset 16 1934; RV32-NEXT: sw a0, 8(sp) 1935; RV32-NEXT: sw a1, 12(sp) 1936; RV32-NEXT: addi a0, sp, 8 1937; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1938; RV32-NEXT: vlse64.v v16, (a0), zero 1939; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1940; RV32-NEXT: vmsle.vv v12, v16, v8, v0.t 1941; RV32-NEXT: vmv1r.v v0, v12 1942; RV32-NEXT: addi sp, sp, 16 1943; RV32-NEXT: .cfi_def_cfa_offset 0 1944; RV32-NEXT: ret 1945; 1946; RV64-LABEL: icmp_sge_vx_v8i64: 1947; RV64: # %bb.0: 1948; RV64-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1949; RV64-NEXT: vmv.v.x v16, a0 1950; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1951; RV64-NEXT: vmsle.vv v12, v16, v8, v0.t 1952; RV64-NEXT: vmv1r.v v0, v12 1953; RV64-NEXT: ret 1954 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1955 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1956 %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) 1957 ret <8 x i1> %v 1958} 1959 1960define <8 x i1> @icmp_sge_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1961; RV32-LABEL: icmp_sge_vx_swap_v8i64: 1962; RV32: # %bb.0: 1963; RV32-NEXT: addi sp, sp, -16 1964; RV32-NEXT: .cfi_def_cfa_offset 16 1965; RV32-NEXT: sw a0, 8(sp) 1966; RV32-NEXT: sw a1, 12(sp) 1967; RV32-NEXT: addi a0, sp, 8 1968; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1969; RV32-NEXT: vlse64.v v16, (a0), zero 1970; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1971; RV32-NEXT: vmsle.vv v12, v8, v16, v0.t 1972; RV32-NEXT: vmv1r.v v0, v12 1973; RV32-NEXT: addi sp, sp, 16 1974; RV32-NEXT: .cfi_def_cfa_offset 0 1975; RV32-NEXT: ret 1976; 1977; RV64-LABEL: icmp_sge_vx_swap_v8i64: 1978; RV64: # %bb.0: 1979; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1980; RV64-NEXT: vmsle.vx v12, v8, a0, v0.t 1981; RV64-NEXT: vmv1r.v v0, v12 1982; RV64-NEXT: ret 1983 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1984 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1985 %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) 1986 ret <8 x i1> %v 1987} 1988 1989define <8 x i1> @icmp_sge_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1990; CHECK-LABEL: icmp_sge_vi_v8i64: 1991; CHECK: # %bb.0: 1992; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1993; CHECK-NEXT: vmsgt.vi v12, v8, 3, v0.t 1994; CHECK-NEXT: vmv1r.v v0, v12 1995; CHECK-NEXT: ret 1996 %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) 1997 ret <8 x i1> %v 1998} 1999 2000define <8 x i1> @icmp_sge_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 2001; CHECK-LABEL: icmp_sge_vi_swap_v8i64: 2002; CHECK: # %bb.0: 2003; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 2004; CHECK-NEXT: vmsle.vi v12, v8, 4, v0.t 2005; CHECK-NEXT: vmv1r.v v0, v12 2006; CHECK-NEXT: ret 2007 %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) 2008 ret <8 x i1> %v 2009} 2010 2011define <8 x i1> @icmp_slt_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) { 2012; CHECK-LABEL: icmp_slt_vv_v8i64: 2013; CHECK: # %bb.0: 2014; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 2015; CHECK-NEXT: vmslt.vv v16, v8, v12, v0.t 2016; CHECK-NEXT: vmv1r.v v0, v16 2017; CHECK-NEXT: ret 2018 %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) 2019 ret <8 x i1> %v 2020} 2021 2022define <8 x i1> @icmp_slt_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 2023; RV32-LABEL: icmp_slt_vx_v8i64: 2024; RV32: # %bb.0: 2025; RV32-NEXT: addi sp, sp, -16 2026; RV32-NEXT: .cfi_def_cfa_offset 16 2027; RV32-NEXT: sw a0, 8(sp) 2028; RV32-NEXT: sw a1, 12(sp) 2029; RV32-NEXT: addi a0, sp, 8 2030; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 2031; RV32-NEXT: vlse64.v v16, (a0), zero 2032; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 2033; RV32-NEXT: vmslt.vv v12, v8, v16, v0.t 2034; RV32-NEXT: vmv1r.v v0, v12 2035; RV32-NEXT: addi sp, sp, 16 2036; RV32-NEXT: .cfi_def_cfa_offset 0 2037; RV32-NEXT: ret 2038; 2039; RV64-LABEL: icmp_slt_vx_v8i64: 2040; RV64: # %bb.0: 2041; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 2042; RV64-NEXT: vmslt.vx v12, v8, a0, v0.t 2043; RV64-NEXT: vmv1r.v v0, v12 2044; RV64-NEXT: ret 2045 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 2046 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 2047 %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) 2048 ret <8 x i1> %v 2049} 2050 2051define <8 x i1> @icmp_slt_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 2052; RV32-LABEL: icmp_slt_vx_swap_v8i64: 2053; RV32: # %bb.0: 2054; RV32-NEXT: addi sp, sp, -16 2055; RV32-NEXT: .cfi_def_cfa_offset 16 2056; RV32-NEXT: sw a0, 8(sp) 2057; RV32-NEXT: sw a1, 12(sp) 2058; RV32-NEXT: addi a0, sp, 8 2059; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 2060; RV32-NEXT: vlse64.v v16, (a0), zero 2061; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 2062; RV32-NEXT: vmslt.vv v12, v16, v8, v0.t 2063; RV32-NEXT: vmv1r.v v0, v12 2064; RV32-NEXT: addi sp, sp, 16 2065; RV32-NEXT: .cfi_def_cfa_offset 0 2066; RV32-NEXT: ret 2067; 2068; RV64-LABEL: icmp_slt_vx_swap_v8i64: 2069; RV64: # %bb.0: 2070; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 2071; RV64-NEXT: vmsgt.vx v12, v8, a0, v0.t 2072; RV64-NEXT: vmv1r.v v0, v12 2073; RV64-NEXT: ret 2074 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 2075 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 2076 %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) 2077 ret <8 x i1> %v 2078} 2079 2080define <8 x i1> @icmp_slt_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 2081; CHECK-LABEL: icmp_slt_vi_v8i64: 2082; CHECK: # %bb.0: 2083; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 2084; CHECK-NEXT: vmsle.vi v12, v8, 3, v0.t 2085; CHECK-NEXT: vmv1r.v v0, v12 2086; CHECK-NEXT: ret 2087 %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) 2088 ret <8 x i1> %v 2089} 2090 2091define <8 x i1> @icmp_slt_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 2092; CHECK-LABEL: icmp_slt_vi_swap_v8i64: 2093; CHECK: # %bb.0: 2094; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 2095; CHECK-NEXT: vmsgt.vi v12, v8, 4, v0.t 2096; CHECK-NEXT: vmv1r.v v0, v12 2097; CHECK-NEXT: ret 2098 %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) 2099 ret <8 x i1> %v 2100} 2101 2102define <8 x i1> @icmp_sle_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) { 2103; CHECK-LABEL: icmp_sle_vv_v8i64: 2104; CHECK: # %bb.0: 2105; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 2106; CHECK-NEXT: vmsle.vv v16, v8, v12, v0.t 2107; CHECK-NEXT: vmv1r.v v0, v16 2108; CHECK-NEXT: ret 2109 %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) 2110 ret <8 x i1> %v 2111} 2112 2113define <8 x i1> @icmp_sle_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 2114; RV32-LABEL: icmp_sle_vx_v8i64: 2115; RV32: # %bb.0: 2116; RV32-NEXT: addi sp, sp, -16 2117; RV32-NEXT: .cfi_def_cfa_offset 16 2118; RV32-NEXT: sw a0, 8(sp) 2119; RV32-NEXT: sw a1, 12(sp) 2120; RV32-NEXT: addi a0, sp, 8 2121; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 2122; RV32-NEXT: vlse64.v v16, (a0), zero 2123; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 2124; RV32-NEXT: vmsle.vv v12, v8, v16, v0.t 2125; RV32-NEXT: vmv1r.v v0, v12 2126; RV32-NEXT: addi sp, sp, 16 2127; RV32-NEXT: .cfi_def_cfa_offset 0 2128; RV32-NEXT: ret 2129; 2130; RV64-LABEL: icmp_sle_vx_v8i64: 2131; RV64: # %bb.0: 2132; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 2133; RV64-NEXT: vmsle.vx v12, v8, a0, v0.t 2134; RV64-NEXT: vmv1r.v v0, v12 2135; RV64-NEXT: ret 2136 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 2137 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 2138 %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) 2139 ret <8 x i1> %v 2140} 2141 2142define <8 x i1> @icmp_sle_vx_swap_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 2143; RV32-LABEL: icmp_sle_vx_swap_v8i64: 2144; RV32: # %bb.0: 2145; RV32-NEXT: addi sp, sp, -16 2146; RV32-NEXT: .cfi_def_cfa_offset 16 2147; RV32-NEXT: sw a0, 8(sp) 2148; RV32-NEXT: sw a1, 12(sp) 2149; RV32-NEXT: addi a0, sp, 8 2150; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 2151; RV32-NEXT: vlse64.v v16, (a0), zero 2152; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 2153; RV32-NEXT: vmsle.vv v12, v16, v8, v0.t 2154; RV32-NEXT: vmv1r.v v0, v12 2155; RV32-NEXT: addi sp, sp, 16 2156; RV32-NEXT: .cfi_def_cfa_offset 0 2157; RV32-NEXT: ret 2158; 2159; RV64-LABEL: icmp_sle_vx_swap_v8i64: 2160; RV64: # %bb.0: 2161; RV64-NEXT: vsetivli zero, 8, e64, m4, ta, ma 2162; RV64-NEXT: vmv.v.x v16, a0 2163; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 2164; RV64-NEXT: vmsle.vv v12, v16, v8, v0.t 2165; RV64-NEXT: vmv1r.v v0, v12 2166; RV64-NEXT: ret 2167 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 2168 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 2169 %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) 2170 ret <8 x i1> %v 2171} 2172 2173define <8 x i1> @icmp_sle_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 2174; CHECK-LABEL: icmp_sle_vi_v8i64: 2175; CHECK: # %bb.0: 2176; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 2177; CHECK-NEXT: vmsle.vi v12, v8, 4, v0.t 2178; CHECK-NEXT: vmv1r.v v0, v12 2179; CHECK-NEXT: ret 2180 %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) 2181 ret <8 x i1> %v 2182} 2183 2184define <8 x i1> @icmp_sle_vi_swap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 2185; CHECK-LABEL: icmp_sle_vi_swap_v8i64: 2186; CHECK: # %bb.0: 2187; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 2188; CHECK-NEXT: vmsgt.vi v12, v8, 3, v0.t 2189; CHECK-NEXT: vmv1r.v v0, v12 2190; CHECK-NEXT: ret 2191 %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) 2192 ret <8 x i1> %v 2193} 2194