1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s 3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s 4 5define <vscale x 1 x i8> @vsrl_vx_nxv1i8(<vscale x 1 x i8> %va, i8 signext %b) { 6; CHECK-LABEL: vsrl_vx_nxv1i8: 7; CHECK: # %bb.0: 8; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu 9; CHECK-NEXT: vsrl.vx v8, v8, a0 10; CHECK-NEXT: ret 11 %head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0 12 %splat = shufflevector <vscale x 1 x i8> %head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer 13 %vc = lshr <vscale x 1 x i8> %va, %splat 14 ret <vscale x 1 x i8> %vc 15} 16 17define <vscale x 1 x i8> @vsrl_vx_nxv1i8_0(<vscale x 1 x i8> %va) { 18; CHECK-LABEL: vsrl_vx_nxv1i8_0: 19; CHECK: # %bb.0: 20; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu 21; CHECK-NEXT: vsrl.vi v8, v8, 6 22; CHECK-NEXT: ret 23 %head = insertelement <vscale x 1 x i8> poison, i8 6, i32 0 24 %splat = shufflevector <vscale x 1 x i8> %head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer 25 %vc = lshr <vscale x 1 x i8> %va, %splat 26 ret <vscale x 1 x i8> %vc 27} 28 29define <vscale x 2 x i8> @vsrl_vx_nxv2i8(<vscale x 2 x i8> %va, i8 signext %b) { 30; CHECK-LABEL: vsrl_vx_nxv2i8: 31; CHECK: # %bb.0: 32; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu 33; CHECK-NEXT: vsrl.vx v8, v8, a0 34; CHECK-NEXT: ret 35 %head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0 36 %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer 37 %vc = lshr <vscale x 2 x i8> %va, %splat 38 ret <vscale x 2 x i8> %vc 39} 40 41define <vscale x 2 x i8> @vsrl_vx_nxv2i8_0(<vscale x 2 x i8> %va) { 42; CHECK-LABEL: vsrl_vx_nxv2i8_0: 43; CHECK: # %bb.0: 44; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu 45; CHECK-NEXT: vsrl.vi v8, v8, 6 46; CHECK-NEXT: ret 47 %head = insertelement <vscale x 2 x i8> poison, i8 6, i32 0 48 %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer 49 %vc = lshr <vscale x 2 x i8> %va, %splat 50 ret <vscale x 2 x i8> %vc 51} 52 53define <vscale x 4 x i8> @vsrl_vx_nxv4i8(<vscale x 4 x i8> %va, i8 signext %b) { 54; CHECK-LABEL: vsrl_vx_nxv4i8: 55; CHECK: # %bb.0: 56; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu 57; CHECK-NEXT: vsrl.vx v8, v8, a0 58; CHECK-NEXT: ret 59 %head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0 60 %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer 61 %vc = lshr <vscale x 4 x i8> %va, %splat 62 ret <vscale x 4 x i8> %vc 63} 64 65define <vscale x 4 x i8> @vsrl_vx_nxv4i8_0(<vscale x 4 x i8> %va) { 66; CHECK-LABEL: vsrl_vx_nxv4i8_0: 67; CHECK: # %bb.0: 68; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu 69; CHECK-NEXT: vsrl.vi v8, v8, 6 70; CHECK-NEXT: ret 71 %head = insertelement <vscale x 4 x i8> poison, i8 6, i32 0 72 %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer 73 %vc = lshr <vscale x 4 x i8> %va, %splat 74 ret <vscale x 4 x i8> %vc 75} 76 77define <vscale x 8 x i8> @vsrl_vx_nxv8i8(<vscale x 8 x i8> %va, i8 signext %b) { 78; CHECK-LABEL: vsrl_vx_nxv8i8: 79; CHECK: # %bb.0: 80; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu 81; CHECK-NEXT: vsrl.vx v8, v8, a0 82; CHECK-NEXT: ret 83 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 84 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 85 %vc = lshr <vscale x 8 x i8> %va, %splat 86 ret <vscale x 8 x i8> %vc 87} 88 89define <vscale x 8 x i8> @vsrl_vx_nxv8i8_0(<vscale x 8 x i8> %va) { 90; CHECK-LABEL: vsrl_vx_nxv8i8_0: 91; CHECK: # %bb.0: 92; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 93; CHECK-NEXT: vsrl.vi v8, v8, 6 94; CHECK-NEXT: ret 95 %head = insertelement <vscale x 8 x i8> poison, i8 6, i32 0 96 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 97 %vc = lshr <vscale x 8 x i8> %va, %splat 98 ret <vscale x 8 x i8> %vc 99} 100 101define <vscale x 16 x i8> @vsrl_vx_nxv16i8(<vscale x 16 x i8> %va, i8 signext %b) { 102; CHECK-LABEL: vsrl_vx_nxv16i8: 103; CHECK: # %bb.0: 104; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu 105; CHECK-NEXT: vsrl.vx v8, v8, a0 106; CHECK-NEXT: ret 107 %head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0 108 %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer 109 %vc = lshr <vscale x 16 x i8> %va, %splat 110 ret <vscale x 16 x i8> %vc 111} 112 113define <vscale x 16 x i8> @vsrl_vx_nxv16i8_0(<vscale x 16 x i8> %va) { 114; CHECK-LABEL: vsrl_vx_nxv16i8_0: 115; CHECK: # %bb.0: 116; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu 117; CHECK-NEXT: vsrl.vi v8, v8, 6 118; CHECK-NEXT: ret 119 %head = insertelement <vscale x 16 x i8> poison, i8 6, i32 0 120 %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer 121 %vc = lshr <vscale x 16 x i8> %va, %splat 122 ret <vscale x 16 x i8> %vc 123} 124 125define <vscale x 32 x i8> @vsrl_vx_nxv32i8(<vscale x 32 x i8> %va, i8 signext %b) { 126; CHECK-LABEL: vsrl_vx_nxv32i8: 127; CHECK: # %bb.0: 128; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu 129; CHECK-NEXT: vsrl.vx v8, v8, a0 130; CHECK-NEXT: ret 131 %head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0 132 %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer 133 %vc = lshr <vscale x 32 x i8> %va, %splat 134 ret <vscale x 32 x i8> %vc 135} 136 137define <vscale x 32 x i8> @vsrl_vx_nxv32i8_0(<vscale x 32 x i8> %va) { 138; CHECK-LABEL: vsrl_vx_nxv32i8_0: 139; CHECK: # %bb.0: 140; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu 141; CHECK-NEXT: vsrl.vi v8, v8, 6 142; CHECK-NEXT: ret 143 %head = insertelement <vscale x 32 x i8> poison, i8 6, i32 0 144 %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer 145 %vc = lshr <vscale x 32 x i8> %va, %splat 146 ret <vscale x 32 x i8> %vc 147} 148 149define <vscale x 64 x i8> @vsrl_vx_nxv64i8(<vscale x 64 x i8> %va, i8 signext %b) { 150; CHECK-LABEL: vsrl_vx_nxv64i8: 151; CHECK: # %bb.0: 152; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu 153; CHECK-NEXT: vsrl.vx v8, v8, a0 154; CHECK-NEXT: ret 155 %head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0 156 %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer 157 %vc = lshr <vscale x 64 x i8> %va, %splat 158 ret <vscale x 64 x i8> %vc 159} 160 161define <vscale x 64 x i8> @vsrl_vx_nxv64i8_0(<vscale x 64 x i8> %va) { 162; CHECK-LABEL: vsrl_vx_nxv64i8_0: 163; CHECK: # %bb.0: 164; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu 165; CHECK-NEXT: vsrl.vi v8, v8, 6 166; CHECK-NEXT: ret 167 %head = insertelement <vscale x 64 x i8> poison, i8 6, i32 0 168 %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer 169 %vc = lshr <vscale x 64 x i8> %va, %splat 170 ret <vscale x 64 x i8> %vc 171} 172 173define <vscale x 1 x i16> @vsrl_vx_nxv1i16(<vscale x 1 x i16> %va, i16 signext %b) { 174; CHECK-LABEL: vsrl_vx_nxv1i16: 175; CHECK: # %bb.0: 176; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu 177; CHECK-NEXT: vsrl.vx v8, v8, a0 178; CHECK-NEXT: ret 179 %head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0 180 %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer 181 %vc = lshr <vscale x 1 x i16> %va, %splat 182 ret <vscale x 1 x i16> %vc 183} 184 185define <vscale x 1 x i16> @vsrl_vx_nxv1i16_0(<vscale x 1 x i16> %va) { 186; CHECK-LABEL: vsrl_vx_nxv1i16_0: 187; CHECK: # %bb.0: 188; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 189; CHECK-NEXT: vsrl.vi v8, v8, 6 190; CHECK-NEXT: ret 191 %head = insertelement <vscale x 1 x i16> poison, i16 6, i32 0 192 %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer 193 %vc = lshr <vscale x 1 x i16> %va, %splat 194 ret <vscale x 1 x i16> %vc 195} 196 197define <vscale x 2 x i16> @vsrl_vx_nxv2i16(<vscale x 2 x i16> %va, i16 signext %b) { 198; CHECK-LABEL: vsrl_vx_nxv2i16: 199; CHECK: # %bb.0: 200; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu 201; CHECK-NEXT: vsrl.vx v8, v8, a0 202; CHECK-NEXT: ret 203 %head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0 204 %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer 205 %vc = lshr <vscale x 2 x i16> %va, %splat 206 ret <vscale x 2 x i16> %vc 207} 208 209define <vscale x 2 x i16> @vsrl_vx_nxv2i16_0(<vscale x 2 x i16> %va) { 210; CHECK-LABEL: vsrl_vx_nxv2i16_0: 211; CHECK: # %bb.0: 212; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 213; CHECK-NEXT: vsrl.vi v8, v8, 6 214; CHECK-NEXT: ret 215 %head = insertelement <vscale x 2 x i16> poison, i16 6, i32 0 216 %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer 217 %vc = lshr <vscale x 2 x i16> %va, %splat 218 ret <vscale x 2 x i16> %vc 219} 220 221define <vscale x 4 x i16> @vsrl_vx_nxv4i16(<vscale x 4 x i16> %va, i16 signext %b) { 222; CHECK-LABEL: vsrl_vx_nxv4i16: 223; CHECK: # %bb.0: 224; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu 225; CHECK-NEXT: vsrl.vx v8, v8, a0 226; CHECK-NEXT: ret 227 %head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0 228 %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer 229 %vc = lshr <vscale x 4 x i16> %va, %splat 230 ret <vscale x 4 x i16> %vc 231} 232 233define <vscale x 4 x i16> @vsrl_vx_nxv4i16_0(<vscale x 4 x i16> %va) { 234; CHECK-LABEL: vsrl_vx_nxv4i16_0: 235; CHECK: # %bb.0: 236; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 237; CHECK-NEXT: vsrl.vi v8, v8, 6 238; CHECK-NEXT: ret 239 %head = insertelement <vscale x 4 x i16> poison, i16 6, i32 0 240 %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer 241 %vc = lshr <vscale x 4 x i16> %va, %splat 242 ret <vscale x 4 x i16> %vc 243} 244 245define <vscale x 8 x i16> @vsrl_vx_nxv8i16(<vscale x 8 x i16> %va, i16 signext %b) { 246; CHECK-LABEL: vsrl_vx_nxv8i16: 247; CHECK: # %bb.0: 248; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu 249; CHECK-NEXT: vsrl.vx v8, v8, a0 250; CHECK-NEXT: ret 251 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 252 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 253 %vc = lshr <vscale x 8 x i16> %va, %splat 254 ret <vscale x 8 x i16> %vc 255} 256 257define <vscale x 8 x i16> @vsrl_vx_nxv8i16_0(<vscale x 8 x i16> %va) { 258; CHECK-LABEL: vsrl_vx_nxv8i16_0: 259; CHECK: # %bb.0: 260; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 261; CHECK-NEXT: vsrl.vi v8, v8, 6 262; CHECK-NEXT: ret 263 %head = insertelement <vscale x 8 x i16> poison, i16 6, i32 0 264 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 265 %vc = lshr <vscale x 8 x i16> %va, %splat 266 ret <vscale x 8 x i16> %vc 267} 268 269define <vscale x 16 x i16> @vsrl_vx_nxv16i16(<vscale x 16 x i16> %va, i16 signext %b) { 270; CHECK-LABEL: vsrl_vx_nxv16i16: 271; CHECK: # %bb.0: 272; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu 273; CHECK-NEXT: vsrl.vx v8, v8, a0 274; CHECK-NEXT: ret 275 %head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0 276 %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer 277 %vc = lshr <vscale x 16 x i16> %va, %splat 278 ret <vscale x 16 x i16> %vc 279} 280 281define <vscale x 16 x i16> @vsrl_vx_nxv16i16_0(<vscale x 16 x i16> %va) { 282; CHECK-LABEL: vsrl_vx_nxv16i16_0: 283; CHECK: # %bb.0: 284; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 285; CHECK-NEXT: vsrl.vi v8, v8, 6 286; CHECK-NEXT: ret 287 %head = insertelement <vscale x 16 x i16> poison, i16 6, i32 0 288 %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer 289 %vc = lshr <vscale x 16 x i16> %va, %splat 290 ret <vscale x 16 x i16> %vc 291} 292 293define <vscale x 32 x i16> @vsrl_vx_nxv32i16(<vscale x 32 x i16> %va, i16 signext %b) { 294; CHECK-LABEL: vsrl_vx_nxv32i16: 295; CHECK: # %bb.0: 296; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu 297; CHECK-NEXT: vsrl.vx v8, v8, a0 298; CHECK-NEXT: ret 299 %head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0 300 %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer 301 %vc = lshr <vscale x 32 x i16> %va, %splat 302 ret <vscale x 32 x i16> %vc 303} 304 305define <vscale x 32 x i16> @vsrl_vx_nxv32i16_0(<vscale x 32 x i16> %va) { 306; CHECK-LABEL: vsrl_vx_nxv32i16_0: 307; CHECK: # %bb.0: 308; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 309; CHECK-NEXT: vsrl.vi v8, v8, 6 310; CHECK-NEXT: ret 311 %head = insertelement <vscale x 32 x i16> poison, i16 6, i32 0 312 %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer 313 %vc = lshr <vscale x 32 x i16> %va, %splat 314 ret <vscale x 32 x i16> %vc 315} 316 317define <vscale x 1 x i32> @vsrl_vx_nxv1i32(<vscale x 1 x i32> %va, i32 signext %b) { 318; CHECK-LABEL: vsrl_vx_nxv1i32: 319; CHECK: # %bb.0: 320; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu 321; CHECK-NEXT: vsrl.vx v8, v8, a0 322; CHECK-NEXT: ret 323 %head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0 324 %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer 325 %vc = lshr <vscale x 1 x i32> %va, %splat 326 ret <vscale x 1 x i32> %vc 327} 328 329define <vscale x 1 x i32> @vsrl_vx_nxv1i32_0(<vscale x 1 x i32> %va) { 330; CHECK-LABEL: vsrl_vx_nxv1i32_0: 331; CHECK: # %bb.0: 332; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 333; CHECK-NEXT: vsrl.vi v8, v8, 31 334; CHECK-NEXT: ret 335 %head = insertelement <vscale x 1 x i32> poison, i32 31, i32 0 336 %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer 337 %vc = lshr <vscale x 1 x i32> %va, %splat 338 ret <vscale x 1 x i32> %vc 339} 340 341define <vscale x 2 x i32> @vsrl_vx_nxv2i32(<vscale x 2 x i32> %va, i32 signext %b) { 342; CHECK-LABEL: vsrl_vx_nxv2i32: 343; CHECK: # %bb.0: 344; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu 345; CHECK-NEXT: vsrl.vx v8, v8, a0 346; CHECK-NEXT: ret 347 %head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0 348 %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer 349 %vc = lshr <vscale x 2 x i32> %va, %splat 350 ret <vscale x 2 x i32> %vc 351} 352 353define <vscale x 2 x i32> @vsrl_vx_nxv2i32_0(<vscale x 2 x i32> %va) { 354; CHECK-LABEL: vsrl_vx_nxv2i32_0: 355; CHECK: # %bb.0: 356; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 357; CHECK-NEXT: vsrl.vi v8, v8, 31 358; CHECK-NEXT: ret 359 %head = insertelement <vscale x 2 x i32> poison, i32 31, i32 0 360 %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer 361 %vc = lshr <vscale x 2 x i32> %va, %splat 362 ret <vscale x 2 x i32> %vc 363} 364 365define <vscale x 4 x i32> @vsrl_vx_nxv4i32(<vscale x 4 x i32> %va, i32 signext %b) { 366; CHECK-LABEL: vsrl_vx_nxv4i32: 367; CHECK: # %bb.0: 368; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu 369; CHECK-NEXT: vsrl.vx v8, v8, a0 370; CHECK-NEXT: ret 371 %head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0 372 %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer 373 %vc = lshr <vscale x 4 x i32> %va, %splat 374 ret <vscale x 4 x i32> %vc 375} 376 377define <vscale x 4 x i32> @vsrl_vx_nxv4i32_0(<vscale x 4 x i32> %va) { 378; CHECK-LABEL: vsrl_vx_nxv4i32_0: 379; CHECK: # %bb.0: 380; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 381; CHECK-NEXT: vsrl.vi v8, v8, 31 382; CHECK-NEXT: ret 383 %head = insertelement <vscale x 4 x i32> poison, i32 31, i32 0 384 %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer 385 %vc = lshr <vscale x 4 x i32> %va, %splat 386 ret <vscale x 4 x i32> %vc 387} 388 389define <vscale x 8 x i32> @vsrl_vx_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b) { 390; CHECK-LABEL: vsrl_vx_nxv8i32: 391; CHECK: # %bb.0: 392; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 393; CHECK-NEXT: vsrl.vx v8, v8, a0 394; CHECK-NEXT: ret 395 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 396 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 397 %vc = lshr <vscale x 8 x i32> %va, %splat 398 ret <vscale x 8 x i32> %vc 399} 400 401define <vscale x 8 x i32> @vsrl_vx_nxv8i32_0(<vscale x 8 x i32> %va) { 402; CHECK-LABEL: vsrl_vx_nxv8i32_0: 403; CHECK: # %bb.0: 404; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 405; CHECK-NEXT: vsrl.vi v8, v8, 31 406; CHECK-NEXT: ret 407 %head = insertelement <vscale x 8 x i32> poison, i32 31, i32 0 408 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 409 %vc = lshr <vscale x 8 x i32> %va, %splat 410 ret <vscale x 8 x i32> %vc 411} 412 413define <vscale x 16 x i32> @vsrl_vx_nxv16i32(<vscale x 16 x i32> %va, i32 signext %b) { 414; CHECK-LABEL: vsrl_vx_nxv16i32: 415; CHECK: # %bb.0: 416; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu 417; CHECK-NEXT: vsrl.vx v8, v8, a0 418; CHECK-NEXT: ret 419 %head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0 420 %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer 421 %vc = lshr <vscale x 16 x i32> %va, %splat 422 ret <vscale x 16 x i32> %vc 423} 424 425define <vscale x 16 x i32> @vsrl_vx_nxv16i32_0(<vscale x 16 x i32> %va) { 426; CHECK-LABEL: vsrl_vx_nxv16i32_0: 427; CHECK: # %bb.0: 428; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 429; CHECK-NEXT: vsrl.vi v8, v8, 31 430; CHECK-NEXT: ret 431 %head = insertelement <vscale x 16 x i32> poison, i32 31, i32 0 432 %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer 433 %vc = lshr <vscale x 16 x i32> %va, %splat 434 ret <vscale x 16 x i32> %vc 435} 436 437define <vscale x 1 x i64> @vsrl_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b) { 438; CHECK-LABEL: vsrl_vx_nxv1i64: 439; CHECK: # %bb.0: 440; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu 441; CHECK-NEXT: vsrl.vx v8, v8, a0 442; CHECK-NEXT: ret 443 %head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0 444 %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 445 %vc = lshr <vscale x 1 x i64> %va, %splat 446 ret <vscale x 1 x i64> %vc 447} 448 449define <vscale x 1 x i64> @vsrl_vx_nxv1i64_0(<vscale x 1 x i64> %va) { 450; CHECK-LABEL: vsrl_vx_nxv1i64_0: 451; CHECK: # %bb.0: 452; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 453; CHECK-NEXT: vsrl.vi v8, v8, 31 454; CHECK-NEXT: ret 455 %head = insertelement <vscale x 1 x i64> poison, i64 31, i32 0 456 %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 457 %vc = lshr <vscale x 1 x i64> %va, %splat 458 ret <vscale x 1 x i64> %vc 459} 460 461define <vscale x 1 x i64> @vsrl_vx_nxv1i64_1(<vscale x 1 x i64> %va) { 462; CHECK-LABEL: vsrl_vx_nxv1i64_1: 463; CHECK: # %bb.0: 464; CHECK-NEXT: li a0, 32 465; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu 466; CHECK-NEXT: vsrl.vx v8, v8, a0 467; CHECK-NEXT: ret 468 %head = insertelement <vscale x 1 x i64> poison, i64 32, i32 0 469 %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 470 %vc = lshr <vscale x 1 x i64> %va, %splat 471 ret <vscale x 1 x i64> %vc 472} 473 474define <vscale x 2 x i64> @vsrl_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b) { 475; CHECK-LABEL: vsrl_vx_nxv2i64: 476; CHECK: # %bb.0: 477; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu 478; CHECK-NEXT: vsrl.vx v8, v8, a0 479; CHECK-NEXT: ret 480 %head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0 481 %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 482 %vc = lshr <vscale x 2 x i64> %va, %splat 483 ret <vscale x 2 x i64> %vc 484} 485 486define <vscale x 2 x i64> @vsrl_vx_nxv2i64_0(<vscale x 2 x i64> %va) { 487; CHECK-LABEL: vsrl_vx_nxv2i64_0: 488; CHECK: # %bb.0: 489; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 490; CHECK-NEXT: vsrl.vi v8, v8, 31 491; CHECK-NEXT: ret 492 %head = insertelement <vscale x 2 x i64> poison, i64 31, i32 0 493 %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 494 %vc = lshr <vscale x 2 x i64> %va, %splat 495 ret <vscale x 2 x i64> %vc 496} 497 498define <vscale x 2 x i64> @vsrl_vx_nxv2i64_1(<vscale x 2 x i64> %va) { 499; CHECK-LABEL: vsrl_vx_nxv2i64_1: 500; CHECK: # %bb.0: 501; CHECK-NEXT: li a0, 32 502; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu 503; CHECK-NEXT: vsrl.vx v8, v8, a0 504; CHECK-NEXT: ret 505 %head = insertelement <vscale x 2 x i64> poison, i64 32, i32 0 506 %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 507 %vc = lshr <vscale x 2 x i64> %va, %splat 508 ret <vscale x 2 x i64> %vc 509} 510 511define <vscale x 4 x i64> @vsrl_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b) { 512; CHECK-LABEL: vsrl_vx_nxv4i64: 513; CHECK: # %bb.0: 514; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu 515; CHECK-NEXT: vsrl.vx v8, v8, a0 516; CHECK-NEXT: ret 517 %head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0 518 %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 519 %vc = lshr <vscale x 4 x i64> %va, %splat 520 ret <vscale x 4 x i64> %vc 521} 522 523define <vscale x 4 x i64> @vsrl_vx_nxv4i64_0(<vscale x 4 x i64> %va) { 524; CHECK-LABEL: vsrl_vx_nxv4i64_0: 525; CHECK: # %bb.0: 526; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 527; CHECK-NEXT: vsrl.vi v8, v8, 31 528; CHECK-NEXT: ret 529 %head = insertelement <vscale x 4 x i64> poison, i64 31, i32 0 530 %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 531 %vc = lshr <vscale x 4 x i64> %va, %splat 532 ret <vscale x 4 x i64> %vc 533} 534 535define <vscale x 4 x i64> @vsrl_vx_nxv4i64_1(<vscale x 4 x i64> %va) { 536; CHECK-LABEL: vsrl_vx_nxv4i64_1: 537; CHECK: # %bb.0: 538; CHECK-NEXT: li a0, 32 539; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu 540; CHECK-NEXT: vsrl.vx v8, v8, a0 541; CHECK-NEXT: ret 542 %head = insertelement <vscale x 4 x i64> poison, i64 32, i32 0 543 %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 544 %vc = lshr <vscale x 4 x i64> %va, %splat 545 ret <vscale x 4 x i64> %vc 546} 547 548define <vscale x 8 x i64> @vsrl_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 549; CHECK-LABEL: vsrl_vx_nxv8i64: 550; CHECK: # %bb.0: 551; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu 552; CHECK-NEXT: vsrl.vx v8, v8, a0 553; CHECK-NEXT: ret 554 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 555 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 556 %vc = lshr <vscale x 8 x i64> %va, %splat 557 ret <vscale x 8 x i64> %vc 558} 559 560define <vscale x 8 x i64> @vsrl_vx_nxv8i64_0(<vscale x 8 x i64> %va) { 561; CHECK-LABEL: vsrl_vx_nxv8i64_0: 562; CHECK: # %bb.0: 563; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 564; CHECK-NEXT: vsrl.vi v8, v8, 31 565; CHECK-NEXT: ret 566 %head = insertelement <vscale x 8 x i64> poison, i64 31, i32 0 567 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 568 %vc = lshr <vscale x 8 x i64> %va, %splat 569 ret <vscale x 8 x i64> %vc 570} 571 572define <vscale x 8 x i64> @vsrl_vx_nxv8i64_1(<vscale x 8 x i64> %va) { 573; CHECK-LABEL: vsrl_vx_nxv8i64_1: 574; CHECK: # %bb.0: 575; CHECK-NEXT: li a0, 32 576; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu 577; CHECK-NEXT: vsrl.vx v8, v8, a0 578; CHECK-NEXT: ret 579 %head = insertelement <vscale x 8 x i64> poison, i64 32, i32 0 580 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 581 %vc = lshr <vscale x 8 x i64> %va, %splat 582 ret <vscale x 8 x i64> %vc 583} 584 585