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