1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+m,+v \ 3; RUN: -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK,RV32 4; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+m,+v \ 5; RUN: -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK,RV64 6 7define <vscale x 8 x i1> @icmp_eq_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) { 8; CHECK-LABEL: icmp_eq_vv_nxv8i8: 9; CHECK: # %bb.0: 10; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 11; CHECK-NEXT: vmseq.vv v0, v8, v9 12; CHECK-NEXT: ret 13 %vc = icmp eq <vscale x 8 x i8> %va, %vb 14 ret <vscale x 8 x i1> %vc 15} 16 17define <vscale x 8 x i1> @icmp_eq_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 18; CHECK-LABEL: icmp_eq_vx_nxv8i8: 19; CHECK: # %bb.0: 20; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 21; CHECK-NEXT: vmseq.vx v0, v8, a0 22; CHECK-NEXT: ret 23 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 24 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 25 %vc = icmp eq <vscale x 8 x i8> %va, %splat 26 ret <vscale x 8 x i1> %vc 27} 28 29define <vscale x 8 x i1> @icmp_eq_xv_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 30; CHECK-LABEL: icmp_eq_xv_nxv8i8: 31; CHECK: # %bb.0: 32; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 33; CHECK-NEXT: vmseq.vx v0, v8, a0 34; CHECK-NEXT: ret 35 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 36 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 37 %vc = icmp eq <vscale x 8 x i8> %splat, %va 38 ret <vscale x 8 x i1> %vc 39} 40 41define <vscale x 8 x i1> @icmp_eq_vi_nxv8i8_0(<vscale x 8 x i8> %va) { 42; CHECK-LABEL: icmp_eq_vi_nxv8i8_0: 43; CHECK: # %bb.0: 44; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 45; CHECK-NEXT: vmseq.vi v0, v8, 0 46; CHECK-NEXT: ret 47 %head = insertelement <vscale x 8 x i8> poison, i8 0, i32 0 48 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 49 %vc = icmp eq <vscale x 8 x i8> %va, %splat 50 ret <vscale x 8 x i1> %vc 51} 52 53define <vscale x 8 x i1> @icmp_eq_vi_nxv8i8_1(<vscale x 8 x i8> %va) { 54; CHECK-LABEL: icmp_eq_vi_nxv8i8_1: 55; CHECK: # %bb.0: 56; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 57; CHECK-NEXT: vmseq.vi v0, v8, 5 58; CHECK-NEXT: ret 59 %head = insertelement <vscale x 8 x i8> poison, i8 5, i32 0 60 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 61 %vc = icmp eq <vscale x 8 x i8> %va, %splat 62 ret <vscale x 8 x i1> %vc 63} 64 65define <vscale x 8 x i1> @icmp_eq_iv_nxv8i8_1(<vscale x 8 x i8> %va) { 66; CHECK-LABEL: icmp_eq_iv_nxv8i8_1: 67; CHECK: # %bb.0: 68; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 69; CHECK-NEXT: vmseq.vi v0, v8, 5 70; CHECK-NEXT: ret 71 %head = insertelement <vscale x 8 x i8> poison, i8 5, i32 0 72 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 73 %vc = icmp eq <vscale x 8 x i8> %splat, %va 74 ret <vscale x 8 x i1> %vc 75} 76 77define <vscale x 8 x i1> @icmp_ne_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) { 78; CHECK-LABEL: icmp_ne_vv_nxv8i8: 79; CHECK: # %bb.0: 80; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 81; CHECK-NEXT: vmsne.vv v0, v8, v9 82; CHECK-NEXT: ret 83 %vc = icmp ne <vscale x 8 x i8> %va, %vb 84 ret <vscale x 8 x i1> %vc 85} 86 87define <vscale x 8 x i1> @icmp_ne_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 88; CHECK-LABEL: icmp_ne_vx_nxv8i8: 89; CHECK: # %bb.0: 90; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 91; CHECK-NEXT: vmsne.vx v0, v8, a0 92; CHECK-NEXT: ret 93 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 94 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 95 %vc = icmp ne <vscale x 8 x i8> %va, %splat 96 ret <vscale x 8 x i1> %vc 97} 98 99define <vscale x 8 x i1> @icmp_ne_xv_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 100; CHECK-LABEL: icmp_ne_xv_nxv8i8: 101; CHECK: # %bb.0: 102; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 103; CHECK-NEXT: vmsne.vx v0, v8, a0 104; CHECK-NEXT: ret 105 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 106 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 107 %vc = icmp ne <vscale x 8 x i8> %splat, %va 108 ret <vscale x 8 x i1> %vc 109} 110 111define <vscale x 8 x i1> @icmp_ne_vi_nxv8i8_0(<vscale x 8 x i8> %va) { 112; CHECK-LABEL: icmp_ne_vi_nxv8i8_0: 113; CHECK: # %bb.0: 114; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 115; CHECK-NEXT: vmsne.vi v0, v8, 5 116; CHECK-NEXT: ret 117 %head = insertelement <vscale x 8 x i8> poison, i8 5, i32 0 118 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 119 %vc = icmp ne <vscale x 8 x i8> %va, %splat 120 ret <vscale x 8 x i1> %vc 121} 122 123define <vscale x 8 x i1> @icmp_ugt_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) { 124; CHECK-LABEL: icmp_ugt_vv_nxv8i8: 125; CHECK: # %bb.0: 126; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 127; CHECK-NEXT: vmsltu.vv v0, v9, v8 128; CHECK-NEXT: ret 129 %vc = icmp ugt <vscale x 8 x i8> %va, %vb 130 ret <vscale x 8 x i1> %vc 131} 132 133define <vscale x 8 x i1> @icmp_ugt_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 134; CHECK-LABEL: icmp_ugt_vx_nxv8i8: 135; CHECK: # %bb.0: 136; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 137; CHECK-NEXT: vmsgtu.vx v0, v8, a0 138; CHECK-NEXT: ret 139 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 140 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 141 %vc = icmp ugt <vscale x 8 x i8> %va, %splat 142 ret <vscale x 8 x i1> %vc 143} 144 145define <vscale x 8 x i1> @icmp_ugt_xv_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 146; CHECK-LABEL: icmp_ugt_xv_nxv8i8: 147; CHECK: # %bb.0: 148; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 149; CHECK-NEXT: vmsltu.vx v0, v8, a0 150; CHECK-NEXT: ret 151 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 152 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 153 %vc = icmp ugt <vscale x 8 x i8> %splat, %va 154 ret <vscale x 8 x i1> %vc 155} 156 157define <vscale x 8 x i1> @icmp_ugt_vi_nxv8i8_0(<vscale x 8 x i8> %va) { 158; CHECK-LABEL: icmp_ugt_vi_nxv8i8_0: 159; CHECK: # %bb.0: 160; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 161; CHECK-NEXT: vmsgtu.vi v0, v8, 5 162; CHECK-NEXT: ret 163 %head = insertelement <vscale x 8 x i8> poison, i8 5, i32 0 164 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 165 %vc = icmp ugt <vscale x 8 x i8> %va, %splat 166 ret <vscale x 8 x i1> %vc 167} 168 169define <vscale x 8 x i1> @icmp_uge_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) { 170; CHECK-LABEL: icmp_uge_vv_nxv8i8: 171; CHECK: # %bb.0: 172; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 173; CHECK-NEXT: vmsleu.vv v0, v9, v8 174; CHECK-NEXT: ret 175 %vc = icmp uge <vscale x 8 x i8> %va, %vb 176 ret <vscale x 8 x i1> %vc 177} 178 179define <vscale x 8 x i1> @icmp_uge_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 180; CHECK-LABEL: icmp_uge_vx_nxv8i8: 181; CHECK: # %bb.0: 182; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 183; CHECK-NEXT: vmv.v.x v9, a0 184; CHECK-NEXT: vmsleu.vv v0, v9, v8 185; CHECK-NEXT: ret 186 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 187 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 188 %vc = icmp uge <vscale x 8 x i8> %va, %splat 189 ret <vscale x 8 x i1> %vc 190} 191 192define <vscale x 8 x i1> @icmp_uge_xv_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 193; CHECK-LABEL: icmp_uge_xv_nxv8i8: 194; CHECK: # %bb.0: 195; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 196; CHECK-NEXT: vmsleu.vx v0, v8, a0 197; CHECK-NEXT: ret 198 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 199 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 200 %vc = icmp uge <vscale x 8 x i8> %splat, %va 201 ret <vscale x 8 x i1> %vc 202} 203 204define <vscale x 8 x i1> @icmp_uge_vi_nxv8i8_0(<vscale x 8 x i8> %va) { 205; CHECK-LABEL: icmp_uge_vi_nxv8i8_0: 206; CHECK: # %bb.0: 207; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 208; CHECK-NEXT: vmv.v.i v9, -16 209; CHECK-NEXT: vmsleu.vv v0, v9, v8 210; CHECK-NEXT: ret 211 %head = insertelement <vscale x 8 x i8> poison, i8 -16, i32 0 212 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 213 %vc = icmp uge <vscale x 8 x i8> %va, %splat 214 ret <vscale x 8 x i1> %vc 215} 216 217define <vscale x 8 x i1> @icmp_uge_vi_nxv8i8_1(<vscale x 8 x i8> %va) { 218; CHECK-LABEL: icmp_uge_vi_nxv8i8_1: 219; CHECK: # %bb.0: 220; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 221; CHECK-NEXT: vmsgtu.vi v0, v8, 14 222; CHECK-NEXT: ret 223 %head = insertelement <vscale x 8 x i8> poison, i8 15, i32 0 224 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 225 %vc = icmp uge <vscale x 8 x i8> %va, %splat 226 ret <vscale x 8 x i1> %vc 227} 228 229define <vscale x 8 x i1> @icmp_uge_iv_nxv8i8_1(<vscale x 8 x i8> %va) { 230; CHECK-LABEL: icmp_uge_iv_nxv8i8_1: 231; CHECK: # %bb.0: 232; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 233; CHECK-NEXT: vmsleu.vi v0, v8, 15 234; CHECK-NEXT: ret 235 %head = insertelement <vscale x 8 x i8> poison, i8 15, i32 0 236 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 237 %vc = icmp uge <vscale x 8 x i8> %splat, %va 238 ret <vscale x 8 x i1> %vc 239} 240 241define <vscale x 8 x i1> @icmp_uge_vi_nxv8i8_2(<vscale x 8 x i8> %va) { 242; CHECK-LABEL: icmp_uge_vi_nxv8i8_2: 243; CHECK: # %bb.0: 244; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 245; CHECK-NEXT: vmset.m v0 246; CHECK-NEXT: ret 247 %head = insertelement <vscale x 8 x i8> poison, i8 0, i32 0 248 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 249 %vc = icmp uge <vscale x 8 x i8> %va, %splat 250 ret <vscale x 8 x i1> %vc 251} 252 253define <vscale x 8 x i1> @icmp_uge_vi_nxv8i8_3(<vscale x 8 x i8> %va) { 254; CHECK-LABEL: icmp_uge_vi_nxv8i8_3: 255; CHECK: # %bb.0: 256; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 257; CHECK-NEXT: vmsgtu.vi v0, v8, 0 258; CHECK-NEXT: ret 259 %head = insertelement <vscale x 8 x i8> poison, i8 1, i32 0 260 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 261 %vc = icmp uge <vscale x 8 x i8> %va, %splat 262 ret <vscale x 8 x i1> %vc 263} 264 265define <vscale x 8 x i1> @icmp_uge_vi_nxv8i8_4(<vscale x 8 x i8> %va) { 266; CHECK-LABEL: icmp_uge_vi_nxv8i8_4: 267; CHECK: # %bb.0: 268; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 269; CHECK-NEXT: vmsgtu.vi v0, v8, -16 270; CHECK-NEXT: ret 271 %head = insertelement <vscale x 8 x i8> poison, i8 -15, i32 0 272 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 273 %vc = icmp uge <vscale x 8 x i8> %va, %splat 274 ret <vscale x 8 x i1> %vc 275} 276 277define <vscale x 8 x i1> @icmp_uge_vi_nxv8i8_5(<vscale x 8 x i8> %va) { 278; CHECK-LABEL: icmp_uge_vi_nxv8i8_5: 279; CHECK: # %bb.0: 280; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 281; CHECK-NEXT: vmsgtu.vi v0, v8, 15 282; CHECK-NEXT: ret 283 %head = insertelement <vscale x 8 x i8> poison, i8 16, i32 0 284 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 285 %vc = icmp uge <vscale x 8 x i8> %va, %splat 286 ret <vscale x 8 x i1> %vc 287} 288 289; Test that we don't optimize uge x, 0 -> ugt x, -1 290define <vscale x 8 x i1> @icmp_uge_vi_nxv8i8_6(<vscale x 8 x i8> %va, iXLen %vl) { 291; CHECK-LABEL: icmp_uge_vi_nxv8i8_6: 292; CHECK: # %bb.0: 293; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu 294; CHECK-NEXT: vmv.v.i v9, 0 295; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 296; CHECK-NEXT: vmsleu.vv v0, v9, v8 297; CHECK-NEXT: ret 298 %splat = call <vscale x 8 x i8> @llvm.riscv.vmv.v.x.nxv8i8.iXLen(<vscale x 8 x i8> undef, i8 0, iXLen %vl) 299 %vc = icmp uge <vscale x 8 x i8> %va, %splat 300 ret <vscale x 8 x i1> %vc 301} 302 303define <vscale x 8 x i1> @icmp_ult_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) { 304; CHECK-LABEL: icmp_ult_vv_nxv8i8: 305; CHECK: # %bb.0: 306; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 307; CHECK-NEXT: vmsltu.vv v0, v8, v9 308; CHECK-NEXT: ret 309 %vc = icmp ult <vscale x 8 x i8> %va, %vb 310 ret <vscale x 8 x i1> %vc 311} 312 313define <vscale x 8 x i1> @icmp_ult_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 314; CHECK-LABEL: icmp_ult_vx_nxv8i8: 315; CHECK: # %bb.0: 316; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 317; CHECK-NEXT: vmsltu.vx v0, v8, a0 318; CHECK-NEXT: ret 319 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 320 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 321 %vc = icmp ult <vscale x 8 x i8> %va, %splat 322 ret <vscale x 8 x i1> %vc 323} 324 325define <vscale x 8 x i1> @icmp_ult_xv_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 326; CHECK-LABEL: icmp_ult_xv_nxv8i8: 327; CHECK: # %bb.0: 328; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 329; CHECK-NEXT: vmsgtu.vx v0, v8, a0 330; CHECK-NEXT: ret 331 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 332 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 333 %vc = icmp ult <vscale x 8 x i8> %splat, %va 334 ret <vscale x 8 x i1> %vc 335} 336 337define <vscale x 8 x i1> @icmp_ult_vi_nxv8i8_0(<vscale x 8 x i8> %va) { 338; CHECK-LABEL: icmp_ult_vi_nxv8i8_0: 339; CHECK: # %bb.0: 340; CHECK-NEXT: li a0, -16 341; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 342; CHECK-NEXT: vmsltu.vx v0, v8, a0 343; CHECK-NEXT: ret 344 %head = insertelement <vscale x 8 x i8> poison, i8 -16, i32 0 345 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 346 %vc = icmp ult <vscale x 8 x i8> %va, %splat 347 ret <vscale x 8 x i1> %vc 348} 349 350define <vscale x 8 x i1> @icmp_ult_vi_nxv8i8_1(<vscale x 8 x i8> %va) { 351; CHECK-LABEL: icmp_ult_vi_nxv8i8_1: 352; CHECK: # %bb.0: 353; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 354; CHECK-NEXT: vmsleu.vi v0, v8, -16 355; CHECK-NEXT: ret 356 %head = insertelement <vscale x 8 x i8> poison, i8 -15, i32 0 357 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 358 %vc = icmp ult <vscale x 8 x i8> %va, %splat 359 ret <vscale x 8 x i1> %vc 360} 361 362define <vscale x 8 x i1> @icmp_ult_iv_nxv8i8_1(<vscale x 8 x i8> %va) { 363; CHECK-LABEL: icmp_ult_iv_nxv8i8_1: 364; CHECK: # %bb.0: 365; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 366; CHECK-NEXT: vmsgtu.vi v0, v8, -15 367; CHECK-NEXT: ret 368 %head = insertelement <vscale x 8 x i8> poison, i8 -15, i32 0 369 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 370 %vc = icmp ult <vscale x 8 x i8> %splat, %va 371 ret <vscale x 8 x i1> %vc 372} 373 374define <vscale x 8 x i1> @icmp_ult_vi_nxv8i8_2(<vscale x 8 x i8> %va) { 375; CHECK-LABEL: icmp_ult_vi_nxv8i8_2: 376; CHECK: # %bb.0: 377; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 378; CHECK-NEXT: vmclr.m v0 379; CHECK-NEXT: ret 380 %head = insertelement <vscale x 8 x i8> poison, i8 0, i32 0 381 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 382 %vc = icmp ult <vscale x 8 x i8> %va, %splat 383 ret <vscale x 8 x i1> %vc 384} 385 386define <vscale x 8 x i1> @icmp_ult_vi_nxv8i8_3(<vscale x 8 x i8> %va) { 387; CHECK-LABEL: icmp_ult_vi_nxv8i8_3: 388; CHECK: # %bb.0: 389; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 390; CHECK-NEXT: vmseq.vi v0, v8, 0 391; CHECK-NEXT: ret 392 %head = insertelement <vscale x 8 x i8> poison, i8 1, i32 0 393 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 394 %vc = icmp ult <vscale x 8 x i8> %va, %splat 395 ret <vscale x 8 x i1> %vc 396} 397 398define <vscale x 8 x i1> @icmp_ult_vi_nxv8i8_4(<vscale x 8 x i8> %va) { 399; CHECK-LABEL: icmp_ult_vi_nxv8i8_4: 400; CHECK: # %bb.0: 401; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 402; CHECK-NEXT: vmsleu.vi v0, v8, 15 403; CHECK-NEXT: ret 404 %head = insertelement <vscale x 8 x i8> poison, i8 16, i32 0 405 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 406 %vc = icmp ult <vscale x 8 x i8> %va, %splat 407 ret <vscale x 8 x i1> %vc 408} 409 410declare <vscale x 8 x i8> @llvm.riscv.vmv.v.x.nxv8i8.iXLen(<vscale x 8 x i8>, i8, iXLen); 411 412; Test that we don't optimize ult x, 0 -> ule x, -1 413define <vscale x 8 x i1> @icmp_ult_vi_nxv8i8_5(<vscale x 8 x i8> %va, iXLen %vl) { 414; CHECK-LABEL: icmp_ult_vi_nxv8i8_5: 415; CHECK: # %bb.0: 416; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 417; CHECK-NEXT: vmsltu.vx v0, v8, zero 418; CHECK-NEXT: ret 419 %splat = call <vscale x 8 x i8> @llvm.riscv.vmv.v.x.nxv8i8.iXLen(<vscale x 8 x i8> undef, i8 0, iXLen %vl) 420 %vc = icmp ult <vscale x 8 x i8> %va, %splat 421 ret <vscale x 8 x i1> %vc 422} 423 424define <vscale x 8 x i1> @icmp_ule_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) { 425; CHECK-LABEL: icmp_ule_vv_nxv8i8: 426; CHECK: # %bb.0: 427; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 428; CHECK-NEXT: vmsleu.vv v0, v8, v9 429; CHECK-NEXT: ret 430 %vc = icmp ule <vscale x 8 x i8> %va, %vb 431 ret <vscale x 8 x i1> %vc 432} 433 434define <vscale x 8 x i1> @icmp_ule_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 435; CHECK-LABEL: icmp_ule_vx_nxv8i8: 436; CHECK: # %bb.0: 437; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 438; CHECK-NEXT: vmsleu.vx v0, v8, a0 439; CHECK-NEXT: ret 440 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 441 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 442 %vc = icmp ule <vscale x 8 x i8> %va, %splat 443 ret <vscale x 8 x i1> %vc 444} 445 446define <vscale x 8 x i1> @icmp_ule_xv_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 447; CHECK-LABEL: icmp_ule_xv_nxv8i8: 448; CHECK: # %bb.0: 449; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 450; CHECK-NEXT: vmv.v.x v9, a0 451; CHECK-NEXT: vmsleu.vv v0, v9, v8 452; CHECK-NEXT: ret 453 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 454 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 455 %vc = icmp ule <vscale x 8 x i8> %splat, %va 456 ret <vscale x 8 x i1> %vc 457} 458 459define <vscale x 8 x i1> @icmp_ule_vi_nxv8i8_0(<vscale x 8 x i8> %va) { 460; CHECK-LABEL: icmp_ule_vi_nxv8i8_0: 461; CHECK: # %bb.0: 462; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 463; CHECK-NEXT: vmsleu.vi v0, v8, 5 464; CHECK-NEXT: ret 465 %head = insertelement <vscale x 8 x i8> poison, i8 5, i32 0 466 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 467 %vc = icmp ule <vscale x 8 x i8> %va, %splat 468 ret <vscale x 8 x i1> %vc 469} 470 471define <vscale x 8 x i1> @icmp_sgt_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) { 472; CHECK-LABEL: icmp_sgt_vv_nxv8i8: 473; CHECK: # %bb.0: 474; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 475; CHECK-NEXT: vmslt.vv v0, v9, v8 476; CHECK-NEXT: ret 477 %vc = icmp sgt <vscale x 8 x i8> %va, %vb 478 ret <vscale x 8 x i1> %vc 479} 480 481define <vscale x 8 x i1> @icmp_sgt_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 482; CHECK-LABEL: icmp_sgt_vx_nxv8i8: 483; CHECK: # %bb.0: 484; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 485; CHECK-NEXT: vmsgt.vx v0, v8, a0 486; CHECK-NEXT: ret 487 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 488 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 489 %vc = icmp sgt <vscale x 8 x i8> %va, %splat 490 ret <vscale x 8 x i1> %vc 491} 492 493define <vscale x 8 x i1> @icmp_sgt_xv_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 494; CHECK-LABEL: icmp_sgt_xv_nxv8i8: 495; CHECK: # %bb.0: 496; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 497; CHECK-NEXT: vmslt.vx v0, v8, a0 498; CHECK-NEXT: ret 499 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 500 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 501 %vc = icmp sgt <vscale x 8 x i8> %splat, %va 502 ret <vscale x 8 x i1> %vc 503} 504 505define <vscale x 8 x i1> @icmp_sgt_vi_nxv8i8_0(<vscale x 8 x i8> %va) { 506; CHECK-LABEL: icmp_sgt_vi_nxv8i8_0: 507; CHECK: # %bb.0: 508; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 509; CHECK-NEXT: vmsgt.vi v0, v8, 5 510; CHECK-NEXT: ret 511 %head = insertelement <vscale x 8 x i8> poison, i8 5, i32 0 512 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 513 %vc = icmp sgt <vscale x 8 x i8> %va, %splat 514 ret <vscale x 8 x i1> %vc 515} 516 517define <vscale x 8 x i1> @icmp_sge_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) { 518; CHECK-LABEL: icmp_sge_vv_nxv8i8: 519; CHECK: # %bb.0: 520; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 521; CHECK-NEXT: vmsle.vv v0, v9, v8 522; CHECK-NEXT: ret 523 %vc = icmp sge <vscale x 8 x i8> %va, %vb 524 ret <vscale x 8 x i1> %vc 525} 526 527define <vscale x 8 x i1> @icmp_sge_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 528; CHECK-LABEL: icmp_sge_vx_nxv8i8: 529; CHECK: # %bb.0: 530; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 531; CHECK-NEXT: vmv.v.x v9, a0 532; CHECK-NEXT: vmsle.vv v0, v9, v8 533; CHECK-NEXT: ret 534 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 535 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 536 %vc = icmp sge <vscale x 8 x i8> %va, %splat 537 ret <vscale x 8 x i1> %vc 538} 539 540define <vscale x 8 x i1> @icmp_sge_xv_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 541; CHECK-LABEL: icmp_sge_xv_nxv8i8: 542; CHECK: # %bb.0: 543; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 544; CHECK-NEXT: vmsle.vx v0, v8, a0 545; CHECK-NEXT: ret 546 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 547 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 548 %vc = icmp sge <vscale x 8 x i8> %splat, %va 549 ret <vscale x 8 x i1> %vc 550} 551 552define <vscale x 8 x i1> @icmp_sge_vi_nxv8i8_0(<vscale x 8 x i8> %va) { 553; CHECK-LABEL: icmp_sge_vi_nxv8i8_0: 554; CHECK: # %bb.0: 555; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 556; CHECK-NEXT: vmv.v.i v9, -16 557; CHECK-NEXT: vmsle.vv v0, v9, v8 558; CHECK-NEXT: ret 559 %head = insertelement <vscale x 8 x i8> poison, i8 -16, i32 0 560 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 561 %vc = icmp sge <vscale x 8 x i8> %va, %splat 562 ret <vscale x 8 x i1> %vc 563} 564 565define <vscale x 8 x i1> @icmp_sge_vi_nxv8i8_1(<vscale x 8 x i8> %va) { 566; CHECK-LABEL: icmp_sge_vi_nxv8i8_1: 567; CHECK: # %bb.0: 568; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 569; CHECK-NEXT: vmsgt.vi v0, v8, -16 570; CHECK-NEXT: ret 571 %head = insertelement <vscale x 8 x i8> poison, i8 -15, i32 0 572 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 573 %vc = icmp sge <vscale x 8 x i8> %va, %splat 574 ret <vscale x 8 x i1> %vc 575} 576 577define <vscale x 8 x i1> @icmp_sge_iv_nxv8i8_1(<vscale x 8 x i8> %va) { 578; CHECK-LABEL: icmp_sge_iv_nxv8i8_1: 579; CHECK: # %bb.0: 580; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 581; CHECK-NEXT: vmsle.vi v0, v8, -15 582; CHECK-NEXT: ret 583 %head = insertelement <vscale x 8 x i8> poison, i8 -15, i32 0 584 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 585 %vc = icmp sge <vscale x 8 x i8> %splat, %va 586 ret <vscale x 8 x i1> %vc 587} 588 589define <vscale x 8 x i1> @icmp_sge_vi_nxv8i8_2(<vscale x 8 x i8> %va) { 590; CHECK-LABEL: icmp_sge_vi_nxv8i8_2: 591; CHECK: # %bb.0: 592; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 593; CHECK-NEXT: vmsgt.vi v0, v8, -1 594; CHECK-NEXT: ret 595 %head = insertelement <vscale x 8 x i8> poison, i8 0, i32 0 596 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 597 %vc = icmp sge <vscale x 8 x i8> %va, %splat 598 ret <vscale x 8 x i1> %vc 599} 600 601define <vscale x 8 x i1> @icmp_sge_vi_nxv8i8_3(<vscale x 8 x i8> %va) { 602; CHECK-LABEL: icmp_sge_vi_nxv8i8_3: 603; CHECK: # %bb.0: 604; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 605; CHECK-NEXT: vmsgt.vi v0, v8, 15 606; CHECK-NEXT: ret 607 %head = insertelement <vscale x 8 x i8> poison, i8 16, i32 0 608 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 609 %vc = icmp sge <vscale x 8 x i8> %va, %splat 610 ret <vscale x 8 x i1> %vc 611} 612 613define <vscale x 8 x i1> @icmp_slt_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) { 614; CHECK-LABEL: icmp_slt_vv_nxv8i8: 615; CHECK: # %bb.0: 616; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 617; CHECK-NEXT: vmslt.vv v0, v8, v9 618; CHECK-NEXT: ret 619 %vc = icmp slt <vscale x 8 x i8> %va, %vb 620 ret <vscale x 8 x i1> %vc 621} 622 623define <vscale x 8 x i1> @icmp_slt_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 624; CHECK-LABEL: icmp_slt_vx_nxv8i8: 625; CHECK: # %bb.0: 626; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 627; CHECK-NEXT: vmslt.vx v0, v8, a0 628; CHECK-NEXT: ret 629 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 630 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 631 %vc = icmp slt <vscale x 8 x i8> %va, %splat 632 ret <vscale x 8 x i1> %vc 633} 634 635define <vscale x 8 x i1> @icmp_slt_xv_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 636; CHECK-LABEL: icmp_slt_xv_nxv8i8: 637; CHECK: # %bb.0: 638; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 639; CHECK-NEXT: vmsgt.vx v0, v8, a0 640; CHECK-NEXT: ret 641 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 642 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 643 %vc = icmp slt <vscale x 8 x i8> %splat, %va 644 ret <vscale x 8 x i1> %vc 645} 646 647define <vscale x 8 x i1> @icmp_slt_vi_nxv8i8_0(<vscale x 8 x i8> %va) { 648; CHECK-LABEL: icmp_slt_vi_nxv8i8_0: 649; CHECK: # %bb.0: 650; CHECK-NEXT: li a0, -16 651; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 652; CHECK-NEXT: vmslt.vx v0, v8, a0 653; CHECK-NEXT: ret 654 %head = insertelement <vscale x 8 x i8> poison, i8 -16, i32 0 655 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 656 %vc = icmp slt <vscale x 8 x i8> %va, %splat 657 ret <vscale x 8 x i1> %vc 658} 659 660define <vscale x 8 x i1> @icmp_slt_vi_nxv8i8_1(<vscale x 8 x i8> %va) { 661; CHECK-LABEL: icmp_slt_vi_nxv8i8_1: 662; CHECK: # %bb.0: 663; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 664; CHECK-NEXT: vmsle.vi v0, v8, -16 665; CHECK-NEXT: ret 666 %head = insertelement <vscale x 8 x i8> poison, i8 -15, i32 0 667 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 668 %vc = icmp slt <vscale x 8 x i8> %va, %splat 669 ret <vscale x 8 x i1> %vc 670} 671 672define <vscale x 8 x i1> @icmp_slt_iv_nxv8i8_1(<vscale x 8 x i8> %va) { 673; CHECK-LABEL: icmp_slt_iv_nxv8i8_1: 674; CHECK: # %bb.0: 675; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 676; CHECK-NEXT: vmsgt.vi v0, v8, -15 677; CHECK-NEXT: ret 678 %head = insertelement <vscale x 8 x i8> poison, i8 -15, i32 0 679 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 680 %vc = icmp slt <vscale x 8 x i8> %splat, %va 681 ret <vscale x 8 x i1> %vc 682} 683 684define <vscale x 8 x i1> @icmp_slt_vi_nxv8i8_2(<vscale x 8 x i8> %va) { 685; CHECK-LABEL: icmp_slt_vi_nxv8i8_2: 686; CHECK: # %bb.0: 687; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 688; CHECK-NEXT: vmslt.vx v0, v8, zero 689; CHECK-NEXT: ret 690 %head = insertelement <vscale x 8 x i8> poison, i8 0, i32 0 691 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 692 %vc = icmp slt <vscale x 8 x i8> %va, %splat 693 ret <vscale x 8 x i1> %vc 694} 695 696define <vscale x 8 x i1> @icmp_slt_vi_nxv8i8_3(<vscale x 8 x i8> %va) { 697; CHECK-LABEL: icmp_slt_vi_nxv8i8_3: 698; CHECK: # %bb.0: 699; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 700; CHECK-NEXT: vmsle.vi v0, v8, 15 701; CHECK-NEXT: ret 702 %head = insertelement <vscale x 8 x i8> poison, i8 16, i32 0 703 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 704 %vc = icmp slt <vscale x 8 x i8> %va, %splat 705 ret <vscale x 8 x i1> %vc 706} 707 708define <vscale x 8 x i1> @icmp_sle_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) { 709; CHECK-LABEL: icmp_sle_vv_nxv8i8: 710; CHECK: # %bb.0: 711; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 712; CHECK-NEXT: vmsle.vv v0, v8, v9 713; CHECK-NEXT: ret 714 %vc = icmp sle <vscale x 8 x i8> %va, %vb 715 ret <vscale x 8 x i1> %vc 716} 717 718define <vscale x 8 x i1> @icmp_sle_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 719; CHECK-LABEL: icmp_sle_vx_nxv8i8: 720; CHECK: # %bb.0: 721; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 722; CHECK-NEXT: vmsle.vx v0, v8, a0 723; CHECK-NEXT: ret 724 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 725 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 726 %vc = icmp sle <vscale x 8 x i8> %va, %splat 727 ret <vscale x 8 x i1> %vc 728} 729 730define <vscale x 8 x i1> @icmp_sle_xv_nxv8i8(<vscale x 8 x i8> %va, i8 %b) { 731; CHECK-LABEL: icmp_sle_xv_nxv8i8: 732; CHECK: # %bb.0: 733; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 734; CHECK-NEXT: vmv.v.x v9, a0 735; CHECK-NEXT: vmsle.vv v0, v9, v8 736; CHECK-NEXT: ret 737 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 738 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 739 %vc = icmp sle <vscale x 8 x i8> %splat, %va 740 ret <vscale x 8 x i1> %vc 741} 742 743define <vscale x 8 x i1> @icmp_sle_vi_nxv8i8_0(<vscale x 8 x i8> %va) { 744; CHECK-LABEL: icmp_sle_vi_nxv8i8_0: 745; CHECK: # %bb.0: 746; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 747; CHECK-NEXT: vmsle.vi v0, v8, 5 748; CHECK-NEXT: ret 749 %head = insertelement <vscale x 8 x i8> poison, i8 5, i32 0 750 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 751 %vc = icmp sle <vscale x 8 x i8> %va, %splat 752 ret <vscale x 8 x i1> %vc 753} 754 755define <vscale x 8 x i1> @icmp_eq_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) { 756; CHECK-LABEL: icmp_eq_vv_nxv8i16: 757; CHECK: # %bb.0: 758; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 759; CHECK-NEXT: vmseq.vv v0, v8, v10 760; CHECK-NEXT: ret 761 %vc = icmp eq <vscale x 8 x i16> %va, %vb 762 ret <vscale x 8 x i1> %vc 763} 764 765define <vscale x 8 x i1> @icmp_eq_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 766; CHECK-LABEL: icmp_eq_vx_nxv8i16: 767; CHECK: # %bb.0: 768; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 769; CHECK-NEXT: vmseq.vx v0, v8, a0 770; CHECK-NEXT: ret 771 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 772 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 773 %vc = icmp eq <vscale x 8 x i16> %va, %splat 774 ret <vscale x 8 x i1> %vc 775} 776 777define <vscale x 8 x i1> @icmp_eq_xv_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 778; CHECK-LABEL: icmp_eq_xv_nxv8i16: 779; CHECK: # %bb.0: 780; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 781; CHECK-NEXT: vmseq.vx v0, v8, a0 782; CHECK-NEXT: ret 783 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 784 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 785 %vc = icmp eq <vscale x 8 x i16> %splat, %va 786 ret <vscale x 8 x i1> %vc 787} 788 789define <vscale x 8 x i1> @icmp_eq_vi_nxv8i16_0(<vscale x 8 x i16> %va) { 790; CHECK-LABEL: icmp_eq_vi_nxv8i16_0: 791; CHECK: # %bb.0: 792; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 793; CHECK-NEXT: vmseq.vi v0, v8, 0 794; CHECK-NEXT: ret 795 %head = insertelement <vscale x 8 x i16> poison, i16 0, i32 0 796 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 797 %vc = icmp eq <vscale x 8 x i16> %va, %splat 798 ret <vscale x 8 x i1> %vc 799} 800 801define <vscale x 8 x i1> @icmp_eq_vi_nxv8i16_1(<vscale x 8 x i16> %va) { 802; CHECK-LABEL: icmp_eq_vi_nxv8i16_1: 803; CHECK: # %bb.0: 804; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 805; CHECK-NEXT: vmseq.vi v0, v8, 5 806; CHECK-NEXT: ret 807 %head = insertelement <vscale x 8 x i16> poison, i16 5, i32 0 808 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 809 %vc = icmp eq <vscale x 8 x i16> %va, %splat 810 ret <vscale x 8 x i1> %vc 811} 812 813define <vscale x 8 x i1> @icmp_eq_iv_nxv8i16_1(<vscale x 8 x i16> %va) { 814; CHECK-LABEL: icmp_eq_iv_nxv8i16_1: 815; CHECK: # %bb.0: 816; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 817; CHECK-NEXT: vmseq.vi v0, v8, 5 818; CHECK-NEXT: ret 819 %head = insertelement <vscale x 8 x i16> poison, i16 5, i32 0 820 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 821 %vc = icmp eq <vscale x 8 x i16> %splat, %va 822 ret <vscale x 8 x i1> %vc 823} 824 825define <vscale x 8 x i1> @icmp_ne_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) { 826; CHECK-LABEL: icmp_ne_vv_nxv8i16: 827; CHECK: # %bb.0: 828; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 829; CHECK-NEXT: vmsne.vv v0, v8, v10 830; CHECK-NEXT: ret 831 %vc = icmp ne <vscale x 8 x i16> %va, %vb 832 ret <vscale x 8 x i1> %vc 833} 834 835define <vscale x 8 x i1> @icmp_ne_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 836; CHECK-LABEL: icmp_ne_vx_nxv8i16: 837; CHECK: # %bb.0: 838; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 839; CHECK-NEXT: vmsne.vx v0, v8, a0 840; CHECK-NEXT: ret 841 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 842 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 843 %vc = icmp ne <vscale x 8 x i16> %va, %splat 844 ret <vscale x 8 x i1> %vc 845} 846 847define <vscale x 8 x i1> @icmp_ne_xv_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 848; CHECK-LABEL: icmp_ne_xv_nxv8i16: 849; CHECK: # %bb.0: 850; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 851; CHECK-NEXT: vmsne.vx v0, v8, a0 852; CHECK-NEXT: ret 853 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 854 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 855 %vc = icmp ne <vscale x 8 x i16> %splat, %va 856 ret <vscale x 8 x i1> %vc 857} 858 859define <vscale x 8 x i1> @icmp_ne_vi_nxv8i16_0(<vscale x 8 x i16> %va) { 860; CHECK-LABEL: icmp_ne_vi_nxv8i16_0: 861; CHECK: # %bb.0: 862; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 863; CHECK-NEXT: vmsne.vi v0, v8, 5 864; CHECK-NEXT: ret 865 %head = insertelement <vscale x 8 x i16> poison, i16 5, i32 0 866 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 867 %vc = icmp ne <vscale x 8 x i16> %va, %splat 868 ret <vscale x 8 x i1> %vc 869} 870 871define <vscale x 8 x i1> @icmp_ugt_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) { 872; CHECK-LABEL: icmp_ugt_vv_nxv8i16: 873; CHECK: # %bb.0: 874; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 875; CHECK-NEXT: vmsltu.vv v0, v10, v8 876; CHECK-NEXT: ret 877 %vc = icmp ugt <vscale x 8 x i16> %va, %vb 878 ret <vscale x 8 x i1> %vc 879} 880 881define <vscale x 8 x i1> @icmp_ugt_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 882; CHECK-LABEL: icmp_ugt_vx_nxv8i16: 883; CHECK: # %bb.0: 884; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 885; CHECK-NEXT: vmsgtu.vx v0, v8, a0 886; CHECK-NEXT: ret 887 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 888 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 889 %vc = icmp ugt <vscale x 8 x i16> %va, %splat 890 ret <vscale x 8 x i1> %vc 891} 892 893define <vscale x 8 x i1> @icmp_ugt_xv_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 894; CHECK-LABEL: icmp_ugt_xv_nxv8i16: 895; CHECK: # %bb.0: 896; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 897; CHECK-NEXT: vmsltu.vx v0, v8, a0 898; CHECK-NEXT: ret 899 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 900 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 901 %vc = icmp ugt <vscale x 8 x i16> %splat, %va 902 ret <vscale x 8 x i1> %vc 903} 904 905define <vscale x 8 x i1> @icmp_ugt_vi_nxv8i16_0(<vscale x 8 x i16> %va) { 906; CHECK-LABEL: icmp_ugt_vi_nxv8i16_0: 907; CHECK: # %bb.0: 908; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 909; CHECK-NEXT: vmsgtu.vi v0, v8, 5 910; CHECK-NEXT: ret 911 %head = insertelement <vscale x 8 x i16> poison, i16 5, i32 0 912 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 913 %vc = icmp ugt <vscale x 8 x i16> %va, %splat 914 ret <vscale x 8 x i1> %vc 915} 916 917define <vscale x 8 x i1> @icmp_uge_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) { 918; CHECK-LABEL: icmp_uge_vv_nxv8i16: 919; CHECK: # %bb.0: 920; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 921; CHECK-NEXT: vmsleu.vv v0, v10, v8 922; CHECK-NEXT: ret 923 %vc = icmp uge <vscale x 8 x i16> %va, %vb 924 ret <vscale x 8 x i1> %vc 925} 926 927define <vscale x 8 x i1> @icmp_uge_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 928; CHECK-LABEL: icmp_uge_vx_nxv8i16: 929; CHECK: # %bb.0: 930; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 931; CHECK-NEXT: vmv.v.x v10, a0 932; CHECK-NEXT: vmsleu.vv v0, v10, v8 933; CHECK-NEXT: ret 934 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 935 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 936 %vc = icmp uge <vscale x 8 x i16> %va, %splat 937 ret <vscale x 8 x i1> %vc 938} 939 940define <vscale x 8 x i1> @icmp_uge_xv_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 941; CHECK-LABEL: icmp_uge_xv_nxv8i16: 942; CHECK: # %bb.0: 943; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 944; CHECK-NEXT: vmsleu.vx v0, v8, a0 945; CHECK-NEXT: ret 946 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 947 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 948 %vc = icmp uge <vscale x 8 x i16> %splat, %va 949 ret <vscale x 8 x i1> %vc 950} 951 952define <vscale x 8 x i1> @icmp_uge_vi_nxv8i16_0(<vscale x 8 x i16> %va) { 953; CHECK-LABEL: icmp_uge_vi_nxv8i16_0: 954; CHECK: # %bb.0: 955; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 956; CHECK-NEXT: vmv.v.i v10, -16 957; CHECK-NEXT: vmsleu.vv v0, v10, v8 958; CHECK-NEXT: ret 959 %head = insertelement <vscale x 8 x i16> poison, i16 -16, i32 0 960 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 961 %vc = icmp uge <vscale x 8 x i16> %va, %splat 962 ret <vscale x 8 x i1> %vc 963} 964 965define <vscale x 8 x i1> @icmp_uge_vi_nxv8i16_1(<vscale x 8 x i16> %va) { 966; CHECK-LABEL: icmp_uge_vi_nxv8i16_1: 967; CHECK: # %bb.0: 968; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 969; CHECK-NEXT: vmsgtu.vi v0, v8, 14 970; CHECK-NEXT: ret 971 %head = insertelement <vscale x 8 x i16> poison, i16 15, i32 0 972 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 973 %vc = icmp uge <vscale x 8 x i16> %va, %splat 974 ret <vscale x 8 x i1> %vc 975} 976 977define <vscale x 8 x i1> @icmp_uge_iv_nxv8i16_1(<vscale x 8 x i16> %va) { 978; CHECK-LABEL: icmp_uge_iv_nxv8i16_1: 979; CHECK: # %bb.0: 980; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 981; CHECK-NEXT: vmsleu.vi v0, v8, 15 982; CHECK-NEXT: ret 983 %head = insertelement <vscale x 8 x i16> poison, i16 15, i32 0 984 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 985 %vc = icmp uge <vscale x 8 x i16> %splat, %va 986 ret <vscale x 8 x i1> %vc 987} 988 989define <vscale x 8 x i1> @icmp_uge_vi_nxv8i16_2(<vscale x 8 x i16> %va) { 990; CHECK-LABEL: icmp_uge_vi_nxv8i16_2: 991; CHECK: # %bb.0: 992; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 993; CHECK-NEXT: vmset.m v0 994; CHECK-NEXT: ret 995 %head = insertelement <vscale x 8 x i16> poison, i16 0, i32 0 996 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 997 %vc = icmp uge <vscale x 8 x i16> %va, %splat 998 ret <vscale x 8 x i1> %vc 999} 1000 1001define <vscale x 8 x i1> @icmp_uge_vi_nxv8i16_3(<vscale x 8 x i16> %va) { 1002; CHECK-LABEL: icmp_uge_vi_nxv8i16_3: 1003; CHECK: # %bb.0: 1004; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1005; CHECK-NEXT: vmsgtu.vi v0, v8, 0 1006; CHECK-NEXT: ret 1007 %head = insertelement <vscale x 8 x i16> poison, i16 1, i32 0 1008 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1009 %vc = icmp uge <vscale x 8 x i16> %va, %splat 1010 ret <vscale x 8 x i1> %vc 1011} 1012 1013define <vscale x 8 x i1> @icmp_uge_vi_nxv8i16_4(<vscale x 8 x i16> %va) { 1014; CHECK-LABEL: icmp_uge_vi_nxv8i16_4: 1015; CHECK: # %bb.0: 1016; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1017; CHECK-NEXT: vmsgtu.vi v0, v8, -16 1018; CHECK-NEXT: ret 1019 %head = insertelement <vscale x 8 x i16> poison, i16 -15, i32 0 1020 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1021 %vc = icmp uge <vscale x 8 x i16> %va, %splat 1022 ret <vscale x 8 x i1> %vc 1023} 1024 1025define <vscale x 8 x i1> @icmp_uge_vi_nxv8i16_5(<vscale x 8 x i16> %va) { 1026; CHECK-LABEL: icmp_uge_vi_nxv8i16_5: 1027; CHECK: # %bb.0: 1028; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1029; CHECK-NEXT: vmsgtu.vi v0, v8, 15 1030; CHECK-NEXT: ret 1031 %head = insertelement <vscale x 8 x i16> poison, i16 16, i32 0 1032 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1033 %vc = icmp uge <vscale x 8 x i16> %va, %splat 1034 ret <vscale x 8 x i1> %vc 1035} 1036 1037define <vscale x 8 x i1> @icmp_ult_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) { 1038; CHECK-LABEL: icmp_ult_vv_nxv8i16: 1039; CHECK: # %bb.0: 1040; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1041; CHECK-NEXT: vmsltu.vv v0, v8, v10 1042; CHECK-NEXT: ret 1043 %vc = icmp ult <vscale x 8 x i16> %va, %vb 1044 ret <vscale x 8 x i1> %vc 1045} 1046 1047define <vscale x 8 x i1> @icmp_ult_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1048; CHECK-LABEL: icmp_ult_vx_nxv8i16: 1049; CHECK: # %bb.0: 1050; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1051; CHECK-NEXT: vmsltu.vx v0, v8, a0 1052; CHECK-NEXT: ret 1053 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1054 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1055 %vc = icmp ult <vscale x 8 x i16> %va, %splat 1056 ret <vscale x 8 x i1> %vc 1057} 1058 1059define <vscale x 8 x i1> @icmp_ult_xv_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1060; CHECK-LABEL: icmp_ult_xv_nxv8i16: 1061; CHECK: # %bb.0: 1062; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1063; CHECK-NEXT: vmsgtu.vx v0, v8, a0 1064; CHECK-NEXT: ret 1065 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1066 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1067 %vc = icmp ult <vscale x 8 x i16> %splat, %va 1068 ret <vscale x 8 x i1> %vc 1069} 1070 1071define <vscale x 8 x i1> @icmp_ult_vi_nxv8i16_0(<vscale x 8 x i16> %va) { 1072; CHECK-LABEL: icmp_ult_vi_nxv8i16_0: 1073; CHECK: # %bb.0: 1074; CHECK-NEXT: li a0, -16 1075; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1076; CHECK-NEXT: vmsltu.vx v0, v8, a0 1077; CHECK-NEXT: ret 1078 %head = insertelement <vscale x 8 x i16> poison, i16 -16, i32 0 1079 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1080 %vc = icmp ult <vscale x 8 x i16> %va, %splat 1081 ret <vscale x 8 x i1> %vc 1082} 1083 1084define <vscale x 8 x i1> @icmp_ult_vi_nxv8i16_1(<vscale x 8 x i16> %va) { 1085; CHECK-LABEL: icmp_ult_vi_nxv8i16_1: 1086; CHECK: # %bb.0: 1087; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1088; CHECK-NEXT: vmsleu.vi v0, v8, -16 1089; CHECK-NEXT: ret 1090 %head = insertelement <vscale x 8 x i16> poison, i16 -15, i32 0 1091 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1092 %vc = icmp ult <vscale x 8 x i16> %va, %splat 1093 ret <vscale x 8 x i1> %vc 1094} 1095 1096define <vscale x 8 x i1> @icmp_ult_iv_nxv8i16_1(<vscale x 8 x i16> %va) { 1097; CHECK-LABEL: icmp_ult_iv_nxv8i16_1: 1098; CHECK: # %bb.0: 1099; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1100; CHECK-NEXT: vmsgtu.vi v0, v8, -15 1101; CHECK-NEXT: ret 1102 %head = insertelement <vscale x 8 x i16> poison, i16 -15, i32 0 1103 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1104 %vc = icmp ult <vscale x 8 x i16> %splat, %va 1105 ret <vscale x 8 x i1> %vc 1106} 1107 1108define <vscale x 8 x i1> @icmp_ult_vi_nxv8i16_2(<vscale x 8 x i16> %va) { 1109; CHECK-LABEL: icmp_ult_vi_nxv8i16_2: 1110; CHECK: # %bb.0: 1111; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 1112; CHECK-NEXT: vmclr.m v0 1113; CHECK-NEXT: ret 1114 %head = insertelement <vscale x 8 x i16> poison, i16 0, i32 0 1115 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1116 %vc = icmp ult <vscale x 8 x i16> %va, %splat 1117 ret <vscale x 8 x i1> %vc 1118} 1119 1120define <vscale x 8 x i1> @icmp_ult_vi_nxv8i16_3(<vscale x 8 x i16> %va) { 1121; CHECK-LABEL: icmp_ult_vi_nxv8i16_3: 1122; CHECK: # %bb.0: 1123; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1124; CHECK-NEXT: vmseq.vi v0, v8, 0 1125; CHECK-NEXT: ret 1126 %head = insertelement <vscale x 8 x i16> poison, i16 1, i32 0 1127 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1128 %vc = icmp ult <vscale x 8 x i16> %va, %splat 1129 ret <vscale x 8 x i1> %vc 1130} 1131 1132define <vscale x 8 x i1> @icmp_ult_vi_nxv8i16_4(<vscale x 8 x i16> %va) { 1133; CHECK-LABEL: icmp_ult_vi_nxv8i16_4: 1134; CHECK: # %bb.0: 1135; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1136; CHECK-NEXT: vmsleu.vi v0, v8, 15 1137; CHECK-NEXT: ret 1138 %head = insertelement <vscale x 8 x i16> poison, i16 16, i32 0 1139 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1140 %vc = icmp ult <vscale x 8 x i16> %va, %splat 1141 ret <vscale x 8 x i1> %vc 1142} 1143 1144define <vscale x 8 x i1> @icmp_ule_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) { 1145; CHECK-LABEL: icmp_ule_vv_nxv8i16: 1146; CHECK: # %bb.0: 1147; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1148; CHECK-NEXT: vmsleu.vv v0, v8, v10 1149; CHECK-NEXT: ret 1150 %vc = icmp ule <vscale x 8 x i16> %va, %vb 1151 ret <vscale x 8 x i1> %vc 1152} 1153 1154define <vscale x 8 x i1> @icmp_ule_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1155; CHECK-LABEL: icmp_ule_vx_nxv8i16: 1156; CHECK: # %bb.0: 1157; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1158; CHECK-NEXT: vmsleu.vx v0, v8, a0 1159; CHECK-NEXT: ret 1160 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1161 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1162 %vc = icmp ule <vscale x 8 x i16> %va, %splat 1163 ret <vscale x 8 x i1> %vc 1164} 1165 1166define <vscale x 8 x i1> @icmp_ule_xv_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1167; CHECK-LABEL: icmp_ule_xv_nxv8i16: 1168; CHECK: # %bb.0: 1169; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1170; CHECK-NEXT: vmv.v.x v10, a0 1171; CHECK-NEXT: vmsleu.vv v0, v10, v8 1172; CHECK-NEXT: ret 1173 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1174 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1175 %vc = icmp ule <vscale x 8 x i16> %splat, %va 1176 ret <vscale x 8 x i1> %vc 1177} 1178 1179define <vscale x 8 x i1> @icmp_ule_vi_nxv8i16_0(<vscale x 8 x i16> %va) { 1180; CHECK-LABEL: icmp_ule_vi_nxv8i16_0: 1181; CHECK: # %bb.0: 1182; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1183; CHECK-NEXT: vmsleu.vi v0, v8, 5 1184; CHECK-NEXT: ret 1185 %head = insertelement <vscale x 8 x i16> poison, i16 5, i32 0 1186 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1187 %vc = icmp ule <vscale x 8 x i16> %va, %splat 1188 ret <vscale x 8 x i1> %vc 1189} 1190 1191define <vscale x 8 x i1> @icmp_sgt_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) { 1192; CHECK-LABEL: icmp_sgt_vv_nxv8i16: 1193; CHECK: # %bb.0: 1194; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1195; CHECK-NEXT: vmslt.vv v0, v10, v8 1196; CHECK-NEXT: ret 1197 %vc = icmp sgt <vscale x 8 x i16> %va, %vb 1198 ret <vscale x 8 x i1> %vc 1199} 1200 1201define <vscale x 8 x i1> @icmp_sgt_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1202; CHECK-LABEL: icmp_sgt_vx_nxv8i16: 1203; CHECK: # %bb.0: 1204; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1205; CHECK-NEXT: vmsgt.vx v0, v8, a0 1206; CHECK-NEXT: ret 1207 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1208 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1209 %vc = icmp sgt <vscale x 8 x i16> %va, %splat 1210 ret <vscale x 8 x i1> %vc 1211} 1212 1213define <vscale x 8 x i1> @icmp_sgt_xv_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1214; CHECK-LABEL: icmp_sgt_xv_nxv8i16: 1215; CHECK: # %bb.0: 1216; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1217; CHECK-NEXT: vmslt.vx v0, v8, a0 1218; CHECK-NEXT: ret 1219 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1220 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1221 %vc = icmp sgt <vscale x 8 x i16> %splat, %va 1222 ret <vscale x 8 x i1> %vc 1223} 1224 1225define <vscale x 8 x i1> @icmp_sgt_vi_nxv8i16_0(<vscale x 8 x i16> %va) { 1226; CHECK-LABEL: icmp_sgt_vi_nxv8i16_0: 1227; CHECK: # %bb.0: 1228; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1229; CHECK-NEXT: vmsgt.vi v0, v8, 5 1230; CHECK-NEXT: ret 1231 %head = insertelement <vscale x 8 x i16> poison, i16 5, i32 0 1232 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1233 %vc = icmp sgt <vscale x 8 x i16> %va, %splat 1234 ret <vscale x 8 x i1> %vc 1235} 1236 1237define <vscale x 8 x i1> @icmp_sge_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) { 1238; CHECK-LABEL: icmp_sge_vv_nxv8i16: 1239; CHECK: # %bb.0: 1240; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1241; CHECK-NEXT: vmsle.vv v0, v10, v8 1242; CHECK-NEXT: ret 1243 %vc = icmp sge <vscale x 8 x i16> %va, %vb 1244 ret <vscale x 8 x i1> %vc 1245} 1246 1247define <vscale x 8 x i1> @icmp_sge_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1248; CHECK-LABEL: icmp_sge_vx_nxv8i16: 1249; CHECK: # %bb.0: 1250; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1251; CHECK-NEXT: vmv.v.x v10, a0 1252; CHECK-NEXT: vmsle.vv v0, v10, v8 1253; CHECK-NEXT: ret 1254 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1255 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1256 %vc = icmp sge <vscale x 8 x i16> %va, %splat 1257 ret <vscale x 8 x i1> %vc 1258} 1259 1260define <vscale x 8 x i1> @icmp_sge_xv_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1261; CHECK-LABEL: icmp_sge_xv_nxv8i16: 1262; CHECK: # %bb.0: 1263; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1264; CHECK-NEXT: vmsle.vx v0, v8, a0 1265; CHECK-NEXT: ret 1266 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1267 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1268 %vc = icmp sge <vscale x 8 x i16> %splat, %va 1269 ret <vscale x 8 x i1> %vc 1270} 1271 1272define <vscale x 8 x i1> @icmp_sge_vi_nxv8i16_0(<vscale x 8 x i16> %va) { 1273; CHECK-LABEL: icmp_sge_vi_nxv8i16_0: 1274; CHECK: # %bb.0: 1275; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1276; CHECK-NEXT: vmv.v.i v10, -16 1277; CHECK-NEXT: vmsle.vv v0, v10, v8 1278; CHECK-NEXT: ret 1279 %head = insertelement <vscale x 8 x i16> poison, i16 -16, i32 0 1280 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1281 %vc = icmp sge <vscale x 8 x i16> %va, %splat 1282 ret <vscale x 8 x i1> %vc 1283} 1284 1285define <vscale x 8 x i1> @icmp_sge_vi_nxv8i16_1(<vscale x 8 x i16> %va) { 1286; CHECK-LABEL: icmp_sge_vi_nxv8i16_1: 1287; CHECK: # %bb.0: 1288; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1289; CHECK-NEXT: vmsgt.vi v0, v8, -16 1290; CHECK-NEXT: ret 1291 %head = insertelement <vscale x 8 x i16> poison, i16 -15, i32 0 1292 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1293 %vc = icmp sge <vscale x 8 x i16> %va, %splat 1294 ret <vscale x 8 x i1> %vc 1295} 1296 1297define <vscale x 8 x i1> @icmp_sge_iv_nxv8i16_1(<vscale x 8 x i16> %va) { 1298; CHECK-LABEL: icmp_sge_iv_nxv8i16_1: 1299; CHECK: # %bb.0: 1300; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1301; CHECK-NEXT: vmsle.vi v0, v8, -15 1302; CHECK-NEXT: ret 1303 %head = insertelement <vscale x 8 x i16> poison, i16 -15, i32 0 1304 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1305 %vc = icmp sge <vscale x 8 x i16> %splat, %va 1306 ret <vscale x 8 x i1> %vc 1307} 1308 1309define <vscale x 8 x i1> @icmp_sge_vi_nxv8i16_2(<vscale x 8 x i16> %va) { 1310; CHECK-LABEL: icmp_sge_vi_nxv8i16_2: 1311; CHECK: # %bb.0: 1312; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1313; CHECK-NEXT: vmsgt.vi v0, v8, -1 1314; CHECK-NEXT: ret 1315 %head = insertelement <vscale x 8 x i16> poison, i16 0, i32 0 1316 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1317 %vc = icmp sge <vscale x 8 x i16> %va, %splat 1318 ret <vscale x 8 x i1> %vc 1319} 1320 1321define <vscale x 8 x i1> @icmp_sge_vi_nxv8i16_3(<vscale x 8 x i16> %va) { 1322; CHECK-LABEL: icmp_sge_vi_nxv8i16_3: 1323; CHECK: # %bb.0: 1324; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1325; CHECK-NEXT: vmsgt.vi v0, v8, 15 1326; CHECK-NEXT: ret 1327 %head = insertelement <vscale x 8 x i16> poison, i16 16, i32 0 1328 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1329 %vc = icmp sge <vscale x 8 x i16> %va, %splat 1330 ret <vscale x 8 x i1> %vc 1331} 1332 1333define <vscale x 8 x i1> @icmp_slt_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) { 1334; CHECK-LABEL: icmp_slt_vv_nxv8i16: 1335; CHECK: # %bb.0: 1336; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1337; CHECK-NEXT: vmslt.vv v0, v8, v10 1338; CHECK-NEXT: ret 1339 %vc = icmp slt <vscale x 8 x i16> %va, %vb 1340 ret <vscale x 8 x i1> %vc 1341} 1342 1343define <vscale x 8 x i1> @icmp_slt_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1344; CHECK-LABEL: icmp_slt_vx_nxv8i16: 1345; CHECK: # %bb.0: 1346; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1347; CHECK-NEXT: vmslt.vx v0, v8, a0 1348; CHECK-NEXT: ret 1349 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1350 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1351 %vc = icmp slt <vscale x 8 x i16> %va, %splat 1352 ret <vscale x 8 x i1> %vc 1353} 1354 1355define <vscale x 8 x i1> @icmp_slt_xv_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1356; CHECK-LABEL: icmp_slt_xv_nxv8i16: 1357; CHECK: # %bb.0: 1358; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1359; CHECK-NEXT: vmsgt.vx v0, v8, a0 1360; CHECK-NEXT: ret 1361 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1362 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1363 %vc = icmp slt <vscale x 8 x i16> %splat, %va 1364 ret <vscale x 8 x i1> %vc 1365} 1366 1367define <vscale x 8 x i1> @icmp_slt_vi_nxv8i16_0(<vscale x 8 x i16> %va) { 1368; CHECK-LABEL: icmp_slt_vi_nxv8i16_0: 1369; CHECK: # %bb.0: 1370; CHECK-NEXT: li a0, -16 1371; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1372; CHECK-NEXT: vmslt.vx v0, v8, a0 1373; CHECK-NEXT: ret 1374 %head = insertelement <vscale x 8 x i16> poison, i16 -16, i32 0 1375 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1376 %vc = icmp slt <vscale x 8 x i16> %va, %splat 1377 ret <vscale x 8 x i1> %vc 1378} 1379 1380define <vscale x 8 x i1> @icmp_slt_vi_nxv8i16_1(<vscale x 8 x i16> %va) { 1381; CHECK-LABEL: icmp_slt_vi_nxv8i16_1: 1382; CHECK: # %bb.0: 1383; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1384; CHECK-NEXT: vmsle.vi v0, v8, -16 1385; CHECK-NEXT: ret 1386 %head = insertelement <vscale x 8 x i16> poison, i16 -15, i32 0 1387 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1388 %vc = icmp slt <vscale x 8 x i16> %va, %splat 1389 ret <vscale x 8 x i1> %vc 1390} 1391 1392define <vscale x 8 x i1> @icmp_slt_iv_nxv8i16_1(<vscale x 8 x i16> %va) { 1393; CHECK-LABEL: icmp_slt_iv_nxv8i16_1: 1394; CHECK: # %bb.0: 1395; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1396; CHECK-NEXT: vmsgt.vi v0, v8, -15 1397; CHECK-NEXT: ret 1398 %head = insertelement <vscale x 8 x i16> poison, i16 -15, i32 0 1399 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1400 %vc = icmp slt <vscale x 8 x i16> %splat, %va 1401 ret <vscale x 8 x i1> %vc 1402} 1403 1404define <vscale x 8 x i1> @icmp_slt_vi_nxv8i16_2(<vscale x 8 x i16> %va) { 1405; CHECK-LABEL: icmp_slt_vi_nxv8i16_2: 1406; CHECK: # %bb.0: 1407; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1408; CHECK-NEXT: vmslt.vx v0, v8, zero 1409; CHECK-NEXT: ret 1410 %head = insertelement <vscale x 8 x i16> poison, i16 0, i32 0 1411 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1412 %vc = icmp slt <vscale x 8 x i16> %va, %splat 1413 ret <vscale x 8 x i1> %vc 1414} 1415 1416define <vscale x 8 x i1> @icmp_slt_vi_nxv8i16_3(<vscale x 8 x i16> %va) { 1417; CHECK-LABEL: icmp_slt_vi_nxv8i16_3: 1418; CHECK: # %bb.0: 1419; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1420; CHECK-NEXT: vmsle.vi v0, v8, 15 1421; CHECK-NEXT: ret 1422 %head = insertelement <vscale x 8 x i16> poison, i16 16, i32 0 1423 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1424 %vc = icmp slt <vscale x 8 x i16> %va, %splat 1425 ret <vscale x 8 x i1> %vc 1426} 1427 1428define <vscale x 8 x i1> @icmp_sle_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) { 1429; CHECK-LABEL: icmp_sle_vv_nxv8i16: 1430; CHECK: # %bb.0: 1431; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1432; CHECK-NEXT: vmsle.vv v0, v8, v10 1433; CHECK-NEXT: ret 1434 %vc = icmp sle <vscale x 8 x i16> %va, %vb 1435 ret <vscale x 8 x i1> %vc 1436} 1437 1438define <vscale x 8 x i1> @icmp_sle_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1439; CHECK-LABEL: icmp_sle_vx_nxv8i16: 1440; CHECK: # %bb.0: 1441; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1442; CHECK-NEXT: vmsle.vx v0, v8, a0 1443; CHECK-NEXT: ret 1444 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1445 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1446 %vc = icmp sle <vscale x 8 x i16> %va, %splat 1447 ret <vscale x 8 x i1> %vc 1448} 1449 1450define <vscale x 8 x i1> @icmp_sle_xv_nxv8i16(<vscale x 8 x i16> %va, i16 %b) { 1451; CHECK-LABEL: icmp_sle_xv_nxv8i16: 1452; CHECK: # %bb.0: 1453; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 1454; CHECK-NEXT: vmv.v.x v10, a0 1455; CHECK-NEXT: vmsle.vv v0, v10, v8 1456; CHECK-NEXT: ret 1457 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 1458 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1459 %vc = icmp sle <vscale x 8 x i16> %splat, %va 1460 ret <vscale x 8 x i1> %vc 1461} 1462 1463define <vscale x 8 x i1> @icmp_sle_vi_nxv8i16_0(<vscale x 8 x i16> %va) { 1464; CHECK-LABEL: icmp_sle_vi_nxv8i16_0: 1465; CHECK: # %bb.0: 1466; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1467; CHECK-NEXT: vmsle.vi v0, v8, 5 1468; CHECK-NEXT: ret 1469 %head = insertelement <vscale x 8 x i16> poison, i16 5, i32 0 1470 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 1471 %vc = icmp sle <vscale x 8 x i16> %va, %splat 1472 ret <vscale x 8 x i1> %vc 1473} 1474 1475define <vscale x 8 x i1> @icmp_eq_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) { 1476; CHECK-LABEL: icmp_eq_vv_nxv8i32: 1477; CHECK: # %bb.0: 1478; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1479; CHECK-NEXT: vmseq.vv v0, v8, v12 1480; CHECK-NEXT: ret 1481 %vc = icmp eq <vscale x 8 x i32> %va, %vb 1482 ret <vscale x 8 x i1> %vc 1483} 1484 1485define <vscale x 8 x i1> @icmp_eq_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1486; CHECK-LABEL: icmp_eq_vx_nxv8i32: 1487; CHECK: # %bb.0: 1488; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1489; CHECK-NEXT: vmseq.vx v0, v8, a0 1490; CHECK-NEXT: ret 1491 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1492 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1493 %vc = icmp eq <vscale x 8 x i32> %va, %splat 1494 ret <vscale x 8 x i1> %vc 1495} 1496 1497define <vscale x 8 x i1> @icmp_eq_xv_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1498; CHECK-LABEL: icmp_eq_xv_nxv8i32: 1499; CHECK: # %bb.0: 1500; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1501; CHECK-NEXT: vmseq.vx v0, v8, a0 1502; CHECK-NEXT: ret 1503 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1504 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1505 %vc = icmp eq <vscale x 8 x i32> %splat, %va 1506 ret <vscale x 8 x i1> %vc 1507} 1508 1509define <vscale x 8 x i1> @icmp_eq_vi_nxv8i32_0(<vscale x 8 x i32> %va) { 1510; CHECK-LABEL: icmp_eq_vi_nxv8i32_0: 1511; CHECK: # %bb.0: 1512; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1513; CHECK-NEXT: vmseq.vi v0, v8, 0 1514; CHECK-NEXT: ret 1515 %head = insertelement <vscale x 8 x i32> poison, i32 0, i32 0 1516 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1517 %vc = icmp eq <vscale x 8 x i32> %va, %splat 1518 ret <vscale x 8 x i1> %vc 1519} 1520 1521define <vscale x 8 x i1> @icmp_eq_vi_nxv8i32_1(<vscale x 8 x i32> %va) { 1522; CHECK-LABEL: icmp_eq_vi_nxv8i32_1: 1523; CHECK: # %bb.0: 1524; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1525; CHECK-NEXT: vmseq.vi v0, v8, 5 1526; CHECK-NEXT: ret 1527 %head = insertelement <vscale x 8 x i32> poison, i32 5, i32 0 1528 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1529 %vc = icmp eq <vscale x 8 x i32> %va, %splat 1530 ret <vscale x 8 x i1> %vc 1531} 1532 1533define <vscale x 8 x i1> @icmp_eq_iv_nxv8i32_1(<vscale x 8 x i32> %va) { 1534; CHECK-LABEL: icmp_eq_iv_nxv8i32_1: 1535; CHECK: # %bb.0: 1536; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1537; CHECK-NEXT: vmseq.vi v0, v8, 5 1538; CHECK-NEXT: ret 1539 %head = insertelement <vscale x 8 x i32> poison, i32 5, i32 0 1540 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1541 %vc = icmp eq <vscale x 8 x i32> %splat, %va 1542 ret <vscale x 8 x i1> %vc 1543} 1544 1545define <vscale x 8 x i1> @icmp_ne_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) { 1546; CHECK-LABEL: icmp_ne_vv_nxv8i32: 1547; CHECK: # %bb.0: 1548; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1549; CHECK-NEXT: vmsne.vv v0, v8, v12 1550; CHECK-NEXT: ret 1551 %vc = icmp ne <vscale x 8 x i32> %va, %vb 1552 ret <vscale x 8 x i1> %vc 1553} 1554 1555define <vscale x 8 x i1> @icmp_ne_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1556; CHECK-LABEL: icmp_ne_vx_nxv8i32: 1557; CHECK: # %bb.0: 1558; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1559; CHECK-NEXT: vmsne.vx v0, v8, a0 1560; CHECK-NEXT: ret 1561 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1562 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1563 %vc = icmp ne <vscale x 8 x i32> %va, %splat 1564 ret <vscale x 8 x i1> %vc 1565} 1566 1567define <vscale x 8 x i1> @icmp_ne_xv_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1568; CHECK-LABEL: icmp_ne_xv_nxv8i32: 1569; CHECK: # %bb.0: 1570; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1571; CHECK-NEXT: vmsne.vx v0, v8, a0 1572; CHECK-NEXT: ret 1573 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1574 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1575 %vc = icmp ne <vscale x 8 x i32> %splat, %va 1576 ret <vscale x 8 x i1> %vc 1577} 1578 1579define <vscale x 8 x i1> @icmp_ne_vi_nxv8i32_0(<vscale x 8 x i32> %va) { 1580; CHECK-LABEL: icmp_ne_vi_nxv8i32_0: 1581; CHECK: # %bb.0: 1582; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1583; CHECK-NEXT: vmsne.vi v0, v8, 5 1584; CHECK-NEXT: ret 1585 %head = insertelement <vscale x 8 x i32> poison, i32 5, i32 0 1586 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1587 %vc = icmp ne <vscale x 8 x i32> %va, %splat 1588 ret <vscale x 8 x i1> %vc 1589} 1590 1591define <vscale x 8 x i1> @icmp_ugt_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) { 1592; CHECK-LABEL: icmp_ugt_vv_nxv8i32: 1593; CHECK: # %bb.0: 1594; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1595; CHECK-NEXT: vmsltu.vv v0, v12, v8 1596; CHECK-NEXT: ret 1597 %vc = icmp ugt <vscale x 8 x i32> %va, %vb 1598 ret <vscale x 8 x i1> %vc 1599} 1600 1601define <vscale x 8 x i1> @icmp_ugt_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1602; CHECK-LABEL: icmp_ugt_vx_nxv8i32: 1603; CHECK: # %bb.0: 1604; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1605; CHECK-NEXT: vmsgtu.vx v0, v8, a0 1606; CHECK-NEXT: ret 1607 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1608 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1609 %vc = icmp ugt <vscale x 8 x i32> %va, %splat 1610 ret <vscale x 8 x i1> %vc 1611} 1612 1613define <vscale x 8 x i1> @icmp_ugt_xv_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1614; CHECK-LABEL: icmp_ugt_xv_nxv8i32: 1615; CHECK: # %bb.0: 1616; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1617; CHECK-NEXT: vmsltu.vx v0, v8, a0 1618; CHECK-NEXT: ret 1619 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1620 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1621 %vc = icmp ugt <vscale x 8 x i32> %splat, %va 1622 ret <vscale x 8 x i1> %vc 1623} 1624 1625define <vscale x 8 x i1> @icmp_ugt_vi_nxv8i32_0(<vscale x 8 x i32> %va) { 1626; CHECK-LABEL: icmp_ugt_vi_nxv8i32_0: 1627; CHECK: # %bb.0: 1628; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1629; CHECK-NEXT: vmsgtu.vi v0, v8, 5 1630; CHECK-NEXT: ret 1631 %head = insertelement <vscale x 8 x i32> poison, i32 5, i32 0 1632 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1633 %vc = icmp ugt <vscale x 8 x i32> %va, %splat 1634 ret <vscale x 8 x i1> %vc 1635} 1636 1637define <vscale x 8 x i1> @icmp_uge_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) { 1638; CHECK-LABEL: icmp_uge_vv_nxv8i32: 1639; CHECK: # %bb.0: 1640; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1641; CHECK-NEXT: vmsleu.vv v0, v12, v8 1642; CHECK-NEXT: ret 1643 %vc = icmp uge <vscale x 8 x i32> %va, %vb 1644 ret <vscale x 8 x i1> %vc 1645} 1646 1647define <vscale x 8 x i1> @icmp_uge_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1648; CHECK-LABEL: icmp_uge_vx_nxv8i32: 1649; CHECK: # %bb.0: 1650; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1651; CHECK-NEXT: vmv.v.x v12, a0 1652; CHECK-NEXT: vmsleu.vv v0, v12, v8 1653; CHECK-NEXT: ret 1654 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1655 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1656 %vc = icmp uge <vscale x 8 x i32> %va, %splat 1657 ret <vscale x 8 x i1> %vc 1658} 1659 1660define <vscale x 8 x i1> @icmp_uge_xv_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1661; CHECK-LABEL: icmp_uge_xv_nxv8i32: 1662; CHECK: # %bb.0: 1663; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1664; CHECK-NEXT: vmsleu.vx v0, v8, a0 1665; CHECK-NEXT: ret 1666 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1667 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1668 %vc = icmp uge <vscale x 8 x i32> %splat, %va 1669 ret <vscale x 8 x i1> %vc 1670} 1671 1672define <vscale x 8 x i1> @icmp_uge_vi_nxv8i32_0(<vscale x 8 x i32> %va) { 1673; CHECK-LABEL: icmp_uge_vi_nxv8i32_0: 1674; CHECK: # %bb.0: 1675; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1676; CHECK-NEXT: vmv.v.i v12, -16 1677; CHECK-NEXT: vmsleu.vv v0, v12, v8 1678; CHECK-NEXT: ret 1679 %head = insertelement <vscale x 8 x i32> poison, i32 -16, i32 0 1680 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1681 %vc = icmp uge <vscale x 8 x i32> %va, %splat 1682 ret <vscale x 8 x i1> %vc 1683} 1684 1685define <vscale x 8 x i1> @icmp_uge_vi_nxv8i32_1(<vscale x 8 x i32> %va) { 1686; CHECK-LABEL: icmp_uge_vi_nxv8i32_1: 1687; CHECK: # %bb.0: 1688; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1689; CHECK-NEXT: vmsgtu.vi v0, v8, 14 1690; CHECK-NEXT: ret 1691 %head = insertelement <vscale x 8 x i32> poison, i32 15, i32 0 1692 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1693 %vc = icmp uge <vscale x 8 x i32> %va, %splat 1694 ret <vscale x 8 x i1> %vc 1695} 1696 1697define <vscale x 8 x i1> @icmp_uge_iv_nxv8i32_1(<vscale x 8 x i32> %va) { 1698; CHECK-LABEL: icmp_uge_iv_nxv8i32_1: 1699; CHECK: # %bb.0: 1700; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1701; CHECK-NEXT: vmsleu.vi v0, v8, 15 1702; CHECK-NEXT: ret 1703 %head = insertelement <vscale x 8 x i32> poison, i32 15, i32 0 1704 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1705 %vc = icmp uge <vscale x 8 x i32> %splat, %va 1706 ret <vscale x 8 x i1> %vc 1707} 1708 1709define <vscale x 8 x i1> @icmp_uge_vi_nxv8i32_2(<vscale x 8 x i32> %va) { 1710; CHECK-LABEL: icmp_uge_vi_nxv8i32_2: 1711; CHECK: # %bb.0: 1712; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 1713; CHECK-NEXT: vmset.m v0 1714; CHECK-NEXT: ret 1715 %head = insertelement <vscale x 8 x i32> poison, i32 0, i32 0 1716 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1717 %vc = icmp uge <vscale x 8 x i32> %va, %splat 1718 ret <vscale x 8 x i1> %vc 1719} 1720 1721define <vscale x 8 x i1> @icmp_uge_vi_nxv8i32_3(<vscale x 8 x i32> %va) { 1722; CHECK-LABEL: icmp_uge_vi_nxv8i32_3: 1723; CHECK: # %bb.0: 1724; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1725; CHECK-NEXT: vmsgtu.vi v0, v8, 0 1726; CHECK-NEXT: ret 1727 %head = insertelement <vscale x 8 x i32> poison, i32 1, i32 0 1728 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1729 %vc = icmp uge <vscale x 8 x i32> %va, %splat 1730 ret <vscale x 8 x i1> %vc 1731} 1732 1733define <vscale x 8 x i1> @icmp_uge_vi_nxv8i32_4(<vscale x 8 x i32> %va) { 1734; CHECK-LABEL: icmp_uge_vi_nxv8i32_4: 1735; CHECK: # %bb.0: 1736; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1737; CHECK-NEXT: vmsgtu.vi v0, v8, -16 1738; CHECK-NEXT: ret 1739 %head = insertelement <vscale x 8 x i32> poison, i32 -15, i32 0 1740 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1741 %vc = icmp uge <vscale x 8 x i32> %va, %splat 1742 ret <vscale x 8 x i1> %vc 1743} 1744 1745define <vscale x 8 x i1> @icmp_uge_vi_nxv8i32_5(<vscale x 8 x i32> %va) { 1746; CHECK-LABEL: icmp_uge_vi_nxv8i32_5: 1747; CHECK: # %bb.0: 1748; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1749; CHECK-NEXT: vmsgtu.vi v0, v8, 15 1750; CHECK-NEXT: ret 1751 %head = insertelement <vscale x 8 x i32> poison, i32 16, i32 0 1752 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1753 %vc = icmp uge <vscale x 8 x i32> %va, %splat 1754 ret <vscale x 8 x i1> %vc 1755} 1756 1757define <vscale x 8 x i1> @icmp_ult_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) { 1758; CHECK-LABEL: icmp_ult_vv_nxv8i32: 1759; CHECK: # %bb.0: 1760; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1761; CHECK-NEXT: vmsltu.vv v0, v8, v12 1762; CHECK-NEXT: ret 1763 %vc = icmp ult <vscale x 8 x i32> %va, %vb 1764 ret <vscale x 8 x i1> %vc 1765} 1766 1767define <vscale x 8 x i1> @icmp_ult_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1768; CHECK-LABEL: icmp_ult_vx_nxv8i32: 1769; CHECK: # %bb.0: 1770; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1771; CHECK-NEXT: vmsltu.vx v0, v8, a0 1772; CHECK-NEXT: ret 1773 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1774 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1775 %vc = icmp ult <vscale x 8 x i32> %va, %splat 1776 ret <vscale x 8 x i1> %vc 1777} 1778 1779define <vscale x 8 x i1> @icmp_ult_xv_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1780; CHECK-LABEL: icmp_ult_xv_nxv8i32: 1781; CHECK: # %bb.0: 1782; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1783; CHECK-NEXT: vmsgtu.vx v0, v8, a0 1784; CHECK-NEXT: ret 1785 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1786 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1787 %vc = icmp ult <vscale x 8 x i32> %splat, %va 1788 ret <vscale x 8 x i1> %vc 1789} 1790 1791define <vscale x 8 x i1> @icmp_ult_vi_nxv8i32_0(<vscale x 8 x i32> %va) { 1792; CHECK-LABEL: icmp_ult_vi_nxv8i32_0: 1793; CHECK: # %bb.0: 1794; CHECK-NEXT: li a0, -16 1795; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1796; CHECK-NEXT: vmsltu.vx v0, v8, a0 1797; CHECK-NEXT: ret 1798 %head = insertelement <vscale x 8 x i32> poison, i32 -16, i32 0 1799 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1800 %vc = icmp ult <vscale x 8 x i32> %va, %splat 1801 ret <vscale x 8 x i1> %vc 1802} 1803 1804define <vscale x 8 x i1> @icmp_ult_vi_nxv8i32_1(<vscale x 8 x i32> %va) { 1805; CHECK-LABEL: icmp_ult_vi_nxv8i32_1: 1806; CHECK: # %bb.0: 1807; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1808; CHECK-NEXT: vmsleu.vi v0, v8, -16 1809; CHECK-NEXT: ret 1810 %head = insertelement <vscale x 8 x i32> poison, i32 -15, i32 0 1811 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1812 %vc = icmp ult <vscale x 8 x i32> %va, %splat 1813 ret <vscale x 8 x i1> %vc 1814} 1815 1816define <vscale x 8 x i1> @icmp_ult_iv_nxv8i32_1(<vscale x 8 x i32> %va) { 1817; CHECK-LABEL: icmp_ult_iv_nxv8i32_1: 1818; CHECK: # %bb.0: 1819; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1820; CHECK-NEXT: vmsgtu.vi v0, v8, -15 1821; CHECK-NEXT: ret 1822 %head = insertelement <vscale x 8 x i32> poison, i32 -15, i32 0 1823 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1824 %vc = icmp ult <vscale x 8 x i32> %splat, %va 1825 ret <vscale x 8 x i1> %vc 1826} 1827 1828define <vscale x 8 x i1> @icmp_ult_vi_nxv8i32_2(<vscale x 8 x i32> %va) { 1829; CHECK-LABEL: icmp_ult_vi_nxv8i32_2: 1830; CHECK: # %bb.0: 1831; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 1832; CHECK-NEXT: vmclr.m v0 1833; CHECK-NEXT: ret 1834 %head = insertelement <vscale x 8 x i32> poison, i32 0, i32 0 1835 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1836 %vc = icmp ult <vscale x 8 x i32> %va, %splat 1837 ret <vscale x 8 x i1> %vc 1838} 1839 1840define <vscale x 8 x i1> @icmp_ult_vi_nxv8i32_3(<vscale x 8 x i32> %va) { 1841; CHECK-LABEL: icmp_ult_vi_nxv8i32_3: 1842; CHECK: # %bb.0: 1843; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1844; CHECK-NEXT: vmseq.vi v0, v8, 0 1845; CHECK-NEXT: ret 1846 %head = insertelement <vscale x 8 x i32> poison, i32 1, i32 0 1847 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1848 %vc = icmp ult <vscale x 8 x i32> %va, %splat 1849 ret <vscale x 8 x i1> %vc 1850} 1851 1852define <vscale x 8 x i1> @icmp_ult_vi_nxv8i32_4(<vscale x 8 x i32> %va) { 1853; CHECK-LABEL: icmp_ult_vi_nxv8i32_4: 1854; CHECK: # %bb.0: 1855; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1856; CHECK-NEXT: vmsleu.vi v0, v8, 15 1857; CHECK-NEXT: ret 1858 %head = insertelement <vscale x 8 x i32> poison, i32 16, i32 0 1859 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1860 %vc = icmp ult <vscale x 8 x i32> %va, %splat 1861 ret <vscale x 8 x i1> %vc 1862} 1863 1864define <vscale x 8 x i1> @icmp_ule_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) { 1865; CHECK-LABEL: icmp_ule_vv_nxv8i32: 1866; CHECK: # %bb.0: 1867; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1868; CHECK-NEXT: vmsleu.vv v0, v8, v12 1869; CHECK-NEXT: ret 1870 %vc = icmp ule <vscale x 8 x i32> %va, %vb 1871 ret <vscale x 8 x i1> %vc 1872} 1873 1874define <vscale x 8 x i1> @icmp_ule_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1875; CHECK-LABEL: icmp_ule_vx_nxv8i32: 1876; CHECK: # %bb.0: 1877; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1878; CHECK-NEXT: vmsleu.vx v0, v8, a0 1879; CHECK-NEXT: ret 1880 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1881 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1882 %vc = icmp ule <vscale x 8 x i32> %va, %splat 1883 ret <vscale x 8 x i1> %vc 1884} 1885 1886define <vscale x 8 x i1> @icmp_ule_xv_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1887; CHECK-LABEL: icmp_ule_xv_nxv8i32: 1888; CHECK: # %bb.0: 1889; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1890; CHECK-NEXT: vmv.v.x v12, a0 1891; CHECK-NEXT: vmsleu.vv v0, v12, v8 1892; CHECK-NEXT: ret 1893 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1894 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1895 %vc = icmp ule <vscale x 8 x i32> %splat, %va 1896 ret <vscale x 8 x i1> %vc 1897} 1898 1899define <vscale x 8 x i1> @icmp_ule_vi_nxv8i32_0(<vscale x 8 x i32> %va) { 1900; CHECK-LABEL: icmp_ule_vi_nxv8i32_0: 1901; CHECK: # %bb.0: 1902; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1903; CHECK-NEXT: vmsleu.vi v0, v8, 5 1904; CHECK-NEXT: ret 1905 %head = insertelement <vscale x 8 x i32> poison, i32 5, i32 0 1906 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1907 %vc = icmp ule <vscale x 8 x i32> %va, %splat 1908 ret <vscale x 8 x i1> %vc 1909} 1910 1911define <vscale x 8 x i1> @icmp_sgt_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) { 1912; CHECK-LABEL: icmp_sgt_vv_nxv8i32: 1913; CHECK: # %bb.0: 1914; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1915; CHECK-NEXT: vmslt.vv v0, v12, v8 1916; CHECK-NEXT: ret 1917 %vc = icmp sgt <vscale x 8 x i32> %va, %vb 1918 ret <vscale x 8 x i1> %vc 1919} 1920 1921define <vscale x 8 x i1> @icmp_sgt_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1922; CHECK-LABEL: icmp_sgt_vx_nxv8i32: 1923; CHECK: # %bb.0: 1924; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1925; CHECK-NEXT: vmsgt.vx v0, v8, a0 1926; CHECK-NEXT: ret 1927 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1928 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1929 %vc = icmp sgt <vscale x 8 x i32> %va, %splat 1930 ret <vscale x 8 x i1> %vc 1931} 1932 1933define <vscale x 8 x i1> @icmp_sgt_xv_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1934; CHECK-LABEL: icmp_sgt_xv_nxv8i32: 1935; CHECK: # %bb.0: 1936; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1937; CHECK-NEXT: vmslt.vx v0, v8, a0 1938; CHECK-NEXT: ret 1939 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1940 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1941 %vc = icmp sgt <vscale x 8 x i32> %splat, %va 1942 ret <vscale x 8 x i1> %vc 1943} 1944 1945define <vscale x 8 x i1> @icmp_sgt_vi_nxv8i32_0(<vscale x 8 x i32> %va) { 1946; CHECK-LABEL: icmp_sgt_vi_nxv8i32_0: 1947; CHECK: # %bb.0: 1948; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1949; CHECK-NEXT: vmsgt.vi v0, v8, 5 1950; CHECK-NEXT: ret 1951 %head = insertelement <vscale x 8 x i32> poison, i32 5, i32 0 1952 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1953 %vc = icmp sgt <vscale x 8 x i32> %va, %splat 1954 ret <vscale x 8 x i1> %vc 1955} 1956 1957define <vscale x 8 x i1> @icmp_sge_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) { 1958; CHECK-LABEL: icmp_sge_vv_nxv8i32: 1959; CHECK: # %bb.0: 1960; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1961; CHECK-NEXT: vmsle.vv v0, v12, v8 1962; CHECK-NEXT: ret 1963 %vc = icmp sge <vscale x 8 x i32> %va, %vb 1964 ret <vscale x 8 x i1> %vc 1965} 1966 1967define <vscale x 8 x i1> @icmp_sge_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1968; CHECK-LABEL: icmp_sge_vx_nxv8i32: 1969; CHECK: # %bb.0: 1970; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1971; CHECK-NEXT: vmv.v.x v12, a0 1972; CHECK-NEXT: vmsle.vv v0, v12, v8 1973; CHECK-NEXT: ret 1974 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1975 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1976 %vc = icmp sge <vscale x 8 x i32> %va, %splat 1977 ret <vscale x 8 x i1> %vc 1978} 1979 1980define <vscale x 8 x i1> @icmp_sge_xv_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 1981; CHECK-LABEL: icmp_sge_xv_nxv8i32: 1982; CHECK: # %bb.0: 1983; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1984; CHECK-NEXT: vmsle.vx v0, v8, a0 1985; CHECK-NEXT: ret 1986 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1987 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1988 %vc = icmp sge <vscale x 8 x i32> %splat, %va 1989 ret <vscale x 8 x i1> %vc 1990} 1991 1992define <vscale x 8 x i1> @icmp_sge_vi_nxv8i32_0(<vscale x 8 x i32> %va) { 1993; CHECK-LABEL: icmp_sge_vi_nxv8i32_0: 1994; CHECK: # %bb.0: 1995; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1996; CHECK-NEXT: vmv.v.i v12, -16 1997; CHECK-NEXT: vmsle.vv v0, v12, v8 1998; CHECK-NEXT: ret 1999 %head = insertelement <vscale x 8 x i32> poison, i32 -16, i32 0 2000 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2001 %vc = icmp sge <vscale x 8 x i32> %va, %splat 2002 ret <vscale x 8 x i1> %vc 2003} 2004 2005define <vscale x 8 x i1> @icmp_sge_vi_nxv8i32_1(<vscale x 8 x i32> %va) { 2006; CHECK-LABEL: icmp_sge_vi_nxv8i32_1: 2007; CHECK: # %bb.0: 2008; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 2009; CHECK-NEXT: vmsgt.vi v0, v8, -16 2010; CHECK-NEXT: ret 2011 %head = insertelement <vscale x 8 x i32> poison, i32 -15, i32 0 2012 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2013 %vc = icmp sge <vscale x 8 x i32> %va, %splat 2014 ret <vscale x 8 x i1> %vc 2015} 2016 2017define <vscale x 8 x i1> @icmp_sge_iv_nxv8i32_1(<vscale x 8 x i32> %va) { 2018; CHECK-LABEL: icmp_sge_iv_nxv8i32_1: 2019; CHECK: # %bb.0: 2020; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 2021; CHECK-NEXT: vmsle.vi v0, v8, -15 2022; CHECK-NEXT: ret 2023 %head = insertelement <vscale x 8 x i32> poison, i32 -15, i32 0 2024 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2025 %vc = icmp sge <vscale x 8 x i32> %splat, %va 2026 ret <vscale x 8 x i1> %vc 2027} 2028 2029define <vscale x 8 x i1> @icmp_sge_vi_nxv8i32_2(<vscale x 8 x i32> %va) { 2030; CHECK-LABEL: icmp_sge_vi_nxv8i32_2: 2031; CHECK: # %bb.0: 2032; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 2033; CHECK-NEXT: vmsgt.vi v0, v8, -1 2034; CHECK-NEXT: ret 2035 %head = insertelement <vscale x 8 x i32> poison, i32 0, i32 0 2036 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2037 %vc = icmp sge <vscale x 8 x i32> %va, %splat 2038 ret <vscale x 8 x i1> %vc 2039} 2040 2041define <vscale x 8 x i1> @icmp_sge_vi_nxv8i32_3(<vscale x 8 x i32> %va) { 2042; CHECK-LABEL: icmp_sge_vi_nxv8i32_3: 2043; CHECK: # %bb.0: 2044; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 2045; CHECK-NEXT: vmsgt.vi v0, v8, 15 2046; CHECK-NEXT: ret 2047 %head = insertelement <vscale x 8 x i32> poison, i32 16, i32 0 2048 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2049 %vc = icmp sge <vscale x 8 x i32> %va, %splat 2050 ret <vscale x 8 x i1> %vc 2051} 2052 2053define <vscale x 8 x i1> @icmp_slt_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) { 2054; CHECK-LABEL: icmp_slt_vv_nxv8i32: 2055; CHECK: # %bb.0: 2056; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 2057; CHECK-NEXT: vmslt.vv v0, v8, v12 2058; CHECK-NEXT: ret 2059 %vc = icmp slt <vscale x 8 x i32> %va, %vb 2060 ret <vscale x 8 x i1> %vc 2061} 2062 2063define <vscale x 8 x i1> @icmp_slt_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 2064; CHECK-LABEL: icmp_slt_vx_nxv8i32: 2065; CHECK: # %bb.0: 2066; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 2067; CHECK-NEXT: vmslt.vx v0, v8, a0 2068; CHECK-NEXT: ret 2069 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 2070 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2071 %vc = icmp slt <vscale x 8 x i32> %va, %splat 2072 ret <vscale x 8 x i1> %vc 2073} 2074 2075define <vscale x 8 x i1> @icmp_slt_xv_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 2076; CHECK-LABEL: icmp_slt_xv_nxv8i32: 2077; CHECK: # %bb.0: 2078; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 2079; CHECK-NEXT: vmsgt.vx v0, v8, a0 2080; CHECK-NEXT: ret 2081 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 2082 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2083 %vc = icmp slt <vscale x 8 x i32> %splat, %va 2084 ret <vscale x 8 x i1> %vc 2085} 2086 2087define <vscale x 8 x i1> @icmp_slt_vi_nxv8i32_0(<vscale x 8 x i32> %va) { 2088; CHECK-LABEL: icmp_slt_vi_nxv8i32_0: 2089; CHECK: # %bb.0: 2090; CHECK-NEXT: li a0, -16 2091; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 2092; CHECK-NEXT: vmslt.vx v0, v8, a0 2093; CHECK-NEXT: ret 2094 %head = insertelement <vscale x 8 x i32> poison, i32 -16, i32 0 2095 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2096 %vc = icmp slt <vscale x 8 x i32> %va, %splat 2097 ret <vscale x 8 x i1> %vc 2098} 2099 2100define <vscale x 8 x i1> @icmp_slt_vi_nxv8i32_1(<vscale x 8 x i32> %va) { 2101; CHECK-LABEL: icmp_slt_vi_nxv8i32_1: 2102; CHECK: # %bb.0: 2103; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 2104; CHECK-NEXT: vmsle.vi v0, v8, -16 2105; CHECK-NEXT: ret 2106 %head = insertelement <vscale x 8 x i32> poison, i32 -15, i32 0 2107 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2108 %vc = icmp slt <vscale x 8 x i32> %va, %splat 2109 ret <vscale x 8 x i1> %vc 2110} 2111 2112define <vscale x 8 x i1> @icmp_slt_iv_nxv8i32_1(<vscale x 8 x i32> %va) { 2113; CHECK-LABEL: icmp_slt_iv_nxv8i32_1: 2114; CHECK: # %bb.0: 2115; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 2116; CHECK-NEXT: vmsgt.vi v0, v8, -15 2117; CHECK-NEXT: ret 2118 %head = insertelement <vscale x 8 x i32> poison, i32 -15, i32 0 2119 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2120 %vc = icmp slt <vscale x 8 x i32> %splat, %va 2121 ret <vscale x 8 x i1> %vc 2122} 2123 2124define <vscale x 8 x i1> @icmp_slt_vi_nxv8i32_2(<vscale x 8 x i32> %va) { 2125; CHECK-LABEL: icmp_slt_vi_nxv8i32_2: 2126; CHECK: # %bb.0: 2127; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 2128; CHECK-NEXT: vmslt.vx v0, v8, zero 2129; CHECK-NEXT: ret 2130 %head = insertelement <vscale x 8 x i32> poison, i32 0, i32 0 2131 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2132 %vc = icmp slt <vscale x 8 x i32> %va, %splat 2133 ret <vscale x 8 x i1> %vc 2134} 2135 2136define <vscale x 8 x i1> @icmp_slt_vi_nxv8i32_3(<vscale x 8 x i32> %va) { 2137; CHECK-LABEL: icmp_slt_vi_nxv8i32_3: 2138; CHECK: # %bb.0: 2139; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 2140; CHECK-NEXT: vmsle.vi v0, v8, 15 2141; CHECK-NEXT: ret 2142 %head = insertelement <vscale x 8 x i32> poison, i32 16, i32 0 2143 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2144 %vc = icmp slt <vscale x 8 x i32> %va, %splat 2145 ret <vscale x 8 x i1> %vc 2146} 2147 2148define <vscale x 8 x i1> @icmp_sle_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) { 2149; CHECK-LABEL: icmp_sle_vv_nxv8i32: 2150; CHECK: # %bb.0: 2151; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 2152; CHECK-NEXT: vmsle.vv v0, v8, v12 2153; CHECK-NEXT: ret 2154 %vc = icmp sle <vscale x 8 x i32> %va, %vb 2155 ret <vscale x 8 x i1> %vc 2156} 2157 2158define <vscale x 8 x i1> @icmp_sle_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 2159; CHECK-LABEL: icmp_sle_vx_nxv8i32: 2160; CHECK: # %bb.0: 2161; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 2162; CHECK-NEXT: vmsle.vx v0, v8, a0 2163; CHECK-NEXT: ret 2164 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 2165 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2166 %vc = icmp sle <vscale x 8 x i32> %va, %splat 2167 ret <vscale x 8 x i1> %vc 2168} 2169 2170define <vscale x 8 x i1> @icmp_sle_xv_nxv8i32(<vscale x 8 x i32> %va, i32 %b) { 2171; CHECK-LABEL: icmp_sle_xv_nxv8i32: 2172; CHECK: # %bb.0: 2173; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 2174; CHECK-NEXT: vmv.v.x v12, a0 2175; CHECK-NEXT: vmsle.vv v0, v12, v8 2176; CHECK-NEXT: ret 2177 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 2178 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2179 %vc = icmp sle <vscale x 8 x i32> %splat, %va 2180 ret <vscale x 8 x i1> %vc 2181} 2182 2183define <vscale x 8 x i1> @icmp_sle_vi_nxv8i32_0(<vscale x 8 x i32> %va) { 2184; CHECK-LABEL: icmp_sle_vi_nxv8i32_0: 2185; CHECK: # %bb.0: 2186; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 2187; CHECK-NEXT: vmsle.vi v0, v8, 5 2188; CHECK-NEXT: ret 2189 %head = insertelement <vscale x 8 x i32> poison, i32 5, i32 0 2190 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 2191 %vc = icmp sle <vscale x 8 x i32> %va, %splat 2192 ret <vscale x 8 x i1> %vc 2193} 2194 2195define <vscale x 8 x i1> @icmp_eq_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) { 2196; CHECK-LABEL: icmp_eq_vv_nxv8i64: 2197; CHECK: # %bb.0: 2198; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2199; CHECK-NEXT: vmseq.vv v0, v8, v16 2200; CHECK-NEXT: ret 2201 %vc = icmp eq <vscale x 8 x i64> %va, %vb 2202 ret <vscale x 8 x i1> %vc 2203} 2204 2205define <vscale x 8 x i1> @icmp_eq_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2206; RV32-LABEL: icmp_eq_vx_nxv8i64: 2207; RV32: # %bb.0: 2208; RV32-NEXT: addi sp, sp, -16 2209; RV32-NEXT: .cfi_def_cfa_offset 16 2210; RV32-NEXT: sw a1, 12(sp) 2211; RV32-NEXT: sw a0, 8(sp) 2212; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2213; RV32-NEXT: addi a0, sp, 8 2214; RV32-NEXT: vlse64.v v16, (a0), zero 2215; RV32-NEXT: vmseq.vv v0, v8, v16 2216; RV32-NEXT: addi sp, sp, 16 2217; RV32-NEXT: ret 2218; 2219; RV64-LABEL: icmp_eq_vx_nxv8i64: 2220; RV64: # %bb.0: 2221; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2222; RV64-NEXT: vmseq.vx v0, v8, a0 2223; RV64-NEXT: ret 2224 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2225 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2226 %vc = icmp eq <vscale x 8 x i64> %va, %splat 2227 ret <vscale x 8 x i1> %vc 2228} 2229 2230define <vscale x 8 x i1> @icmp_eq_xv_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2231; RV32-LABEL: icmp_eq_xv_nxv8i64: 2232; RV32: # %bb.0: 2233; RV32-NEXT: addi sp, sp, -16 2234; RV32-NEXT: .cfi_def_cfa_offset 16 2235; RV32-NEXT: sw a1, 12(sp) 2236; RV32-NEXT: sw a0, 8(sp) 2237; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2238; RV32-NEXT: addi a0, sp, 8 2239; RV32-NEXT: vlse64.v v16, (a0), zero 2240; RV32-NEXT: vmseq.vv v0, v16, v8 2241; RV32-NEXT: addi sp, sp, 16 2242; RV32-NEXT: ret 2243; 2244; RV64-LABEL: icmp_eq_xv_nxv8i64: 2245; RV64: # %bb.0: 2246; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2247; RV64-NEXT: vmseq.vx v0, v8, a0 2248; RV64-NEXT: ret 2249 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2250 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2251 %vc = icmp eq <vscale x 8 x i64> %splat, %va 2252 ret <vscale x 8 x i1> %vc 2253} 2254 2255define <vscale x 8 x i1> @icmp_eq_vi_nxv8i64_0(<vscale x 8 x i64> %va) { 2256; CHECK-LABEL: icmp_eq_vi_nxv8i64_0: 2257; CHECK: # %bb.0: 2258; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2259; CHECK-NEXT: vmseq.vi v0, v8, 0 2260; CHECK-NEXT: ret 2261 %head = insertelement <vscale x 8 x i64> poison, i64 0, i32 0 2262 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2263 %vc = icmp eq <vscale x 8 x i64> %va, %splat 2264 ret <vscale x 8 x i1> %vc 2265} 2266 2267define <vscale x 8 x i1> @icmp_eq_vi_nxv8i64_1(<vscale x 8 x i64> %va) { 2268; CHECK-LABEL: icmp_eq_vi_nxv8i64_1: 2269; CHECK: # %bb.0: 2270; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2271; CHECK-NEXT: vmseq.vi v0, v8, 5 2272; CHECK-NEXT: ret 2273 %head = insertelement <vscale x 8 x i64> poison, i64 5, i32 0 2274 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2275 %vc = icmp eq <vscale x 8 x i64> %va, %splat 2276 ret <vscale x 8 x i1> %vc 2277} 2278 2279define <vscale x 8 x i1> @icmp_eq_iv_nxv8i64_1(<vscale x 8 x i64> %va) { 2280; CHECK-LABEL: icmp_eq_iv_nxv8i64_1: 2281; CHECK: # %bb.0: 2282; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2283; CHECK-NEXT: vmseq.vi v0, v8, 5 2284; CHECK-NEXT: ret 2285 %head = insertelement <vscale x 8 x i64> poison, i64 5, i32 0 2286 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2287 %vc = icmp eq <vscale x 8 x i64> %splat, %va 2288 ret <vscale x 8 x i1> %vc 2289} 2290 2291define <vscale x 8 x i1> @icmp_ne_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) { 2292; CHECK-LABEL: icmp_ne_vv_nxv8i64: 2293; CHECK: # %bb.0: 2294; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2295; CHECK-NEXT: vmsne.vv v0, v8, v16 2296; CHECK-NEXT: ret 2297 %vc = icmp ne <vscale x 8 x i64> %va, %vb 2298 ret <vscale x 8 x i1> %vc 2299} 2300 2301define <vscale x 8 x i1> @icmp_ne_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2302; RV32-LABEL: icmp_ne_vx_nxv8i64: 2303; RV32: # %bb.0: 2304; RV32-NEXT: addi sp, sp, -16 2305; RV32-NEXT: .cfi_def_cfa_offset 16 2306; RV32-NEXT: sw a1, 12(sp) 2307; RV32-NEXT: sw a0, 8(sp) 2308; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2309; RV32-NEXT: addi a0, sp, 8 2310; RV32-NEXT: vlse64.v v16, (a0), zero 2311; RV32-NEXT: vmsne.vv v0, v8, v16 2312; RV32-NEXT: addi sp, sp, 16 2313; RV32-NEXT: ret 2314; 2315; RV64-LABEL: icmp_ne_vx_nxv8i64: 2316; RV64: # %bb.0: 2317; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2318; RV64-NEXT: vmsne.vx v0, v8, a0 2319; RV64-NEXT: ret 2320 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2321 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2322 %vc = icmp ne <vscale x 8 x i64> %va, %splat 2323 ret <vscale x 8 x i1> %vc 2324} 2325 2326define <vscale x 8 x i1> @icmp_ne_xv_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2327; RV32-LABEL: icmp_ne_xv_nxv8i64: 2328; RV32: # %bb.0: 2329; RV32-NEXT: addi sp, sp, -16 2330; RV32-NEXT: .cfi_def_cfa_offset 16 2331; RV32-NEXT: sw a1, 12(sp) 2332; RV32-NEXT: sw a0, 8(sp) 2333; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2334; RV32-NEXT: addi a0, sp, 8 2335; RV32-NEXT: vlse64.v v16, (a0), zero 2336; RV32-NEXT: vmsne.vv v0, v16, v8 2337; RV32-NEXT: addi sp, sp, 16 2338; RV32-NEXT: ret 2339; 2340; RV64-LABEL: icmp_ne_xv_nxv8i64: 2341; RV64: # %bb.0: 2342; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2343; RV64-NEXT: vmsne.vx v0, v8, a0 2344; RV64-NEXT: ret 2345 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2346 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2347 %vc = icmp ne <vscale x 8 x i64> %splat, %va 2348 ret <vscale x 8 x i1> %vc 2349} 2350 2351define <vscale x 8 x i1> @icmp_ne_vi_nxv8i64_0(<vscale x 8 x i64> %va) { 2352; CHECK-LABEL: icmp_ne_vi_nxv8i64_0: 2353; CHECK: # %bb.0: 2354; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2355; CHECK-NEXT: vmsne.vi v0, v8, 5 2356; CHECK-NEXT: ret 2357 %head = insertelement <vscale x 8 x i64> poison, i64 5, i32 0 2358 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2359 %vc = icmp ne <vscale x 8 x i64> %va, %splat 2360 ret <vscale x 8 x i1> %vc 2361} 2362 2363define <vscale x 8 x i1> @icmp_ugt_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) { 2364; CHECK-LABEL: icmp_ugt_vv_nxv8i64: 2365; CHECK: # %bb.0: 2366; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2367; CHECK-NEXT: vmsltu.vv v0, v16, v8 2368; CHECK-NEXT: ret 2369 %vc = icmp ugt <vscale x 8 x i64> %va, %vb 2370 ret <vscale x 8 x i1> %vc 2371} 2372 2373define <vscale x 8 x i1> @icmp_ugt_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2374; RV32-LABEL: icmp_ugt_vx_nxv8i64: 2375; RV32: # %bb.0: 2376; RV32-NEXT: addi sp, sp, -16 2377; RV32-NEXT: .cfi_def_cfa_offset 16 2378; RV32-NEXT: sw a1, 12(sp) 2379; RV32-NEXT: sw a0, 8(sp) 2380; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2381; RV32-NEXT: addi a0, sp, 8 2382; RV32-NEXT: vlse64.v v16, (a0), zero 2383; RV32-NEXT: vmsltu.vv v0, v16, v8 2384; RV32-NEXT: addi sp, sp, 16 2385; RV32-NEXT: ret 2386; 2387; RV64-LABEL: icmp_ugt_vx_nxv8i64: 2388; RV64: # %bb.0: 2389; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2390; RV64-NEXT: vmsgtu.vx v0, v8, a0 2391; RV64-NEXT: ret 2392 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2393 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2394 %vc = icmp ugt <vscale x 8 x i64> %va, %splat 2395 ret <vscale x 8 x i1> %vc 2396} 2397 2398define <vscale x 8 x i1> @icmp_ugt_xv_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2399; RV32-LABEL: icmp_ugt_xv_nxv8i64: 2400; RV32: # %bb.0: 2401; RV32-NEXT: addi sp, sp, -16 2402; RV32-NEXT: .cfi_def_cfa_offset 16 2403; RV32-NEXT: sw a1, 12(sp) 2404; RV32-NEXT: sw a0, 8(sp) 2405; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2406; RV32-NEXT: addi a0, sp, 8 2407; RV32-NEXT: vlse64.v v16, (a0), zero 2408; RV32-NEXT: vmsltu.vv v0, v8, v16 2409; RV32-NEXT: addi sp, sp, 16 2410; RV32-NEXT: ret 2411; 2412; RV64-LABEL: icmp_ugt_xv_nxv8i64: 2413; RV64: # %bb.0: 2414; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2415; RV64-NEXT: vmsltu.vx v0, v8, a0 2416; RV64-NEXT: ret 2417 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2418 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2419 %vc = icmp ugt <vscale x 8 x i64> %splat, %va 2420 ret <vscale x 8 x i1> %vc 2421} 2422 2423define <vscale x 8 x i1> @icmp_ugt_vi_nxv8i64_0(<vscale x 8 x i64> %va) { 2424; CHECK-LABEL: icmp_ugt_vi_nxv8i64_0: 2425; CHECK: # %bb.0: 2426; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2427; CHECK-NEXT: vmsgtu.vi v0, v8, 5 2428; CHECK-NEXT: ret 2429 %head = insertelement <vscale x 8 x i64> poison, i64 5, i32 0 2430 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2431 %vc = icmp ugt <vscale x 8 x i64> %va, %splat 2432 ret <vscale x 8 x i1> %vc 2433} 2434 2435define <vscale x 8 x i1> @icmp_uge_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) { 2436; CHECK-LABEL: icmp_uge_vv_nxv8i64: 2437; CHECK: # %bb.0: 2438; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2439; CHECK-NEXT: vmsleu.vv v0, v16, v8 2440; CHECK-NEXT: ret 2441 %vc = icmp uge <vscale x 8 x i64> %va, %vb 2442 ret <vscale x 8 x i1> %vc 2443} 2444 2445define <vscale x 8 x i1> @icmp_uge_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2446; RV32-LABEL: icmp_uge_vx_nxv8i64: 2447; RV32: # %bb.0: 2448; RV32-NEXT: addi sp, sp, -16 2449; RV32-NEXT: .cfi_def_cfa_offset 16 2450; RV32-NEXT: sw a1, 12(sp) 2451; RV32-NEXT: sw a0, 8(sp) 2452; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2453; RV32-NEXT: addi a0, sp, 8 2454; RV32-NEXT: vlse64.v v16, (a0), zero 2455; RV32-NEXT: vmsleu.vv v0, v16, v8 2456; RV32-NEXT: addi sp, sp, 16 2457; RV32-NEXT: ret 2458; 2459; RV64-LABEL: icmp_uge_vx_nxv8i64: 2460; RV64: # %bb.0: 2461; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2462; RV64-NEXT: vmv.v.x v16, a0 2463; RV64-NEXT: vmsleu.vv v0, v16, v8 2464; RV64-NEXT: ret 2465 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2466 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2467 %vc = icmp uge <vscale x 8 x i64> %va, %splat 2468 ret <vscale x 8 x i1> %vc 2469} 2470 2471define <vscale x 8 x i1> @icmp_uge_xv_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2472; RV32-LABEL: icmp_uge_xv_nxv8i64: 2473; RV32: # %bb.0: 2474; RV32-NEXT: addi sp, sp, -16 2475; RV32-NEXT: .cfi_def_cfa_offset 16 2476; RV32-NEXT: sw a1, 12(sp) 2477; RV32-NEXT: sw a0, 8(sp) 2478; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2479; RV32-NEXT: addi a0, sp, 8 2480; RV32-NEXT: vlse64.v v16, (a0), zero 2481; RV32-NEXT: vmsleu.vv v0, v8, v16 2482; RV32-NEXT: addi sp, sp, 16 2483; RV32-NEXT: ret 2484; 2485; RV64-LABEL: icmp_uge_xv_nxv8i64: 2486; RV64: # %bb.0: 2487; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2488; RV64-NEXT: vmsleu.vx v0, v8, a0 2489; RV64-NEXT: ret 2490 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2491 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2492 %vc = icmp uge <vscale x 8 x i64> %splat, %va 2493 ret <vscale x 8 x i1> %vc 2494} 2495 2496define <vscale x 8 x i1> @icmp_uge_vi_nxv8i64_0(<vscale x 8 x i64> %va) { 2497; CHECK-LABEL: icmp_uge_vi_nxv8i64_0: 2498; CHECK: # %bb.0: 2499; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2500; CHECK-NEXT: vmv.v.i v16, -16 2501; CHECK-NEXT: vmsleu.vv v0, v16, v8 2502; CHECK-NEXT: ret 2503 %head = insertelement <vscale x 8 x i64> poison, i64 -16, i32 0 2504 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2505 %vc = icmp uge <vscale x 8 x i64> %va, %splat 2506 ret <vscale x 8 x i1> %vc 2507} 2508 2509define <vscale x 8 x i1> @icmp_uge_vi_nxv8i64_1(<vscale x 8 x i64> %va) { 2510; CHECK-LABEL: icmp_uge_vi_nxv8i64_1: 2511; CHECK: # %bb.0: 2512; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2513; CHECK-NEXT: vmsgtu.vi v0, v8, 14 2514; CHECK-NEXT: ret 2515 %head = insertelement <vscale x 8 x i64> poison, i64 15, i32 0 2516 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2517 %vc = icmp uge <vscale x 8 x i64> %va, %splat 2518 ret <vscale x 8 x i1> %vc 2519} 2520 2521define <vscale x 8 x i1> @icmp_uge_iv_nxv8i64_1(<vscale x 8 x i64> %va) { 2522; CHECK-LABEL: icmp_uge_iv_nxv8i64_1: 2523; CHECK: # %bb.0: 2524; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2525; CHECK-NEXT: vmsleu.vi v0, v8, 15 2526; CHECK-NEXT: ret 2527 %head = insertelement <vscale x 8 x i64> poison, i64 15, i32 0 2528 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2529 %vc = icmp uge <vscale x 8 x i64> %splat, %va 2530 ret <vscale x 8 x i1> %vc 2531} 2532 2533define <vscale x 8 x i1> @icmp_uge_vi_nxv8i64_2(<vscale x 8 x i64> %va) { 2534; CHECK-LABEL: icmp_uge_vi_nxv8i64_2: 2535; CHECK: # %bb.0: 2536; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 2537; CHECK-NEXT: vmset.m v0 2538; CHECK-NEXT: ret 2539 %head = insertelement <vscale x 8 x i64> poison, i64 0, i32 0 2540 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2541 %vc = icmp uge <vscale x 8 x i64> %va, %splat 2542 ret <vscale x 8 x i1> %vc 2543} 2544 2545define <vscale x 8 x i1> @icmp_uge_vi_nxv8i64_3(<vscale x 8 x i64> %va) { 2546; CHECK-LABEL: icmp_uge_vi_nxv8i64_3: 2547; CHECK: # %bb.0: 2548; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2549; CHECK-NEXT: vmsgtu.vi v0, v8, 0 2550; CHECK-NEXT: ret 2551 %head = insertelement <vscale x 8 x i64> poison, i64 1, i32 0 2552 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2553 %vc = icmp uge <vscale x 8 x i64> %va, %splat 2554 ret <vscale x 8 x i1> %vc 2555} 2556 2557define <vscale x 8 x i1> @icmp_uge_vi_nxv8i64_4(<vscale x 8 x i64> %va) { 2558; CHECK-LABEL: icmp_uge_vi_nxv8i64_4: 2559; CHECK: # %bb.0: 2560; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2561; CHECK-NEXT: vmsgtu.vi v0, v8, -16 2562; CHECK-NEXT: ret 2563 %head = insertelement <vscale x 8 x i64> poison, i64 -15, i32 0 2564 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2565 %vc = icmp uge <vscale x 8 x i64> %va, %splat 2566 ret <vscale x 8 x i1> %vc 2567} 2568 2569define <vscale x 8 x i1> @icmp_uge_vi_nxv8i64_5(<vscale x 8 x i64> %va) { 2570; CHECK-LABEL: icmp_uge_vi_nxv8i64_5: 2571; CHECK: # %bb.0: 2572; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2573; CHECK-NEXT: vmsgtu.vi v0, v8, 15 2574; CHECK-NEXT: ret 2575 %head = insertelement <vscale x 8 x i64> poison, i64 16, i32 0 2576 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2577 %vc = icmp uge <vscale x 8 x i64> %va, %splat 2578 ret <vscale x 8 x i1> %vc 2579} 2580 2581define <vscale x 8 x i1> @icmp_ult_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) { 2582; CHECK-LABEL: icmp_ult_vv_nxv8i64: 2583; CHECK: # %bb.0: 2584; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2585; CHECK-NEXT: vmsltu.vv v0, v8, v16 2586; CHECK-NEXT: ret 2587 %vc = icmp ult <vscale x 8 x i64> %va, %vb 2588 ret <vscale x 8 x i1> %vc 2589} 2590 2591define <vscale x 8 x i1> @icmp_ult_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2592; RV32-LABEL: icmp_ult_vx_nxv8i64: 2593; RV32: # %bb.0: 2594; RV32-NEXT: addi sp, sp, -16 2595; RV32-NEXT: .cfi_def_cfa_offset 16 2596; RV32-NEXT: sw a1, 12(sp) 2597; RV32-NEXT: sw a0, 8(sp) 2598; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2599; RV32-NEXT: addi a0, sp, 8 2600; RV32-NEXT: vlse64.v v16, (a0), zero 2601; RV32-NEXT: vmsltu.vv v0, v8, v16 2602; RV32-NEXT: addi sp, sp, 16 2603; RV32-NEXT: ret 2604; 2605; RV64-LABEL: icmp_ult_vx_nxv8i64: 2606; RV64: # %bb.0: 2607; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2608; RV64-NEXT: vmsltu.vx v0, v8, a0 2609; RV64-NEXT: ret 2610 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2611 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2612 %vc = icmp ult <vscale x 8 x i64> %va, %splat 2613 ret <vscale x 8 x i1> %vc 2614} 2615 2616define <vscale x 8 x i1> @icmp_ult_xv_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2617; RV32-LABEL: icmp_ult_xv_nxv8i64: 2618; RV32: # %bb.0: 2619; RV32-NEXT: addi sp, sp, -16 2620; RV32-NEXT: .cfi_def_cfa_offset 16 2621; RV32-NEXT: sw a1, 12(sp) 2622; RV32-NEXT: sw a0, 8(sp) 2623; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2624; RV32-NEXT: addi a0, sp, 8 2625; RV32-NEXT: vlse64.v v16, (a0), zero 2626; RV32-NEXT: vmsltu.vv v0, v16, v8 2627; RV32-NEXT: addi sp, sp, 16 2628; RV32-NEXT: ret 2629; 2630; RV64-LABEL: icmp_ult_xv_nxv8i64: 2631; RV64: # %bb.0: 2632; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2633; RV64-NEXT: vmsgtu.vx v0, v8, a0 2634; RV64-NEXT: ret 2635 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2636 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2637 %vc = icmp ult <vscale x 8 x i64> %splat, %va 2638 ret <vscale x 8 x i1> %vc 2639} 2640 2641define <vscale x 8 x i1> @icmp_ult_vi_nxv8i64_0(<vscale x 8 x i64> %va) { 2642; CHECK-LABEL: icmp_ult_vi_nxv8i64_0: 2643; CHECK: # %bb.0: 2644; CHECK-NEXT: li a0, -16 2645; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2646; CHECK-NEXT: vmsltu.vx v0, v8, a0 2647; CHECK-NEXT: ret 2648 %head = insertelement <vscale x 8 x i64> poison, i64 -16, i32 0 2649 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2650 %vc = icmp ult <vscale x 8 x i64> %va, %splat 2651 ret <vscale x 8 x i1> %vc 2652} 2653 2654define <vscale x 8 x i1> @icmp_ult_vi_nxv8i64_1(<vscale x 8 x i64> %va) { 2655; CHECK-LABEL: icmp_ult_vi_nxv8i64_1: 2656; CHECK: # %bb.0: 2657; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2658; CHECK-NEXT: vmsleu.vi v0, v8, -16 2659; CHECK-NEXT: ret 2660 %head = insertelement <vscale x 8 x i64> poison, i64 -15, i32 0 2661 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2662 %vc = icmp ult <vscale x 8 x i64> %va, %splat 2663 ret <vscale x 8 x i1> %vc 2664} 2665 2666define <vscale x 8 x i1> @icmp_ult_iv_nxv8i64_1(<vscale x 8 x i64> %va) { 2667; CHECK-LABEL: icmp_ult_iv_nxv8i64_1: 2668; CHECK: # %bb.0: 2669; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2670; CHECK-NEXT: vmsgtu.vi v0, v8, -15 2671; CHECK-NEXT: ret 2672 %head = insertelement <vscale x 8 x i64> poison, i64 -15, i32 0 2673 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2674 %vc = icmp ult <vscale x 8 x i64> %splat, %va 2675 ret <vscale x 8 x i1> %vc 2676} 2677 2678define <vscale x 8 x i1> @icmp_ult_vi_nxv8i64_2(<vscale x 8 x i64> %va) { 2679; CHECK-LABEL: icmp_ult_vi_nxv8i64_2: 2680; CHECK: # %bb.0: 2681; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 2682; CHECK-NEXT: vmclr.m v0 2683; CHECK-NEXT: ret 2684 %head = insertelement <vscale x 8 x i64> poison, i64 0, i32 0 2685 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2686 %vc = icmp ult <vscale x 8 x i64> %va, %splat 2687 ret <vscale x 8 x i1> %vc 2688} 2689 2690define <vscale x 8 x i1> @icmp_ult_vi_nxv8i64_3(<vscale x 8 x i64> %va) { 2691; CHECK-LABEL: icmp_ult_vi_nxv8i64_3: 2692; CHECK: # %bb.0: 2693; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2694; CHECK-NEXT: vmseq.vi v0, v8, 0 2695; CHECK-NEXT: ret 2696 %head = insertelement <vscale x 8 x i64> poison, i64 1, i32 0 2697 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2698 %vc = icmp ult <vscale x 8 x i64> %va, %splat 2699 ret <vscale x 8 x i1> %vc 2700} 2701 2702define <vscale x 8 x i1> @icmp_ult_vi_nxv8i64_4(<vscale x 8 x i64> %va) { 2703; CHECK-LABEL: icmp_ult_vi_nxv8i64_4: 2704; CHECK: # %bb.0: 2705; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2706; CHECK-NEXT: vmsleu.vi v0, v8, 15 2707; CHECK-NEXT: ret 2708 %head = insertelement <vscale x 8 x i64> poison, i64 16, i32 0 2709 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2710 %vc = icmp ult <vscale x 8 x i64> %va, %splat 2711 ret <vscale x 8 x i1> %vc 2712} 2713 2714define <vscale x 8 x i1> @icmp_ule_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) { 2715; CHECK-LABEL: icmp_ule_vv_nxv8i64: 2716; CHECK: # %bb.0: 2717; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2718; CHECK-NEXT: vmsleu.vv v0, v8, v16 2719; CHECK-NEXT: ret 2720 %vc = icmp ule <vscale x 8 x i64> %va, %vb 2721 ret <vscale x 8 x i1> %vc 2722} 2723 2724define <vscale x 8 x i1> @icmp_ule_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2725; RV32-LABEL: icmp_ule_vx_nxv8i64: 2726; RV32: # %bb.0: 2727; RV32-NEXT: addi sp, sp, -16 2728; RV32-NEXT: .cfi_def_cfa_offset 16 2729; RV32-NEXT: sw a1, 12(sp) 2730; RV32-NEXT: sw a0, 8(sp) 2731; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2732; RV32-NEXT: addi a0, sp, 8 2733; RV32-NEXT: vlse64.v v16, (a0), zero 2734; RV32-NEXT: vmsleu.vv v0, v8, v16 2735; RV32-NEXT: addi sp, sp, 16 2736; RV32-NEXT: ret 2737; 2738; RV64-LABEL: icmp_ule_vx_nxv8i64: 2739; RV64: # %bb.0: 2740; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2741; RV64-NEXT: vmsleu.vx v0, v8, a0 2742; RV64-NEXT: ret 2743 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2744 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2745 %vc = icmp ule <vscale x 8 x i64> %va, %splat 2746 ret <vscale x 8 x i1> %vc 2747} 2748 2749define <vscale x 8 x i1> @icmp_ule_xv_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2750; RV32-LABEL: icmp_ule_xv_nxv8i64: 2751; RV32: # %bb.0: 2752; RV32-NEXT: addi sp, sp, -16 2753; RV32-NEXT: .cfi_def_cfa_offset 16 2754; RV32-NEXT: sw a1, 12(sp) 2755; RV32-NEXT: sw a0, 8(sp) 2756; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2757; RV32-NEXT: addi a0, sp, 8 2758; RV32-NEXT: vlse64.v v16, (a0), zero 2759; RV32-NEXT: vmsleu.vv v0, v16, v8 2760; RV32-NEXT: addi sp, sp, 16 2761; RV32-NEXT: ret 2762; 2763; RV64-LABEL: icmp_ule_xv_nxv8i64: 2764; RV64: # %bb.0: 2765; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2766; RV64-NEXT: vmv.v.x v16, a0 2767; RV64-NEXT: vmsleu.vv v0, v16, v8 2768; RV64-NEXT: ret 2769 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2770 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2771 %vc = icmp ule <vscale x 8 x i64> %splat, %va 2772 ret <vscale x 8 x i1> %vc 2773} 2774 2775define <vscale x 8 x i1> @icmp_ule_vi_nxv8i64_0(<vscale x 8 x i64> %va) { 2776; CHECK-LABEL: icmp_ule_vi_nxv8i64_0: 2777; CHECK: # %bb.0: 2778; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2779; CHECK-NEXT: vmsleu.vi v0, v8, 5 2780; CHECK-NEXT: ret 2781 %head = insertelement <vscale x 8 x i64> poison, i64 5, i32 0 2782 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2783 %vc = icmp ule <vscale x 8 x i64> %va, %splat 2784 ret <vscale x 8 x i1> %vc 2785} 2786 2787define <vscale x 8 x i1> @icmp_sgt_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) { 2788; CHECK-LABEL: icmp_sgt_vv_nxv8i64: 2789; CHECK: # %bb.0: 2790; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2791; CHECK-NEXT: vmslt.vv v0, v16, v8 2792; CHECK-NEXT: ret 2793 %vc = icmp sgt <vscale x 8 x i64> %va, %vb 2794 ret <vscale x 8 x i1> %vc 2795} 2796 2797define <vscale x 8 x i1> @icmp_sgt_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2798; RV32-LABEL: icmp_sgt_vx_nxv8i64: 2799; RV32: # %bb.0: 2800; RV32-NEXT: addi sp, sp, -16 2801; RV32-NEXT: .cfi_def_cfa_offset 16 2802; RV32-NEXT: sw a1, 12(sp) 2803; RV32-NEXT: sw a0, 8(sp) 2804; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2805; RV32-NEXT: addi a0, sp, 8 2806; RV32-NEXT: vlse64.v v16, (a0), zero 2807; RV32-NEXT: vmslt.vv v0, v16, v8 2808; RV32-NEXT: addi sp, sp, 16 2809; RV32-NEXT: ret 2810; 2811; RV64-LABEL: icmp_sgt_vx_nxv8i64: 2812; RV64: # %bb.0: 2813; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2814; RV64-NEXT: vmsgt.vx v0, v8, a0 2815; RV64-NEXT: ret 2816 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2817 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2818 %vc = icmp sgt <vscale x 8 x i64> %va, %splat 2819 ret <vscale x 8 x i1> %vc 2820} 2821 2822define <vscale x 8 x i1> @icmp_sgt_xv_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2823; RV32-LABEL: icmp_sgt_xv_nxv8i64: 2824; RV32: # %bb.0: 2825; RV32-NEXT: addi sp, sp, -16 2826; RV32-NEXT: .cfi_def_cfa_offset 16 2827; RV32-NEXT: sw a1, 12(sp) 2828; RV32-NEXT: sw a0, 8(sp) 2829; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2830; RV32-NEXT: addi a0, sp, 8 2831; RV32-NEXT: vlse64.v v16, (a0), zero 2832; RV32-NEXT: vmslt.vv v0, v8, v16 2833; RV32-NEXT: addi sp, sp, 16 2834; RV32-NEXT: ret 2835; 2836; RV64-LABEL: icmp_sgt_xv_nxv8i64: 2837; RV64: # %bb.0: 2838; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2839; RV64-NEXT: vmslt.vx v0, v8, a0 2840; RV64-NEXT: ret 2841 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2842 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2843 %vc = icmp sgt <vscale x 8 x i64> %splat, %va 2844 ret <vscale x 8 x i1> %vc 2845} 2846 2847define <vscale x 8 x i1> @icmp_sgt_vi_nxv8i64_0(<vscale x 8 x i64> %va) { 2848; CHECK-LABEL: icmp_sgt_vi_nxv8i64_0: 2849; CHECK: # %bb.0: 2850; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2851; CHECK-NEXT: vmsgt.vi v0, v8, 5 2852; CHECK-NEXT: ret 2853 %head = insertelement <vscale x 8 x i64> poison, i64 5, i32 0 2854 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2855 %vc = icmp sgt <vscale x 8 x i64> %va, %splat 2856 ret <vscale x 8 x i1> %vc 2857} 2858 2859define <vscale x 8 x i1> @icmp_sge_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) { 2860; CHECK-LABEL: icmp_sge_vv_nxv8i64: 2861; CHECK: # %bb.0: 2862; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2863; CHECK-NEXT: vmsle.vv v0, v16, v8 2864; CHECK-NEXT: ret 2865 %vc = icmp sge <vscale x 8 x i64> %va, %vb 2866 ret <vscale x 8 x i1> %vc 2867} 2868 2869define <vscale x 8 x i1> @icmp_sge_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2870; RV32-LABEL: icmp_sge_vx_nxv8i64: 2871; RV32: # %bb.0: 2872; RV32-NEXT: addi sp, sp, -16 2873; RV32-NEXT: .cfi_def_cfa_offset 16 2874; RV32-NEXT: sw a1, 12(sp) 2875; RV32-NEXT: sw a0, 8(sp) 2876; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2877; RV32-NEXT: addi a0, sp, 8 2878; RV32-NEXT: vlse64.v v16, (a0), zero 2879; RV32-NEXT: vmsle.vv v0, v16, v8 2880; RV32-NEXT: addi sp, sp, 16 2881; RV32-NEXT: ret 2882; 2883; RV64-LABEL: icmp_sge_vx_nxv8i64: 2884; RV64: # %bb.0: 2885; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2886; RV64-NEXT: vmv.v.x v16, a0 2887; RV64-NEXT: vmsle.vv v0, v16, v8 2888; RV64-NEXT: ret 2889 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2890 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2891 %vc = icmp sge <vscale x 8 x i64> %va, %splat 2892 ret <vscale x 8 x i1> %vc 2893} 2894 2895define <vscale x 8 x i1> @icmp_sge_xv_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2896; RV32-LABEL: icmp_sge_xv_nxv8i64: 2897; RV32: # %bb.0: 2898; RV32-NEXT: addi sp, sp, -16 2899; RV32-NEXT: .cfi_def_cfa_offset 16 2900; RV32-NEXT: sw a1, 12(sp) 2901; RV32-NEXT: sw a0, 8(sp) 2902; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2903; RV32-NEXT: addi a0, sp, 8 2904; RV32-NEXT: vlse64.v v16, (a0), zero 2905; RV32-NEXT: vmsle.vv v0, v8, v16 2906; RV32-NEXT: addi sp, sp, 16 2907; RV32-NEXT: ret 2908; 2909; RV64-LABEL: icmp_sge_xv_nxv8i64: 2910; RV64: # %bb.0: 2911; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 2912; RV64-NEXT: vmsle.vx v0, v8, a0 2913; RV64-NEXT: ret 2914 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 2915 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2916 %vc = icmp sge <vscale x 8 x i64> %splat, %va 2917 ret <vscale x 8 x i1> %vc 2918} 2919 2920define <vscale x 8 x i1> @icmp_sge_vi_nxv8i64_0(<vscale x 8 x i64> %va) { 2921; CHECK-LABEL: icmp_sge_vi_nxv8i64_0: 2922; CHECK: # %bb.0: 2923; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2924; CHECK-NEXT: vmv.v.i v16, -16 2925; CHECK-NEXT: vmsle.vv v0, v16, v8 2926; CHECK-NEXT: ret 2927 %head = insertelement <vscale x 8 x i64> poison, i64 -16, i32 0 2928 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2929 %vc = icmp sge <vscale x 8 x i64> %va, %splat 2930 ret <vscale x 8 x i1> %vc 2931} 2932 2933define <vscale x 8 x i1> @icmp_sge_vi_nxv8i64_1(<vscale x 8 x i64> %va) { 2934; CHECK-LABEL: icmp_sge_vi_nxv8i64_1: 2935; CHECK: # %bb.0: 2936; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2937; CHECK-NEXT: vmsgt.vi v0, v8, -16 2938; CHECK-NEXT: ret 2939 %head = insertelement <vscale x 8 x i64> poison, i64 -15, i32 0 2940 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2941 %vc = icmp sge <vscale x 8 x i64> %va, %splat 2942 ret <vscale x 8 x i1> %vc 2943} 2944 2945define <vscale x 8 x i1> @icmp_sge_iv_nxv8i64_1(<vscale x 8 x i64> %va) { 2946; CHECK-LABEL: icmp_sge_iv_nxv8i64_1: 2947; CHECK: # %bb.0: 2948; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2949; CHECK-NEXT: vmsle.vi v0, v8, -15 2950; CHECK-NEXT: ret 2951 %head = insertelement <vscale x 8 x i64> poison, i64 -15, i32 0 2952 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2953 %vc = icmp sge <vscale x 8 x i64> %splat, %va 2954 ret <vscale x 8 x i1> %vc 2955} 2956 2957define <vscale x 8 x i1> @icmp_sge_vi_nxv8i64_2(<vscale x 8 x i64> %va) { 2958; CHECK-LABEL: icmp_sge_vi_nxv8i64_2: 2959; CHECK: # %bb.0: 2960; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2961; CHECK-NEXT: vmsgt.vi v0, v8, -1 2962; CHECK-NEXT: ret 2963 %head = insertelement <vscale x 8 x i64> poison, i64 0, i32 0 2964 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2965 %vc = icmp sge <vscale x 8 x i64> %va, %splat 2966 ret <vscale x 8 x i1> %vc 2967} 2968 2969define <vscale x 8 x i1> @icmp_sge_vi_nxv8i64_3(<vscale x 8 x i64> %va) { 2970; CHECK-LABEL: icmp_sge_vi_nxv8i64_3: 2971; CHECK: # %bb.0: 2972; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2973; CHECK-NEXT: vmsgt.vi v0, v8, 15 2974; CHECK-NEXT: ret 2975 %head = insertelement <vscale x 8 x i64> poison, i64 16, i32 0 2976 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 2977 %vc = icmp sge <vscale x 8 x i64> %va, %splat 2978 ret <vscale x 8 x i1> %vc 2979} 2980 2981define <vscale x 8 x i1> @icmp_slt_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) { 2982; CHECK-LABEL: icmp_slt_vv_nxv8i64: 2983; CHECK: # %bb.0: 2984; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2985; CHECK-NEXT: vmslt.vv v0, v8, v16 2986; CHECK-NEXT: ret 2987 %vc = icmp slt <vscale x 8 x i64> %va, %vb 2988 ret <vscale x 8 x i1> %vc 2989} 2990 2991define <vscale x 8 x i1> @icmp_slt_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 2992; RV32-LABEL: icmp_slt_vx_nxv8i64: 2993; RV32: # %bb.0: 2994; RV32-NEXT: addi sp, sp, -16 2995; RV32-NEXT: .cfi_def_cfa_offset 16 2996; RV32-NEXT: sw a1, 12(sp) 2997; RV32-NEXT: sw a0, 8(sp) 2998; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2999; RV32-NEXT: addi a0, sp, 8 3000; RV32-NEXT: vlse64.v v16, (a0), zero 3001; RV32-NEXT: vmslt.vv v0, v8, v16 3002; RV32-NEXT: addi sp, sp, 16 3003; RV32-NEXT: ret 3004; 3005; RV64-LABEL: icmp_slt_vx_nxv8i64: 3006; RV64: # %bb.0: 3007; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 3008; RV64-NEXT: vmslt.vx v0, v8, a0 3009; RV64-NEXT: ret 3010 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 3011 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 3012 %vc = icmp slt <vscale x 8 x i64> %va, %splat 3013 ret <vscale x 8 x i1> %vc 3014} 3015 3016define <vscale x 8 x i1> @icmp_slt_xv_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 3017; RV32-LABEL: icmp_slt_xv_nxv8i64: 3018; RV32: # %bb.0: 3019; RV32-NEXT: addi sp, sp, -16 3020; RV32-NEXT: .cfi_def_cfa_offset 16 3021; RV32-NEXT: sw a1, 12(sp) 3022; RV32-NEXT: sw a0, 8(sp) 3023; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 3024; RV32-NEXT: addi a0, sp, 8 3025; RV32-NEXT: vlse64.v v16, (a0), zero 3026; RV32-NEXT: vmslt.vv v0, v16, v8 3027; RV32-NEXT: addi sp, sp, 16 3028; RV32-NEXT: ret 3029; 3030; RV64-LABEL: icmp_slt_xv_nxv8i64: 3031; RV64: # %bb.0: 3032; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 3033; RV64-NEXT: vmsgt.vx v0, v8, a0 3034; RV64-NEXT: ret 3035 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 3036 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 3037 %vc = icmp slt <vscale x 8 x i64> %splat, %va 3038 ret <vscale x 8 x i1> %vc 3039} 3040 3041define <vscale x 8 x i1> @icmp_slt_vi_nxv8i64_0(<vscale x 8 x i64> %va) { 3042; CHECK-LABEL: icmp_slt_vi_nxv8i64_0: 3043; CHECK: # %bb.0: 3044; CHECK-NEXT: li a0, -16 3045; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu 3046; CHECK-NEXT: vmslt.vx v0, v8, a0 3047; CHECK-NEXT: ret 3048 %head = insertelement <vscale x 8 x i64> poison, i64 -16, i32 0 3049 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 3050 %vc = icmp slt <vscale x 8 x i64> %va, %splat 3051 ret <vscale x 8 x i1> %vc 3052} 3053 3054define <vscale x 8 x i1> @icmp_slt_vi_nxv8i64_1(<vscale x 8 x i64> %va) { 3055; CHECK-LABEL: icmp_slt_vi_nxv8i64_1: 3056; CHECK: # %bb.0: 3057; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 3058; CHECK-NEXT: vmsle.vi v0, v8, -16 3059; CHECK-NEXT: ret 3060 %head = insertelement <vscale x 8 x i64> poison, i64 -15, i32 0 3061 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 3062 %vc = icmp slt <vscale x 8 x i64> %va, %splat 3063 ret <vscale x 8 x i1> %vc 3064} 3065 3066define <vscale x 8 x i1> @icmp_slt_iv_nxv8i64_1(<vscale x 8 x i64> %va) { 3067; CHECK-LABEL: icmp_slt_iv_nxv8i64_1: 3068; CHECK: # %bb.0: 3069; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 3070; CHECK-NEXT: vmsgt.vi v0, v8, -15 3071; CHECK-NEXT: ret 3072 %head = insertelement <vscale x 8 x i64> poison, i64 -15, i32 0 3073 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 3074 %vc = icmp slt <vscale x 8 x i64> %splat, %va 3075 ret <vscale x 8 x i1> %vc 3076} 3077 3078define <vscale x 8 x i1> @icmp_slt_vi_nxv8i64_2(<vscale x 8 x i64> %va) { 3079; CHECK-LABEL: icmp_slt_vi_nxv8i64_2: 3080; CHECK: # %bb.0: 3081; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 3082; CHECK-NEXT: vmslt.vx v0, v8, zero 3083; CHECK-NEXT: ret 3084 %head = insertelement <vscale x 8 x i64> poison, i64 0, i32 0 3085 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 3086 %vc = icmp slt <vscale x 8 x i64> %va, %splat 3087 ret <vscale x 8 x i1> %vc 3088} 3089 3090define <vscale x 8 x i1> @icmp_slt_vi_nxv8i64_3(<vscale x 8 x i64> %va) { 3091; CHECK-LABEL: icmp_slt_vi_nxv8i64_3: 3092; CHECK: # %bb.0: 3093; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 3094; CHECK-NEXT: vmsle.vi v0, v8, 15 3095; CHECK-NEXT: ret 3096 %head = insertelement <vscale x 8 x i64> poison, i64 16, i32 0 3097 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 3098 %vc = icmp slt <vscale x 8 x i64> %va, %splat 3099 ret <vscale x 8 x i1> %vc 3100} 3101 3102define <vscale x 8 x i1> @icmp_sle_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) { 3103; CHECK-LABEL: icmp_sle_vv_nxv8i64: 3104; CHECK: # %bb.0: 3105; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 3106; CHECK-NEXT: vmsle.vv v0, v8, v16 3107; CHECK-NEXT: ret 3108 %vc = icmp sle <vscale x 8 x i64> %va, %vb 3109 ret <vscale x 8 x i1> %vc 3110} 3111 3112define <vscale x 8 x i1> @icmp_sle_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 3113; RV32-LABEL: icmp_sle_vx_nxv8i64: 3114; RV32: # %bb.0: 3115; RV32-NEXT: addi sp, sp, -16 3116; RV32-NEXT: .cfi_def_cfa_offset 16 3117; RV32-NEXT: sw a1, 12(sp) 3118; RV32-NEXT: sw a0, 8(sp) 3119; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 3120; RV32-NEXT: addi a0, sp, 8 3121; RV32-NEXT: vlse64.v v16, (a0), zero 3122; RV32-NEXT: vmsle.vv v0, v8, v16 3123; RV32-NEXT: addi sp, sp, 16 3124; RV32-NEXT: ret 3125; 3126; RV64-LABEL: icmp_sle_vx_nxv8i64: 3127; RV64: # %bb.0: 3128; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 3129; RV64-NEXT: vmsle.vx v0, v8, a0 3130; RV64-NEXT: ret 3131 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 3132 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 3133 %vc = icmp sle <vscale x 8 x i64> %va, %splat 3134 ret <vscale x 8 x i1> %vc 3135} 3136 3137define <vscale x 8 x i1> @icmp_sle_xv_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 3138; RV32-LABEL: icmp_sle_xv_nxv8i64: 3139; RV32: # %bb.0: 3140; RV32-NEXT: addi sp, sp, -16 3141; RV32-NEXT: .cfi_def_cfa_offset 16 3142; RV32-NEXT: sw a1, 12(sp) 3143; RV32-NEXT: sw a0, 8(sp) 3144; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu 3145; RV32-NEXT: addi a0, sp, 8 3146; RV32-NEXT: vlse64.v v16, (a0), zero 3147; RV32-NEXT: vmsle.vv v0, v16, v8 3148; RV32-NEXT: addi sp, sp, 16 3149; RV32-NEXT: ret 3150; 3151; RV64-LABEL: icmp_sle_xv_nxv8i64: 3152; RV64: # %bb.0: 3153; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu 3154; RV64-NEXT: vmv.v.x v16, a0 3155; RV64-NEXT: vmsle.vv v0, v16, v8 3156; RV64-NEXT: ret 3157 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 3158 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 3159 %vc = icmp sle <vscale x 8 x i64> %splat, %va 3160 ret <vscale x 8 x i1> %vc 3161} 3162 3163define <vscale x 8 x i1> @icmp_sle_vi_nxv8i64_0(<vscale x 8 x i64> %va) { 3164; CHECK-LABEL: icmp_sle_vi_nxv8i64_0: 3165; CHECK: # %bb.0: 3166; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 3167; CHECK-NEXT: vmsle.vi v0, v8, 5 3168; CHECK-NEXT: ret 3169 %head = insertelement <vscale x 8 x i64> poison, i64 5, i32 0 3170 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 3171 %vc = icmp sle <vscale x 8 x i64> %va, %splat 3172 ret <vscale x 8 x i1> %vc 3173} 3174 3175; Check a setcc with two constant splats, which would previously get stuck in 3176; an infinite loop. DAGCombine isn't clever enough to constant-fold 3177; splat_vectors but could continuously swap the operands, trying to put the 3178; splat on the RHS. 3179define <vscale x 8 x i1> @icmp_eq_ii_nxv8i8() { 3180; CHECK-LABEL: icmp_eq_ii_nxv8i8: 3181; CHECK: # %bb.0: 3182; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 3183; CHECK-NEXT: vmclr.m v0 3184; CHECK-NEXT: ret 3185 %heada = insertelement <vscale x 8 x i8> poison, i8 5, i32 0 3186 %splata = shufflevector <vscale x 8 x i8> %heada, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 3187 %headb = insertelement <vscale x 8 x i8> poison, i8 2, i32 0 3188 %splatb = shufflevector <vscale x 8 x i8> %headb, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 3189 %vc = icmp eq <vscale x 8 x i8> %splata, %splatb 3190 ret <vscale x 8 x i1> %vc 3191} 3192 3193; This icmp/setcc is split and so we find a scalable-vector mask CONCAT_VECTOR 3194; node. Ensure we correctly (custom) lower this. 3195define <vscale x 16 x i1> @icmp_eq_vi_nx16i64(<vscale x 16 x i64> %va) { 3196; CHECK-LABEL: icmp_eq_vi_nx16i64: 3197; CHECK: # %bb.0: 3198; CHECK-NEXT: csrr a0, vlenb 3199; CHECK-NEXT: srli a0, a0, 3 3200; CHECK-NEXT: add a1, a0, a0 3201; CHECK-NEXT: vsetvli a2, zero, e64, m8, ta, mu 3202; CHECK-NEXT: vmseq.vi v24, v16, 0 3203; CHECK-NEXT: vmseq.vi v0, v8, 0 3204; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu 3205; CHECK-NEXT: vslideup.vx v0, v24, a0 3206; CHECK-NEXT: ret 3207 %vc = icmp eq <vscale x 16 x i64> %va, zeroinitializer 3208 ret <vscale x 16 x i1> %vc 3209} 3210