1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \ 3; RUN: | FileCheck %s --check-prefixes=CHECK,RV32 4; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \ 5; RUN: | FileCheck %s --check-prefixes=CHECK,RV64 6 7declare <vscale x 8 x i7> @llvm.vp.lshr.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32) 8 9define <vscale x 8 x i7> @vsrl_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) { 10; CHECK-LABEL: vsrl_vx_nxv8i7: 11; CHECK: # %bb.0: 12; CHECK-NEXT: li a2, 127 13; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 14; CHECK-NEXT: vmv.v.x v9, a0 15; CHECK-NEXT: vand.vx v8, v8, a2, v0.t 16; CHECK-NEXT: vand.vx v9, v9, a2, v0.t 17; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t 18; CHECK-NEXT: ret 19 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0 20 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer 21 %v = call <vscale x 8 x i7> @llvm.vp.lshr.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl) 22 ret <vscale x 8 x i7> %v 23} 24 25declare <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32) 26 27define <vscale x 1 x i8> @vsrl_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 28; CHECK-LABEL: vsrl_vv_nxv1i8: 29; CHECK: # %bb.0: 30; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 31; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t 32; CHECK-NEXT: ret 33 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl) 34 ret <vscale x 1 x i8> %v 35} 36 37define <vscale x 1 x i8> @vsrl_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) { 38; CHECK-LABEL: vsrl_vv_nxv1i8_unmasked: 39; CHECK: # %bb.0: 40; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 41; CHECK-NEXT: vsrl.vv v8, v8, v9 42; CHECK-NEXT: ret 43 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 44 ret <vscale x 1 x i8> %v 45} 46 47define <vscale x 1 x i8> @vsrl_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 48; CHECK-LABEL: vsrl_vx_nxv1i8: 49; CHECK: # %bb.0: 50; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 51; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 52; CHECK-NEXT: ret 53 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0 54 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer 55 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl) 56 ret <vscale x 1 x i8> %v 57} 58 59define <vscale x 1 x i8> @vsrl_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) { 60; CHECK-LABEL: vsrl_vx_nxv1i8_unmasked: 61; CHECK: # %bb.0: 62; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 63; CHECK-NEXT: vsrl.vx v8, v8, a0 64; CHECK-NEXT: ret 65 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0 66 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer 67 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 68 ret <vscale x 1 x i8> %v 69} 70 71define <vscale x 1 x i8> @vsrl_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) { 72; CHECK-LABEL: vsrl_vi_nxv1i8: 73; CHECK: # %bb.0: 74; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 75; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 76; CHECK-NEXT: ret 77 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 4), <vscale x 1 x i1> %m, i32 %evl) 78 ret <vscale x 1 x i8> %v 79} 80 81define <vscale x 1 x i8> @vsrl_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) { 82; CHECK-LABEL: vsrl_vi_nxv1i8_unmasked: 83; CHECK: # %bb.0: 84; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 85; CHECK-NEXT: vsrl.vi v8, v8, 4 86; CHECK-NEXT: ret 87 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 4), <vscale x 1 x i1> splat (i1 true), i32 %evl) 88 ret <vscale x 1 x i8> %v 89} 90 91declare <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32) 92 93define <vscale x 2 x i8> @vsrl_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) { 94; CHECK-LABEL: vsrl_vv_nxv2i8: 95; CHECK: # %bb.0: 96; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 97; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t 98; CHECK-NEXT: ret 99 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl) 100 ret <vscale x 2 x i8> %v 101} 102 103define <vscale x 2 x i8> @vsrl_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) { 104; CHECK-LABEL: vsrl_vv_nxv2i8_unmasked: 105; CHECK: # %bb.0: 106; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 107; CHECK-NEXT: vsrl.vv v8, v8, v9 108; CHECK-NEXT: ret 109 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 110 ret <vscale x 2 x i8> %v 111} 112 113define <vscale x 2 x i8> @vsrl_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) { 114; CHECK-LABEL: vsrl_vx_nxv2i8: 115; CHECK: # %bb.0: 116; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 117; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 118; CHECK-NEXT: ret 119 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0 120 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer 121 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl) 122 ret <vscale x 2 x i8> %v 123} 124 125define <vscale x 2 x i8> @vsrl_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) { 126; CHECK-LABEL: vsrl_vx_nxv2i8_unmasked: 127; CHECK: # %bb.0: 128; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 129; CHECK-NEXT: vsrl.vx v8, v8, a0 130; CHECK-NEXT: ret 131 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0 132 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer 133 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 134 ret <vscale x 2 x i8> %v 135} 136 137define <vscale x 2 x i8> @vsrl_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 138; CHECK-LABEL: vsrl_vi_nxv2i8: 139; CHECK: # %bb.0: 140; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 141; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 142; CHECK-NEXT: ret 143 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 4), <vscale x 2 x i1> %m, i32 %evl) 144 ret <vscale x 2 x i8> %v 145} 146 147define <vscale x 2 x i8> @vsrl_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) { 148; CHECK-LABEL: vsrl_vi_nxv2i8_unmasked: 149; CHECK: # %bb.0: 150; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 151; CHECK-NEXT: vsrl.vi v8, v8, 4 152; CHECK-NEXT: ret 153 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 4), <vscale x 2 x i1> splat (i1 true), i32 %evl) 154 ret <vscale x 2 x i8> %v 155} 156 157declare <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32) 158 159define <vscale x 4 x i8> @vsrl_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) { 160; CHECK-LABEL: vsrl_vv_nxv4i8: 161; CHECK: # %bb.0: 162; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 163; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t 164; CHECK-NEXT: ret 165 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl) 166 ret <vscale x 4 x i8> %v 167} 168 169define <vscale x 4 x i8> @vsrl_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) { 170; CHECK-LABEL: vsrl_vv_nxv4i8_unmasked: 171; CHECK: # %bb.0: 172; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 173; CHECK-NEXT: vsrl.vv v8, v8, v9 174; CHECK-NEXT: ret 175 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 176 ret <vscale x 4 x i8> %v 177} 178 179define <vscale x 4 x i8> @vsrl_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) { 180; CHECK-LABEL: vsrl_vx_nxv4i8: 181; CHECK: # %bb.0: 182; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 183; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 184; CHECK-NEXT: ret 185 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0 186 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer 187 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl) 188 ret <vscale x 4 x i8> %v 189} 190 191define <vscale x 4 x i8> @vsrl_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) { 192; CHECK-LABEL: vsrl_vx_nxv4i8_unmasked: 193; CHECK: # %bb.0: 194; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 195; CHECK-NEXT: vsrl.vx v8, v8, a0 196; CHECK-NEXT: ret 197 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0 198 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer 199 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 200 ret <vscale x 4 x i8> %v 201} 202 203define <vscale x 4 x i8> @vsrl_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) { 204; CHECK-LABEL: vsrl_vi_nxv4i8: 205; CHECK: # %bb.0: 206; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 207; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 208; CHECK-NEXT: ret 209 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 4), <vscale x 4 x i1> %m, i32 %evl) 210 ret <vscale x 4 x i8> %v 211} 212 213define <vscale x 4 x i8> @vsrl_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) { 214; CHECK-LABEL: vsrl_vi_nxv4i8_unmasked: 215; CHECK: # %bb.0: 216; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 217; CHECK-NEXT: vsrl.vi v8, v8, 4 218; CHECK-NEXT: ret 219 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 4), <vscale x 4 x i1> splat (i1 true), i32 %evl) 220 ret <vscale x 4 x i8> %v 221} 222 223declare <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32) 224 225define <vscale x 8 x i8> @vsrl_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 226; CHECK-LABEL: vsrl_vv_nxv8i8: 227; CHECK: # %bb.0: 228; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 229; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t 230; CHECK-NEXT: ret 231 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl) 232 ret <vscale x 8 x i8> %v 233} 234 235define <vscale x 8 x i8> @vsrl_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) { 236; CHECK-LABEL: vsrl_vv_nxv8i8_unmasked: 237; CHECK: # %bb.0: 238; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 239; CHECK-NEXT: vsrl.vv v8, v8, v9 240; CHECK-NEXT: ret 241 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 242 ret <vscale x 8 x i8> %v 243} 244 245define <vscale x 8 x i8> @vsrl_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 246; CHECK-LABEL: vsrl_vx_nxv8i8: 247; CHECK: # %bb.0: 248; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 249; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 250; CHECK-NEXT: ret 251 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 252 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 253 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl) 254 ret <vscale x 8 x i8> %v 255} 256 257define <vscale x 8 x i8> @vsrl_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) { 258; CHECK-LABEL: vsrl_vx_nxv8i8_unmasked: 259; CHECK: # %bb.0: 260; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 261; CHECK-NEXT: vsrl.vx v8, v8, a0 262; CHECK-NEXT: ret 263 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 264 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 265 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 266 ret <vscale x 8 x i8> %v 267} 268 269define <vscale x 8 x i8> @vsrl_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) { 270; CHECK-LABEL: vsrl_vi_nxv8i8: 271; CHECK: # %bb.0: 272; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 273; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 274; CHECK-NEXT: ret 275 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 4), <vscale x 8 x i1> %m, i32 %evl) 276 ret <vscale x 8 x i8> %v 277} 278 279define <vscale x 8 x i8> @vsrl_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) { 280; CHECK-LABEL: vsrl_vi_nxv8i8_unmasked: 281; CHECK: # %bb.0: 282; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 283; CHECK-NEXT: vsrl.vi v8, v8, 4 284; CHECK-NEXT: ret 285 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 4), <vscale x 8 x i1> splat (i1 true), i32 %evl) 286 ret <vscale x 8 x i8> %v 287} 288 289declare <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32) 290 291define <vscale x 16 x i8> @vsrl_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) { 292; CHECK-LABEL: vsrl_vv_nxv16i8: 293; CHECK: # %bb.0: 294; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 295; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t 296; CHECK-NEXT: ret 297 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl) 298 ret <vscale x 16 x i8> %v 299} 300 301define <vscale x 16 x i8> @vsrl_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) { 302; CHECK-LABEL: vsrl_vv_nxv16i8_unmasked: 303; CHECK: # %bb.0: 304; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 305; CHECK-NEXT: vsrl.vv v8, v8, v10 306; CHECK-NEXT: ret 307 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl) 308 ret <vscale x 16 x i8> %v 309} 310 311define <vscale x 16 x i8> @vsrl_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) { 312; CHECK-LABEL: vsrl_vx_nxv16i8: 313; CHECK: # %bb.0: 314; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma 315; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 316; CHECK-NEXT: ret 317 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0 318 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer 319 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl) 320 ret <vscale x 16 x i8> %v 321} 322 323define <vscale x 16 x i8> @vsrl_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) { 324; CHECK-LABEL: vsrl_vx_nxv16i8_unmasked: 325; CHECK: # %bb.0: 326; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma 327; CHECK-NEXT: vsrl.vx v8, v8, a0 328; CHECK-NEXT: ret 329 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0 330 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer 331 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl) 332 ret <vscale x 16 x i8> %v 333} 334 335define <vscale x 16 x i8> @vsrl_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) { 336; CHECK-LABEL: vsrl_vi_nxv16i8: 337; CHECK: # %bb.0: 338; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 339; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 340; CHECK-NEXT: ret 341 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 4), <vscale x 16 x i1> %m, i32 %evl) 342 ret <vscale x 16 x i8> %v 343} 344 345define <vscale x 16 x i8> @vsrl_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) { 346; CHECK-LABEL: vsrl_vi_nxv16i8_unmasked: 347; CHECK: # %bb.0: 348; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 349; CHECK-NEXT: vsrl.vi v8, v8, 4 350; CHECK-NEXT: ret 351 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 4), <vscale x 16 x i1> splat (i1 true), i32 %evl) 352 ret <vscale x 16 x i8> %v 353} 354 355declare <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32) 356 357define <vscale x 32 x i8> @vsrl_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) { 358; CHECK-LABEL: vsrl_vv_nxv32i8: 359; CHECK: # %bb.0: 360; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 361; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t 362; CHECK-NEXT: ret 363 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl) 364 ret <vscale x 32 x i8> %v 365} 366 367define <vscale x 32 x i8> @vsrl_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) { 368; CHECK-LABEL: vsrl_vv_nxv32i8_unmasked: 369; CHECK: # %bb.0: 370; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 371; CHECK-NEXT: vsrl.vv v8, v8, v12 372; CHECK-NEXT: ret 373 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl) 374 ret <vscale x 32 x i8> %v 375} 376 377define <vscale x 32 x i8> @vsrl_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) { 378; CHECK-LABEL: vsrl_vx_nxv32i8: 379; CHECK: # %bb.0: 380; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma 381; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 382; CHECK-NEXT: ret 383 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0 384 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer 385 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl) 386 ret <vscale x 32 x i8> %v 387} 388 389define <vscale x 32 x i8> @vsrl_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) { 390; CHECK-LABEL: vsrl_vx_nxv32i8_unmasked: 391; CHECK: # %bb.0: 392; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma 393; CHECK-NEXT: vsrl.vx v8, v8, a0 394; CHECK-NEXT: ret 395 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0 396 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer 397 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl) 398 ret <vscale x 32 x i8> %v 399} 400 401define <vscale x 32 x i8> @vsrl_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) { 402; CHECK-LABEL: vsrl_vi_nxv32i8: 403; CHECK: # %bb.0: 404; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 405; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 406; CHECK-NEXT: ret 407 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 4), <vscale x 32 x i1> %m, i32 %evl) 408 ret <vscale x 32 x i8> %v 409} 410 411define <vscale x 32 x i8> @vsrl_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) { 412; CHECK-LABEL: vsrl_vi_nxv32i8_unmasked: 413; CHECK: # %bb.0: 414; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 415; CHECK-NEXT: vsrl.vi v8, v8, 4 416; CHECK-NEXT: ret 417 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 4), <vscale x 32 x i1> splat (i1 true), i32 %evl) 418 ret <vscale x 32 x i8> %v 419} 420 421declare <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32) 422 423define <vscale x 64 x i8> @vsrl_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) { 424; CHECK-LABEL: vsrl_vv_nxv64i8: 425; CHECK: # %bb.0: 426; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 427; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t 428; CHECK-NEXT: ret 429 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl) 430 ret <vscale x 64 x i8> %v 431} 432 433define <vscale x 64 x i8> @vsrl_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) { 434; CHECK-LABEL: vsrl_vv_nxv64i8_unmasked: 435; CHECK: # %bb.0: 436; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 437; CHECK-NEXT: vsrl.vv v8, v8, v16 438; CHECK-NEXT: ret 439 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl) 440 ret <vscale x 64 x i8> %v 441} 442 443define <vscale x 64 x i8> @vsrl_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) { 444; CHECK-LABEL: vsrl_vx_nxv64i8: 445; CHECK: # %bb.0: 446; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 447; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 448; CHECK-NEXT: ret 449 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0 450 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer 451 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl) 452 ret <vscale x 64 x i8> %v 453} 454 455define <vscale x 64 x i8> @vsrl_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) { 456; CHECK-LABEL: vsrl_vx_nxv64i8_unmasked: 457; CHECK: # %bb.0: 458; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 459; CHECK-NEXT: vsrl.vx v8, v8, a0 460; CHECK-NEXT: ret 461 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0 462 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer 463 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl) 464 ret <vscale x 64 x i8> %v 465} 466 467define <vscale x 64 x i8> @vsrl_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) { 468; CHECK-LABEL: vsrl_vi_nxv64i8: 469; CHECK: # %bb.0: 470; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 471; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 472; CHECK-NEXT: ret 473 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 4), <vscale x 64 x i1> %m, i32 %evl) 474 ret <vscale x 64 x i8> %v 475} 476 477define <vscale x 64 x i8> @vsrl_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) { 478; CHECK-LABEL: vsrl_vi_nxv64i8_unmasked: 479; CHECK: # %bb.0: 480; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 481; CHECK-NEXT: vsrl.vi v8, v8, 4 482; CHECK-NEXT: ret 483 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 4), <vscale x 64 x i1> splat (i1 true), i32 %evl) 484 ret <vscale x 64 x i8> %v 485} 486 487declare <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32) 488 489define <vscale x 1 x i16> @vsrl_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 490; CHECK-LABEL: vsrl_vv_nxv1i16: 491; CHECK: # %bb.0: 492; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 493; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t 494; CHECK-NEXT: ret 495 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl) 496 ret <vscale x 1 x i16> %v 497} 498 499define <vscale x 1 x i16> @vsrl_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) { 500; CHECK-LABEL: vsrl_vv_nxv1i16_unmasked: 501; CHECK: # %bb.0: 502; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 503; CHECK-NEXT: vsrl.vv v8, v8, v9 504; CHECK-NEXT: ret 505 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 506 ret <vscale x 1 x i16> %v 507} 508 509define <vscale x 1 x i16> @vsrl_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 510; CHECK-LABEL: vsrl_vx_nxv1i16: 511; CHECK: # %bb.0: 512; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 513; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 514; CHECK-NEXT: ret 515 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0 516 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer 517 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl) 518 ret <vscale x 1 x i16> %v 519} 520 521define <vscale x 1 x i16> @vsrl_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) { 522; CHECK-LABEL: vsrl_vx_nxv1i16_unmasked: 523; CHECK: # %bb.0: 524; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 525; CHECK-NEXT: vsrl.vx v8, v8, a0 526; CHECK-NEXT: ret 527 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0 528 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer 529 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 530 ret <vscale x 1 x i16> %v 531} 532 533define <vscale x 1 x i16> @vsrl_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) { 534; CHECK-LABEL: vsrl_vi_nxv1i16: 535; CHECK: # %bb.0: 536; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 537; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 538; CHECK-NEXT: ret 539 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 4), <vscale x 1 x i1> %m, i32 %evl) 540 ret <vscale x 1 x i16> %v 541} 542 543define <vscale x 1 x i16> @vsrl_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) { 544; CHECK-LABEL: vsrl_vi_nxv1i16_unmasked: 545; CHECK: # %bb.0: 546; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 547; CHECK-NEXT: vsrl.vi v8, v8, 4 548; CHECK-NEXT: ret 549 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 4), <vscale x 1 x i1> splat (i1 true), i32 %evl) 550 ret <vscale x 1 x i16> %v 551} 552 553declare <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32) 554 555define <vscale x 2 x i16> @vsrl_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) { 556; CHECK-LABEL: vsrl_vv_nxv2i16: 557; CHECK: # %bb.0: 558; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 559; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t 560; CHECK-NEXT: ret 561 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl) 562 ret <vscale x 2 x i16> %v 563} 564 565define <vscale x 2 x i16> @vsrl_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) { 566; CHECK-LABEL: vsrl_vv_nxv2i16_unmasked: 567; CHECK: # %bb.0: 568; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 569; CHECK-NEXT: vsrl.vv v8, v8, v9 570; CHECK-NEXT: ret 571 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 572 ret <vscale x 2 x i16> %v 573} 574 575define <vscale x 2 x i16> @vsrl_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) { 576; CHECK-LABEL: vsrl_vx_nxv2i16: 577; CHECK: # %bb.0: 578; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 579; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 580; CHECK-NEXT: ret 581 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0 582 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer 583 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl) 584 ret <vscale x 2 x i16> %v 585} 586 587define <vscale x 2 x i16> @vsrl_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) { 588; CHECK-LABEL: vsrl_vx_nxv2i16_unmasked: 589; CHECK: # %bb.0: 590; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 591; CHECK-NEXT: vsrl.vx v8, v8, a0 592; CHECK-NEXT: ret 593 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0 594 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer 595 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 596 ret <vscale x 2 x i16> %v 597} 598 599define <vscale x 2 x i16> @vsrl_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 600; CHECK-LABEL: vsrl_vi_nxv2i16: 601; CHECK: # %bb.0: 602; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 603; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 604; CHECK-NEXT: ret 605 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 4), <vscale x 2 x i1> %m, i32 %evl) 606 ret <vscale x 2 x i16> %v 607} 608 609define <vscale x 2 x i16> @vsrl_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) { 610; CHECK-LABEL: vsrl_vi_nxv2i16_unmasked: 611; CHECK: # %bb.0: 612; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 613; CHECK-NEXT: vsrl.vi v8, v8, 4 614; CHECK-NEXT: ret 615 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 4), <vscale x 2 x i1> splat (i1 true), i32 %evl) 616 ret <vscale x 2 x i16> %v 617} 618 619declare <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32) 620 621define <vscale x 4 x i16> @vsrl_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) { 622; CHECK-LABEL: vsrl_vv_nxv4i16: 623; CHECK: # %bb.0: 624; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 625; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t 626; CHECK-NEXT: ret 627 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl) 628 ret <vscale x 4 x i16> %v 629} 630 631define <vscale x 4 x i16> @vsrl_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) { 632; CHECK-LABEL: vsrl_vv_nxv4i16_unmasked: 633; CHECK: # %bb.0: 634; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 635; CHECK-NEXT: vsrl.vv v8, v8, v9 636; CHECK-NEXT: ret 637 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 638 ret <vscale x 4 x i16> %v 639} 640 641define <vscale x 4 x i16> @vsrl_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) { 642; CHECK-LABEL: vsrl_vx_nxv4i16: 643; CHECK: # %bb.0: 644; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 645; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 646; CHECK-NEXT: ret 647 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0 648 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer 649 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl) 650 ret <vscale x 4 x i16> %v 651} 652 653define <vscale x 4 x i16> @vsrl_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) { 654; CHECK-LABEL: vsrl_vx_nxv4i16_unmasked: 655; CHECK: # %bb.0: 656; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 657; CHECK-NEXT: vsrl.vx v8, v8, a0 658; CHECK-NEXT: ret 659 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0 660 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer 661 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 662 ret <vscale x 4 x i16> %v 663} 664 665define <vscale x 4 x i16> @vsrl_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) { 666; CHECK-LABEL: vsrl_vi_nxv4i16: 667; CHECK: # %bb.0: 668; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 669; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 670; CHECK-NEXT: ret 671 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 4), <vscale x 4 x i1> %m, i32 %evl) 672 ret <vscale x 4 x i16> %v 673} 674 675define <vscale x 4 x i16> @vsrl_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) { 676; CHECK-LABEL: vsrl_vi_nxv4i16_unmasked: 677; CHECK: # %bb.0: 678; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 679; CHECK-NEXT: vsrl.vi v8, v8, 4 680; CHECK-NEXT: ret 681 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 4), <vscale x 4 x i1> splat (i1 true), i32 %evl) 682 ret <vscale x 4 x i16> %v 683} 684 685declare <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32) 686 687define <vscale x 8 x i16> @vsrl_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 688; CHECK-LABEL: vsrl_vv_nxv8i16: 689; CHECK: # %bb.0: 690; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 691; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t 692; CHECK-NEXT: ret 693 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl) 694 ret <vscale x 8 x i16> %v 695} 696 697define <vscale x 8 x i16> @vsrl_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) { 698; CHECK-LABEL: vsrl_vv_nxv8i16_unmasked: 699; CHECK: # %bb.0: 700; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 701; CHECK-NEXT: vsrl.vv v8, v8, v10 702; CHECK-NEXT: ret 703 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 704 ret <vscale x 8 x i16> %v 705} 706 707define <vscale x 8 x i16> @vsrl_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 708; CHECK-LABEL: vsrl_vx_nxv8i16: 709; CHECK: # %bb.0: 710; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 711; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 712; CHECK-NEXT: ret 713 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 714 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 715 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl) 716 ret <vscale x 8 x i16> %v 717} 718 719define <vscale x 8 x i16> @vsrl_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) { 720; CHECK-LABEL: vsrl_vx_nxv8i16_unmasked: 721; CHECK: # %bb.0: 722; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 723; CHECK-NEXT: vsrl.vx v8, v8, a0 724; CHECK-NEXT: ret 725 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 726 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 727 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 728 ret <vscale x 8 x i16> %v 729} 730 731define <vscale x 8 x i16> @vsrl_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) { 732; CHECK-LABEL: vsrl_vi_nxv8i16: 733; CHECK: # %bb.0: 734; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 735; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 736; CHECK-NEXT: ret 737 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 4), <vscale x 8 x i1> %m, i32 %evl) 738 ret <vscale x 8 x i16> %v 739} 740 741define <vscale x 8 x i16> @vsrl_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) { 742; CHECK-LABEL: vsrl_vi_nxv8i16_unmasked: 743; CHECK: # %bb.0: 744; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 745; CHECK-NEXT: vsrl.vi v8, v8, 4 746; CHECK-NEXT: ret 747 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 4), <vscale x 8 x i1> splat (i1 true), i32 %evl) 748 ret <vscale x 8 x i16> %v 749} 750 751declare <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32) 752 753define <vscale x 16 x i16> @vsrl_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) { 754; CHECK-LABEL: vsrl_vv_nxv16i16: 755; CHECK: # %bb.0: 756; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 757; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t 758; CHECK-NEXT: ret 759 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl) 760 ret <vscale x 16 x i16> %v 761} 762 763define <vscale x 16 x i16> @vsrl_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) { 764; CHECK-LABEL: vsrl_vv_nxv16i16_unmasked: 765; CHECK: # %bb.0: 766; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 767; CHECK-NEXT: vsrl.vv v8, v8, v12 768; CHECK-NEXT: ret 769 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl) 770 ret <vscale x 16 x i16> %v 771} 772 773define <vscale x 16 x i16> @vsrl_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) { 774; CHECK-LABEL: vsrl_vx_nxv16i16: 775; CHECK: # %bb.0: 776; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma 777; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 778; CHECK-NEXT: ret 779 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0 780 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer 781 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl) 782 ret <vscale x 16 x i16> %v 783} 784 785define <vscale x 16 x i16> @vsrl_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) { 786; CHECK-LABEL: vsrl_vx_nxv16i16_unmasked: 787; CHECK: # %bb.0: 788; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma 789; CHECK-NEXT: vsrl.vx v8, v8, a0 790; CHECK-NEXT: ret 791 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0 792 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer 793 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl) 794 ret <vscale x 16 x i16> %v 795} 796 797define <vscale x 16 x i16> @vsrl_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) { 798; CHECK-LABEL: vsrl_vi_nxv16i16: 799; CHECK: # %bb.0: 800; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 801; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 802; CHECK-NEXT: ret 803 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 4), <vscale x 16 x i1> %m, i32 %evl) 804 ret <vscale x 16 x i16> %v 805} 806 807define <vscale x 16 x i16> @vsrl_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) { 808; CHECK-LABEL: vsrl_vi_nxv16i16_unmasked: 809; CHECK: # %bb.0: 810; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 811; CHECK-NEXT: vsrl.vi v8, v8, 4 812; CHECK-NEXT: ret 813 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 4), <vscale x 16 x i1> splat (i1 true), i32 %evl) 814 ret <vscale x 16 x i16> %v 815} 816 817declare <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32) 818 819define <vscale x 32 x i16> @vsrl_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) { 820; CHECK-LABEL: vsrl_vv_nxv32i16: 821; CHECK: # %bb.0: 822; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 823; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t 824; CHECK-NEXT: ret 825 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl) 826 ret <vscale x 32 x i16> %v 827} 828 829define <vscale x 32 x i16> @vsrl_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) { 830; CHECK-LABEL: vsrl_vv_nxv32i16_unmasked: 831; CHECK: # %bb.0: 832; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 833; CHECK-NEXT: vsrl.vv v8, v8, v16 834; CHECK-NEXT: ret 835 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl) 836 ret <vscale x 32 x i16> %v 837} 838 839define <vscale x 32 x i16> @vsrl_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) { 840; CHECK-LABEL: vsrl_vx_nxv32i16: 841; CHECK: # %bb.0: 842; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 843; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 844; CHECK-NEXT: ret 845 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0 846 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer 847 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl) 848 ret <vscale x 32 x i16> %v 849} 850 851define <vscale x 32 x i16> @vsrl_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) { 852; CHECK-LABEL: vsrl_vx_nxv32i16_unmasked: 853; CHECK: # %bb.0: 854; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 855; CHECK-NEXT: vsrl.vx v8, v8, a0 856; CHECK-NEXT: ret 857 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0 858 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer 859 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl) 860 ret <vscale x 32 x i16> %v 861} 862 863define <vscale x 32 x i16> @vsrl_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) { 864; CHECK-LABEL: vsrl_vi_nxv32i16: 865; CHECK: # %bb.0: 866; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 867; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 868; CHECK-NEXT: ret 869 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 4), <vscale x 32 x i1> %m, i32 %evl) 870 ret <vscale x 32 x i16> %v 871} 872 873define <vscale x 32 x i16> @vsrl_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) { 874; CHECK-LABEL: vsrl_vi_nxv32i16_unmasked: 875; CHECK: # %bb.0: 876; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 877; CHECK-NEXT: vsrl.vi v8, v8, 4 878; CHECK-NEXT: ret 879 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 4), <vscale x 32 x i1> splat (i1 true), i32 %evl) 880 ret <vscale x 32 x i16> %v 881} 882 883declare <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32) 884 885define <vscale x 1 x i32> @vsrl_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 886; CHECK-LABEL: vsrl_vv_nxv1i32: 887; CHECK: # %bb.0: 888; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 889; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t 890; CHECK-NEXT: ret 891 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl) 892 ret <vscale x 1 x i32> %v 893} 894 895define <vscale x 1 x i32> @vsrl_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) { 896; CHECK-LABEL: vsrl_vv_nxv1i32_unmasked: 897; CHECK: # %bb.0: 898; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 899; CHECK-NEXT: vsrl.vv v8, v8, v9 900; CHECK-NEXT: ret 901 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 902 ret <vscale x 1 x i32> %v 903} 904 905define <vscale x 1 x i32> @vsrl_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 906; CHECK-LABEL: vsrl_vx_nxv1i32: 907; CHECK: # %bb.0: 908; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 909; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 910; CHECK-NEXT: ret 911 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0 912 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer 913 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl) 914 ret <vscale x 1 x i32> %v 915} 916 917define <vscale x 1 x i32> @vsrl_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) { 918; CHECK-LABEL: vsrl_vx_nxv1i32_unmasked: 919; CHECK: # %bb.0: 920; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 921; CHECK-NEXT: vsrl.vx v8, v8, a0 922; CHECK-NEXT: ret 923 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0 924 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer 925 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 926 ret <vscale x 1 x i32> %v 927} 928 929define <vscale x 1 x i32> @vsrl_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) { 930; CHECK-LABEL: vsrl_vi_nxv1i32: 931; CHECK: # %bb.0: 932; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 933; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 934; CHECK-NEXT: ret 935 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 4), <vscale x 1 x i1> %m, i32 %evl) 936 ret <vscale x 1 x i32> %v 937} 938 939define <vscale x 1 x i32> @vsrl_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) { 940; CHECK-LABEL: vsrl_vi_nxv1i32_unmasked: 941; CHECK: # %bb.0: 942; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 943; CHECK-NEXT: vsrl.vi v8, v8, 4 944; CHECK-NEXT: ret 945 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 4), <vscale x 1 x i1> splat (i1 true), i32 %evl) 946 ret <vscale x 1 x i32> %v 947} 948 949declare <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32) 950 951define <vscale x 2 x i32> @vsrl_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) { 952; CHECK-LABEL: vsrl_vv_nxv2i32: 953; CHECK: # %bb.0: 954; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 955; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t 956; CHECK-NEXT: ret 957 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl) 958 ret <vscale x 2 x i32> %v 959} 960 961define <vscale x 2 x i32> @vsrl_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) { 962; CHECK-LABEL: vsrl_vv_nxv2i32_unmasked: 963; CHECK: # %bb.0: 964; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 965; CHECK-NEXT: vsrl.vv v8, v8, v9 966; CHECK-NEXT: ret 967 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 968 ret <vscale x 2 x i32> %v 969} 970 971define <vscale x 2 x i32> @vsrl_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) { 972; CHECK-LABEL: vsrl_vx_nxv2i32: 973; CHECK: # %bb.0: 974; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 975; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 976; CHECK-NEXT: ret 977 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0 978 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer 979 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl) 980 ret <vscale x 2 x i32> %v 981} 982 983define <vscale x 2 x i32> @vsrl_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) { 984; CHECK-LABEL: vsrl_vx_nxv2i32_unmasked: 985; CHECK: # %bb.0: 986; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 987; CHECK-NEXT: vsrl.vx v8, v8, a0 988; CHECK-NEXT: ret 989 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0 990 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer 991 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 992 ret <vscale x 2 x i32> %v 993} 994 995define <vscale x 2 x i32> @vsrl_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 996; CHECK-LABEL: vsrl_vi_nxv2i32: 997; CHECK: # %bb.0: 998; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 999; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 1000; CHECK-NEXT: ret 1001 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 4), <vscale x 2 x i1> %m, i32 %evl) 1002 ret <vscale x 2 x i32> %v 1003} 1004 1005define <vscale x 2 x i32> @vsrl_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) { 1006; CHECK-LABEL: vsrl_vi_nxv2i32_unmasked: 1007; CHECK: # %bb.0: 1008; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 1009; CHECK-NEXT: vsrl.vi v8, v8, 4 1010; CHECK-NEXT: ret 1011 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 4), <vscale x 2 x i1> splat (i1 true), i32 %evl) 1012 ret <vscale x 2 x i32> %v 1013} 1014 1015declare <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32) 1016 1017define <vscale x 4 x i32> @vsrl_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) { 1018; CHECK-LABEL: vsrl_vv_nxv4i32: 1019; CHECK: # %bb.0: 1020; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1021; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t 1022; CHECK-NEXT: ret 1023 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl) 1024 ret <vscale x 4 x i32> %v 1025} 1026 1027define <vscale x 4 x i32> @vsrl_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) { 1028; CHECK-LABEL: vsrl_vv_nxv4i32_unmasked: 1029; CHECK: # %bb.0: 1030; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1031; CHECK-NEXT: vsrl.vv v8, v8, v10 1032; CHECK-NEXT: ret 1033 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 1034 ret <vscale x 4 x i32> %v 1035} 1036 1037define <vscale x 4 x i32> @vsrl_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) { 1038; CHECK-LABEL: vsrl_vx_nxv4i32: 1039; CHECK: # %bb.0: 1040; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1041; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 1042; CHECK-NEXT: ret 1043 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0 1044 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer 1045 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl) 1046 ret <vscale x 4 x i32> %v 1047} 1048 1049define <vscale x 4 x i32> @vsrl_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) { 1050; CHECK-LABEL: vsrl_vx_nxv4i32_unmasked: 1051; CHECK: # %bb.0: 1052; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1053; CHECK-NEXT: vsrl.vx v8, v8, a0 1054; CHECK-NEXT: ret 1055 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0 1056 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer 1057 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 1058 ret <vscale x 4 x i32> %v 1059} 1060 1061define <vscale x 4 x i32> @vsrl_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) { 1062; CHECK-LABEL: vsrl_vi_nxv4i32: 1063; CHECK: # %bb.0: 1064; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1065; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 1066; CHECK-NEXT: ret 1067 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 4), <vscale x 4 x i1> %m, i32 %evl) 1068 ret <vscale x 4 x i32> %v 1069} 1070 1071define <vscale x 4 x i32> @vsrl_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) { 1072; CHECK-LABEL: vsrl_vi_nxv4i32_unmasked: 1073; CHECK: # %bb.0: 1074; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1075; CHECK-NEXT: vsrl.vi v8, v8, 4 1076; CHECK-NEXT: ret 1077 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 4), <vscale x 4 x i1> splat (i1 true), i32 %evl) 1078 ret <vscale x 4 x i32> %v 1079} 1080 1081declare <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32) 1082 1083define <vscale x 8 x i32> @vsrl_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1084; CHECK-LABEL: vsrl_vv_nxv8i32: 1085; CHECK: # %bb.0: 1086; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 1087; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t 1088; CHECK-NEXT: ret 1089 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl) 1090 ret <vscale x 8 x i32> %v 1091} 1092 1093define <vscale x 8 x i32> @vsrl_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) { 1094; CHECK-LABEL: vsrl_vv_nxv8i32_unmasked: 1095; CHECK: # %bb.0: 1096; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 1097; CHECK-NEXT: vsrl.vv v8, v8, v12 1098; CHECK-NEXT: ret 1099 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 1100 ret <vscale x 8 x i32> %v 1101} 1102 1103define <vscale x 8 x i32> @vsrl_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1104; CHECK-LABEL: vsrl_vx_nxv8i32: 1105; CHECK: # %bb.0: 1106; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma 1107; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 1108; CHECK-NEXT: ret 1109 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1110 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1111 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl) 1112 ret <vscale x 8 x i32> %v 1113} 1114 1115define <vscale x 8 x i32> @vsrl_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) { 1116; CHECK-LABEL: vsrl_vx_nxv8i32_unmasked: 1117; CHECK: # %bb.0: 1118; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma 1119; CHECK-NEXT: vsrl.vx v8, v8, a0 1120; CHECK-NEXT: ret 1121 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1122 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1123 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 1124 ret <vscale x 8 x i32> %v 1125} 1126 1127define <vscale x 8 x i32> @vsrl_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1128; CHECK-LABEL: vsrl_vi_nxv8i32: 1129; CHECK: # %bb.0: 1130; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 1131; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 1132; CHECK-NEXT: ret 1133 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 4), <vscale x 8 x i1> %m, i32 %evl) 1134 ret <vscale x 8 x i32> %v 1135} 1136 1137define <vscale x 8 x i32> @vsrl_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) { 1138; CHECK-LABEL: vsrl_vi_nxv8i32_unmasked: 1139; CHECK: # %bb.0: 1140; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 1141; CHECK-NEXT: vsrl.vi v8, v8, 4 1142; CHECK-NEXT: ret 1143 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 4), <vscale x 8 x i1> splat (i1 true), i32 %evl) 1144 ret <vscale x 8 x i32> %v 1145} 1146 1147declare <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32) 1148 1149define <vscale x 16 x i32> @vsrl_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) { 1150; CHECK-LABEL: vsrl_vv_nxv16i32: 1151; CHECK: # %bb.0: 1152; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1153; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t 1154; CHECK-NEXT: ret 1155 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl) 1156 ret <vscale x 16 x i32> %v 1157} 1158 1159define <vscale x 16 x i32> @vsrl_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) { 1160; CHECK-LABEL: vsrl_vv_nxv16i32_unmasked: 1161; CHECK: # %bb.0: 1162; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1163; CHECK-NEXT: vsrl.vv v8, v8, v16 1164; CHECK-NEXT: ret 1165 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl) 1166 ret <vscale x 16 x i32> %v 1167} 1168 1169define <vscale x 16 x i32> @vsrl_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) { 1170; CHECK-LABEL: vsrl_vx_nxv16i32: 1171; CHECK: # %bb.0: 1172; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 1173; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t 1174; CHECK-NEXT: ret 1175 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0 1176 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer 1177 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl) 1178 ret <vscale x 16 x i32> %v 1179} 1180 1181define <vscale x 16 x i32> @vsrl_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) { 1182; CHECK-LABEL: vsrl_vx_nxv16i32_unmasked: 1183; CHECK: # %bb.0: 1184; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 1185; CHECK-NEXT: vsrl.vx v8, v8, a0 1186; CHECK-NEXT: ret 1187 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0 1188 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer 1189 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl) 1190 ret <vscale x 16 x i32> %v 1191} 1192 1193define <vscale x 16 x i32> @vsrl_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) { 1194; CHECK-LABEL: vsrl_vi_nxv16i32: 1195; CHECK: # %bb.0: 1196; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1197; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 1198; CHECK-NEXT: ret 1199 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 4), <vscale x 16 x i1> %m, i32 %evl) 1200 ret <vscale x 16 x i32> %v 1201} 1202 1203define <vscale x 16 x i32> @vsrl_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) { 1204; CHECK-LABEL: vsrl_vi_nxv16i32_unmasked: 1205; CHECK: # %bb.0: 1206; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1207; CHECK-NEXT: vsrl.vi v8, v8, 4 1208; CHECK-NEXT: ret 1209 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 4), <vscale x 16 x i1> splat (i1 true), i32 %evl) 1210 ret <vscale x 16 x i32> %v 1211} 1212 1213declare <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32) 1214 1215define <vscale x 1 x i64> @vsrl_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1216; CHECK-LABEL: vsrl_vv_nxv1i64: 1217; CHECK: # %bb.0: 1218; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1219; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t 1220; CHECK-NEXT: ret 1221 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl) 1222 ret <vscale x 1 x i64> %v 1223} 1224 1225define <vscale x 1 x i64> @vsrl_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) { 1226; CHECK-LABEL: vsrl_vv_nxv1i64_unmasked: 1227; CHECK: # %bb.0: 1228; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1229; CHECK-NEXT: vsrl.vv v8, v8, v9 1230; CHECK-NEXT: ret 1231 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1232 ret <vscale x 1 x i64> %v 1233} 1234 1235define <vscale x 1 x i64> @vsrl_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1236; RV32-LABEL: vsrl_vx_nxv1i64: 1237; RV32: # %bb.0: 1238; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma 1239; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t 1240; RV32-NEXT: ret 1241; 1242; RV64-LABEL: vsrl_vx_nxv1i64: 1243; RV64: # %bb.0: 1244; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma 1245; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t 1246; RV64-NEXT: ret 1247 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0 1248 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 1249 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl) 1250 ret <vscale x 1 x i64> %v 1251} 1252 1253define <vscale x 1 x i64> @vsrl_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) { 1254; RV32-LABEL: vsrl_vx_nxv1i64_unmasked: 1255; RV32: # %bb.0: 1256; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma 1257; RV32-NEXT: vsrl.vx v8, v8, a0 1258; RV32-NEXT: ret 1259; 1260; RV64-LABEL: vsrl_vx_nxv1i64_unmasked: 1261; RV64: # %bb.0: 1262; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma 1263; RV64-NEXT: vsrl.vx v8, v8, a0 1264; RV64-NEXT: ret 1265 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0 1266 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 1267 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1268 ret <vscale x 1 x i64> %v 1269} 1270 1271define <vscale x 1 x i64> @vsrl_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1272; CHECK-LABEL: vsrl_vi_nxv1i64: 1273; CHECK: # %bb.0: 1274; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1275; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 1276; CHECK-NEXT: ret 1277 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 4), <vscale x 1 x i1> %m, i32 %evl) 1278 ret <vscale x 1 x i64> %v 1279} 1280 1281define <vscale x 1 x i64> @vsrl_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) { 1282; CHECK-LABEL: vsrl_vi_nxv1i64_unmasked: 1283; CHECK: # %bb.0: 1284; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1285; CHECK-NEXT: vsrl.vi v8, v8, 4 1286; CHECK-NEXT: ret 1287 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 4), <vscale x 1 x i1> splat (i1 true), i32 %evl) 1288 ret <vscale x 1 x i64> %v 1289} 1290 1291declare <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32) 1292 1293define <vscale x 2 x i64> @vsrl_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1294; CHECK-LABEL: vsrl_vv_nxv2i64: 1295; CHECK: # %bb.0: 1296; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1297; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t 1298; CHECK-NEXT: ret 1299 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl) 1300 ret <vscale x 2 x i64> %v 1301} 1302 1303define <vscale x 2 x i64> @vsrl_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) { 1304; CHECK-LABEL: vsrl_vv_nxv2i64_unmasked: 1305; CHECK: # %bb.0: 1306; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1307; CHECK-NEXT: vsrl.vv v8, v8, v10 1308; CHECK-NEXT: ret 1309 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1310 ret <vscale x 2 x i64> %v 1311} 1312 1313define <vscale x 2 x i64> @vsrl_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1314; RV32-LABEL: vsrl_vx_nxv2i64: 1315; RV32: # %bb.0: 1316; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma 1317; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t 1318; RV32-NEXT: ret 1319; 1320; RV64-LABEL: vsrl_vx_nxv2i64: 1321; RV64: # %bb.0: 1322; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma 1323; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t 1324; RV64-NEXT: ret 1325 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0 1326 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 1327 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl) 1328 ret <vscale x 2 x i64> %v 1329} 1330 1331define <vscale x 2 x i64> @vsrl_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) { 1332; RV32-LABEL: vsrl_vx_nxv2i64_unmasked: 1333; RV32: # %bb.0: 1334; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma 1335; RV32-NEXT: vsrl.vx v8, v8, a0 1336; RV32-NEXT: ret 1337; 1338; RV64-LABEL: vsrl_vx_nxv2i64_unmasked: 1339; RV64: # %bb.0: 1340; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma 1341; RV64-NEXT: vsrl.vx v8, v8, a0 1342; RV64-NEXT: ret 1343 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0 1344 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 1345 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1346 ret <vscale x 2 x i64> %v 1347} 1348 1349define <vscale x 2 x i64> @vsrl_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1350; CHECK-LABEL: vsrl_vi_nxv2i64: 1351; CHECK: # %bb.0: 1352; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1353; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 1354; CHECK-NEXT: ret 1355 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 4), <vscale x 2 x i1> %m, i32 %evl) 1356 ret <vscale x 2 x i64> %v 1357} 1358 1359define <vscale x 2 x i64> @vsrl_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) { 1360; CHECK-LABEL: vsrl_vi_nxv2i64_unmasked: 1361; CHECK: # %bb.0: 1362; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1363; CHECK-NEXT: vsrl.vi v8, v8, 4 1364; CHECK-NEXT: ret 1365 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 4), <vscale x 2 x i1> splat (i1 true), i32 %evl) 1366 ret <vscale x 2 x i64> %v 1367} 1368 1369declare <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32) 1370 1371define <vscale x 4 x i64> @vsrl_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) { 1372; CHECK-LABEL: vsrl_vv_nxv4i64: 1373; CHECK: # %bb.0: 1374; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1375; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t 1376; CHECK-NEXT: ret 1377 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl) 1378 ret <vscale x 4 x i64> %v 1379} 1380 1381define <vscale x 4 x i64> @vsrl_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) { 1382; CHECK-LABEL: vsrl_vv_nxv4i64_unmasked: 1383; CHECK: # %bb.0: 1384; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1385; CHECK-NEXT: vsrl.vv v8, v8, v12 1386; CHECK-NEXT: ret 1387 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 1388 ret <vscale x 4 x i64> %v 1389} 1390 1391define <vscale x 4 x i64> @vsrl_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) { 1392; RV32-LABEL: vsrl_vx_nxv4i64: 1393; RV32: # %bb.0: 1394; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1395; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t 1396; RV32-NEXT: ret 1397; 1398; RV64-LABEL: vsrl_vx_nxv4i64: 1399; RV64: # %bb.0: 1400; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1401; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t 1402; RV64-NEXT: ret 1403 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0 1404 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 1405 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl) 1406 ret <vscale x 4 x i64> %v 1407} 1408 1409define <vscale x 4 x i64> @vsrl_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) { 1410; RV32-LABEL: vsrl_vx_nxv4i64_unmasked: 1411; RV32: # %bb.0: 1412; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1413; RV32-NEXT: vsrl.vx v8, v8, a0 1414; RV32-NEXT: ret 1415; 1416; RV64-LABEL: vsrl_vx_nxv4i64_unmasked: 1417; RV64: # %bb.0: 1418; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1419; RV64-NEXT: vsrl.vx v8, v8, a0 1420; RV64-NEXT: ret 1421 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0 1422 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 1423 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 1424 ret <vscale x 4 x i64> %v 1425} 1426 1427define <vscale x 4 x i64> @vsrl_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) { 1428; CHECK-LABEL: vsrl_vi_nxv4i64: 1429; CHECK: # %bb.0: 1430; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1431; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 1432; CHECK-NEXT: ret 1433 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 4), <vscale x 4 x i1> %m, i32 %evl) 1434 ret <vscale x 4 x i64> %v 1435} 1436 1437define <vscale x 4 x i64> @vsrl_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) { 1438; CHECK-LABEL: vsrl_vi_nxv4i64_unmasked: 1439; CHECK: # %bb.0: 1440; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1441; CHECK-NEXT: vsrl.vi v8, v8, 4 1442; CHECK-NEXT: ret 1443 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 4), <vscale x 4 x i1> splat (i1 true), i32 %evl) 1444 ret <vscale x 4 x i64> %v 1445} 1446 1447declare <vscale x 5 x i64> @llvm.vp.lshr.nxv5i64(<vscale x 5 x i64>, <vscale x 5 x i64>, <vscale x 5 x i1>, i32) 1448 1449define <vscale x 5 x i64> @vsrl_vv_nxv5i64(<vscale x 5 x i64> %va, <vscale x 5 x i64> %b, <vscale x 5 x i1> %m, i32 zeroext %evl) { 1450; CHECK-LABEL: vsrl_vv_nxv5i64: 1451; CHECK: # %bb.0: 1452; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1453; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t 1454; CHECK-NEXT: ret 1455 %v = call <vscale x 5 x i64> @llvm.vp.lshr.nxv5i64(<vscale x 5 x i64> %va, <vscale x 5 x i64> %b, <vscale x 5 x i1> %m, i32 %evl) 1456 ret <vscale x 5 x i64> %v 1457} 1458 1459declare <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32) 1460 1461define <vscale x 8 x i64> @vsrl_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1462; CHECK-LABEL: vsrl_vv_nxv8i64: 1463; CHECK: # %bb.0: 1464; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1465; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t 1466; CHECK-NEXT: ret 1467 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl) 1468 ret <vscale x 8 x i64> %v 1469} 1470 1471define <vscale x 8 x i64> @vsrl_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) { 1472; CHECK-LABEL: vsrl_vv_nxv8i64_unmasked: 1473; CHECK: # %bb.0: 1474; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1475; CHECK-NEXT: vsrl.vv v8, v8, v16 1476; CHECK-NEXT: ret 1477 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 1478 ret <vscale x 8 x i64> %v 1479} 1480 1481define <vscale x 8 x i64> @vsrl_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1482; RV32-LABEL: vsrl_vx_nxv8i64: 1483; RV32: # %bb.0: 1484; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma 1485; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t 1486; RV32-NEXT: ret 1487; 1488; RV64-LABEL: vsrl_vx_nxv8i64: 1489; RV64: # %bb.0: 1490; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1491; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t 1492; RV64-NEXT: ret 1493 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 1494 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 1495 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl) 1496 ret <vscale x 8 x i64> %v 1497} 1498 1499define <vscale x 8 x i64> @vsrl_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) { 1500; RV32-LABEL: vsrl_vx_nxv8i64_unmasked: 1501; RV32: # %bb.0: 1502; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma 1503; RV32-NEXT: vsrl.vx v8, v8, a0 1504; RV32-NEXT: ret 1505; 1506; RV64-LABEL: vsrl_vx_nxv8i64_unmasked: 1507; RV64: # %bb.0: 1508; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1509; RV64-NEXT: vsrl.vx v8, v8, a0 1510; RV64-NEXT: ret 1511 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 1512 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 1513 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 1514 ret <vscale x 8 x i64> %v 1515} 1516 1517define <vscale x 8 x i64> @vsrl_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1518; CHECK-LABEL: vsrl_vi_nxv8i64: 1519; CHECK: # %bb.0: 1520; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1521; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t 1522; CHECK-NEXT: ret 1523 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 4), <vscale x 8 x i1> %m, i32 %evl) 1524 ret <vscale x 8 x i64> %v 1525} 1526 1527define <vscale x 8 x i64> @vsrl_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) { 1528; CHECK-LABEL: vsrl_vi_nxv8i64_unmasked: 1529; CHECK: # %bb.0: 1530; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1531; CHECK-NEXT: vsrl.vi v8, v8, 4 1532; CHECK-NEXT: ret 1533 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 4), <vscale x 8 x i1> splat (i1 true), i32 %evl) 1534 ret <vscale x 8 x i64> %v 1535} 1536