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 --check-prefixes=CHECK,RV32 3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 4 5define <vscale x 1 x i8> @vor_vx_nxv1i8(<vscale x 1 x i8> %va, i8 signext %b) { 6; CHECK-LABEL: vor_vx_nxv1i8: 7; CHECK: # %bb.0: 8; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma 9; CHECK-NEXT: vor.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 = or <vscale x 1 x i8> %va, %splat 14 ret <vscale x 1 x i8> %vc 15} 16 17define <vscale x 1 x i8> @vor_vx_nxv1i8_0(<vscale x 1 x i8> %va) { 18; CHECK-LABEL: vor_vx_nxv1i8_0: 19; CHECK: # %bb.0: 20; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma 21; CHECK-NEXT: vor.vi v8, v8, -12 22; CHECK-NEXT: ret 23 %vc = or <vscale x 1 x i8> %va, splat (i8 -12) 24 ret <vscale x 1 x i8> %vc 25} 26 27define <vscale x 1 x i8> @vor_vx_nxv1i8_1(<vscale x 1 x i8> %va) { 28; CHECK-LABEL: vor_vx_nxv1i8_1: 29; CHECK: # %bb.0: 30; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma 31; CHECK-NEXT: vor.vi v8, v8, 15 32; CHECK-NEXT: ret 33 %vc = or <vscale x 1 x i8> %va, splat (i8 15) 34 ret <vscale x 1 x i8> %vc 35} 36 37define <vscale x 1 x i8> @vor_vx_nxv1i8_2(<vscale x 1 x i8> %va) { 38; CHECK-LABEL: vor_vx_nxv1i8_2: 39; CHECK: # %bb.0: 40; CHECK-NEXT: li a0, 16 41; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma 42; CHECK-NEXT: vor.vx v8, v8, a0 43; CHECK-NEXT: ret 44 %vc = or <vscale x 1 x i8> %va, splat (i8 16) 45 ret <vscale x 1 x i8> %vc 46} 47 48define <vscale x 2 x i8> @vor_vx_nxv2i8(<vscale x 2 x i8> %va, i8 signext %b) { 49; CHECK-LABEL: vor_vx_nxv2i8: 50; CHECK: # %bb.0: 51; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma 52; CHECK-NEXT: vor.vx v8, v8, a0 53; CHECK-NEXT: ret 54 %head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0 55 %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer 56 %vc = or <vscale x 2 x i8> %va, %splat 57 ret <vscale x 2 x i8> %vc 58} 59 60define <vscale x 2 x i8> @vor_vx_nxv2i8_0(<vscale x 2 x i8> %va) { 61; CHECK-LABEL: vor_vx_nxv2i8_0: 62; CHECK: # %bb.0: 63; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma 64; CHECK-NEXT: vor.vi v8, v8, -12 65; CHECK-NEXT: ret 66 %vc = or <vscale x 2 x i8> %va, splat (i8 -12) 67 ret <vscale x 2 x i8> %vc 68} 69 70define <vscale x 2 x i8> @vor_vx_nxv2i8_1(<vscale x 2 x i8> %va) { 71; CHECK-LABEL: vor_vx_nxv2i8_1: 72; CHECK: # %bb.0: 73; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma 74; CHECK-NEXT: vor.vi v8, v8, 15 75; CHECK-NEXT: ret 76 %vc = or <vscale x 2 x i8> %va, splat (i8 15) 77 ret <vscale x 2 x i8> %vc 78} 79 80define <vscale x 2 x i8> @vor_vx_nxv2i8_2(<vscale x 2 x i8> %va) { 81; CHECK-LABEL: vor_vx_nxv2i8_2: 82; CHECK: # %bb.0: 83; CHECK-NEXT: li a0, 16 84; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma 85; CHECK-NEXT: vor.vx v8, v8, a0 86; CHECK-NEXT: ret 87 %vc = or <vscale x 2 x i8> %va, splat (i8 16) 88 ret <vscale x 2 x i8> %vc 89} 90 91define <vscale x 4 x i8> @vor_vx_nxv4i8(<vscale x 4 x i8> %va, i8 signext %b) { 92; CHECK-LABEL: vor_vx_nxv4i8: 93; CHECK: # %bb.0: 94; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma 95; CHECK-NEXT: vor.vx v8, v8, a0 96; CHECK-NEXT: ret 97 %head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0 98 %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer 99 %vc = or <vscale x 4 x i8> %va, %splat 100 ret <vscale x 4 x i8> %vc 101} 102 103define <vscale x 4 x i8> @vor_vx_nxv4i8_0(<vscale x 4 x i8> %va) { 104; CHECK-LABEL: vor_vx_nxv4i8_0: 105; CHECK: # %bb.0: 106; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma 107; CHECK-NEXT: vor.vi v8, v8, -12 108; CHECK-NEXT: ret 109 %vc = or <vscale x 4 x i8> %va, splat (i8 -12) 110 ret <vscale x 4 x i8> %vc 111} 112 113define <vscale x 4 x i8> @vor_vx_nxv4i8_1(<vscale x 4 x i8> %va) { 114; CHECK-LABEL: vor_vx_nxv4i8_1: 115; CHECK: # %bb.0: 116; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma 117; CHECK-NEXT: vor.vi v8, v8, 15 118; CHECK-NEXT: ret 119 %vc = or <vscale x 4 x i8> %va, splat (i8 15) 120 ret <vscale x 4 x i8> %vc 121} 122 123define <vscale x 4 x i8> @vor_vx_nxv4i8_2(<vscale x 4 x i8> %va) { 124; CHECK-LABEL: vor_vx_nxv4i8_2: 125; CHECK: # %bb.0: 126; CHECK-NEXT: li a0, 16 127; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma 128; CHECK-NEXT: vor.vx v8, v8, a0 129; CHECK-NEXT: ret 130 %vc = or <vscale x 4 x i8> %va, splat (i8 16) 131 ret <vscale x 4 x i8> %vc 132} 133 134define <vscale x 8 x i8> @vor_vx_nxv8i8(<vscale x 8 x i8> %va, i8 signext %b) { 135; CHECK-LABEL: vor_vx_nxv8i8: 136; CHECK: # %bb.0: 137; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma 138; CHECK-NEXT: vor.vx v8, v8, a0 139; CHECK-NEXT: ret 140 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 141 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 142 %vc = or <vscale x 8 x i8> %va, %splat 143 ret <vscale x 8 x i8> %vc 144} 145 146define <vscale x 8 x i8> @vor_vx_nxv8i8_0(<vscale x 8 x i8> %va) { 147; CHECK-LABEL: vor_vx_nxv8i8_0: 148; CHECK: # %bb.0: 149; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma 150; CHECK-NEXT: vor.vi v8, v8, -12 151; CHECK-NEXT: ret 152 %vc = or <vscale x 8 x i8> %va, splat (i8 -12) 153 ret <vscale x 8 x i8> %vc 154} 155 156define <vscale x 8 x i8> @vor_vx_nxv8i8_1(<vscale x 8 x i8> %va) { 157; CHECK-LABEL: vor_vx_nxv8i8_1: 158; CHECK: # %bb.0: 159; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma 160; CHECK-NEXT: vor.vi v8, v8, 15 161; CHECK-NEXT: ret 162 %vc = or <vscale x 8 x i8> %va, splat (i8 15) 163 ret <vscale x 8 x i8> %vc 164} 165 166define <vscale x 8 x i8> @vor_vx_nxv8i8_2(<vscale x 8 x i8> %va) { 167; CHECK-LABEL: vor_vx_nxv8i8_2: 168; CHECK: # %bb.0: 169; CHECK-NEXT: li a0, 16 170; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma 171; CHECK-NEXT: vor.vx v8, v8, a0 172; CHECK-NEXT: ret 173 %vc = or <vscale x 8 x i8> %va, splat (i8 16) 174 ret <vscale x 8 x i8> %vc 175} 176 177define <vscale x 16 x i8> @vor_vx_nxv16i8(<vscale x 16 x i8> %va, i8 signext %b) { 178; CHECK-LABEL: vor_vx_nxv16i8: 179; CHECK: # %bb.0: 180; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma 181; CHECK-NEXT: vor.vx v8, v8, a0 182; CHECK-NEXT: ret 183 %head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0 184 %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer 185 %vc = or <vscale x 16 x i8> %va, %splat 186 ret <vscale x 16 x i8> %vc 187} 188 189define <vscale x 16 x i8> @vor_vx_nxv16i8_0(<vscale x 16 x i8> %va) { 190; CHECK-LABEL: vor_vx_nxv16i8_0: 191; CHECK: # %bb.0: 192; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma 193; CHECK-NEXT: vor.vi v8, v8, -12 194; CHECK-NEXT: ret 195 %vc = or <vscale x 16 x i8> %va, splat (i8 -12) 196 ret <vscale x 16 x i8> %vc 197} 198 199define <vscale x 16 x i8> @vor_vx_nxv16i8_1(<vscale x 16 x i8> %va) { 200; CHECK-LABEL: vor_vx_nxv16i8_1: 201; CHECK: # %bb.0: 202; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma 203; CHECK-NEXT: vor.vi v8, v8, 15 204; CHECK-NEXT: ret 205 %vc = or <vscale x 16 x i8> %va, splat (i8 15) 206 ret <vscale x 16 x i8> %vc 207} 208 209define <vscale x 16 x i8> @vor_vx_nxv16i8_2(<vscale x 16 x i8> %va) { 210; CHECK-LABEL: vor_vx_nxv16i8_2: 211; CHECK: # %bb.0: 212; CHECK-NEXT: li a0, 16 213; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma 214; CHECK-NEXT: vor.vx v8, v8, a0 215; CHECK-NEXT: ret 216 %vc = or <vscale x 16 x i8> %va, splat (i8 16) 217 ret <vscale x 16 x i8> %vc 218} 219 220define <vscale x 32 x i8> @vor_vx_nxv32i8(<vscale x 32 x i8> %va, i8 signext %b) { 221; CHECK-LABEL: vor_vx_nxv32i8: 222; CHECK: # %bb.0: 223; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma 224; CHECK-NEXT: vor.vx v8, v8, a0 225; CHECK-NEXT: ret 226 %head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0 227 %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer 228 %vc = or <vscale x 32 x i8> %va, %splat 229 ret <vscale x 32 x i8> %vc 230} 231 232define <vscale x 32 x i8> @vor_vx_nxv32i8_0(<vscale x 32 x i8> %va) { 233; CHECK-LABEL: vor_vx_nxv32i8_0: 234; CHECK: # %bb.0: 235; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma 236; CHECK-NEXT: vor.vi v8, v8, -12 237; CHECK-NEXT: ret 238 %vc = or <vscale x 32 x i8> %va, splat (i8 -12) 239 ret <vscale x 32 x i8> %vc 240} 241 242define <vscale x 32 x i8> @vor_vx_nxv32i8_1(<vscale x 32 x i8> %va) { 243; CHECK-LABEL: vor_vx_nxv32i8_1: 244; CHECK: # %bb.0: 245; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma 246; CHECK-NEXT: vor.vi v8, v8, 15 247; CHECK-NEXT: ret 248 %vc = or <vscale x 32 x i8> %va, splat (i8 15) 249 ret <vscale x 32 x i8> %vc 250} 251 252define <vscale x 32 x i8> @vor_vx_nxv32i8_2(<vscale x 32 x i8> %va) { 253; CHECK-LABEL: vor_vx_nxv32i8_2: 254; CHECK: # %bb.0: 255; CHECK-NEXT: li a0, 16 256; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma 257; CHECK-NEXT: vor.vx v8, v8, a0 258; CHECK-NEXT: ret 259 %vc = or <vscale x 32 x i8> %va, splat (i8 16) 260 ret <vscale x 32 x i8> %vc 261} 262 263define <vscale x 64 x i8> @vor_vx_nxv64i8(<vscale x 64 x i8> %va, i8 signext %b) { 264; CHECK-LABEL: vor_vx_nxv64i8: 265; CHECK: # %bb.0: 266; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma 267; CHECK-NEXT: vor.vx v8, v8, a0 268; CHECK-NEXT: ret 269 %head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0 270 %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer 271 %vc = or <vscale x 64 x i8> %va, %splat 272 ret <vscale x 64 x i8> %vc 273} 274 275define <vscale x 64 x i8> @vor_vx_nxv64i8_0(<vscale x 64 x i8> %va) { 276; CHECK-LABEL: vor_vx_nxv64i8_0: 277; CHECK: # %bb.0: 278; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma 279; CHECK-NEXT: vor.vi v8, v8, -12 280; CHECK-NEXT: ret 281 %vc = or <vscale x 64 x i8> %va, splat (i8 -12) 282 ret <vscale x 64 x i8> %vc 283} 284 285define <vscale x 64 x i8> @vor_vx_nxv64i8_1(<vscale x 64 x i8> %va) { 286; CHECK-LABEL: vor_vx_nxv64i8_1: 287; CHECK: # %bb.0: 288; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma 289; CHECK-NEXT: vor.vi v8, v8, 15 290; CHECK-NEXT: ret 291 %vc = or <vscale x 64 x i8> %va, splat (i8 15) 292 ret <vscale x 64 x i8> %vc 293} 294 295define <vscale x 64 x i8> @vor_vx_nxv64i8_2(<vscale x 64 x i8> %va) { 296; CHECK-LABEL: vor_vx_nxv64i8_2: 297; CHECK: # %bb.0: 298; CHECK-NEXT: li a0, 16 299; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma 300; CHECK-NEXT: vor.vx v8, v8, a0 301; CHECK-NEXT: ret 302 %vc = or <vscale x 64 x i8> %va, splat (i8 16) 303 ret <vscale x 64 x i8> %vc 304} 305 306define <vscale x 1 x i16> @vor_vx_nxv1i16(<vscale x 1 x i16> %va, i16 signext %b) { 307; CHECK-LABEL: vor_vx_nxv1i16: 308; CHECK: # %bb.0: 309; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma 310; CHECK-NEXT: vor.vx v8, v8, a0 311; CHECK-NEXT: ret 312 %head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0 313 %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer 314 %vc = or <vscale x 1 x i16> %va, %splat 315 ret <vscale x 1 x i16> %vc 316} 317 318define <vscale x 1 x i16> @vor_vx_nxv1i16_0(<vscale x 1 x i16> %va) { 319; CHECK-LABEL: vor_vx_nxv1i16_0: 320; CHECK: # %bb.0: 321; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 322; CHECK-NEXT: vor.vi v8, v8, -12 323; CHECK-NEXT: ret 324 %vc = or <vscale x 1 x i16> %va, splat (i16 -12) 325 ret <vscale x 1 x i16> %vc 326} 327 328define <vscale x 1 x i16> @vor_vx_nxv1i16_1(<vscale x 1 x i16> %va) { 329; CHECK-LABEL: vor_vx_nxv1i16_1: 330; CHECK: # %bb.0: 331; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 332; CHECK-NEXT: vor.vi v8, v8, 15 333; CHECK-NEXT: ret 334 %vc = or <vscale x 1 x i16> %va, splat (i16 15) 335 ret <vscale x 1 x i16> %vc 336} 337 338define <vscale x 1 x i16> @vor_vx_nxv1i16_2(<vscale x 1 x i16> %va) { 339; CHECK-LABEL: vor_vx_nxv1i16_2: 340; CHECK: # %bb.0: 341; CHECK-NEXT: li a0, 16 342; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma 343; CHECK-NEXT: vor.vx v8, v8, a0 344; CHECK-NEXT: ret 345 %vc = or <vscale x 1 x i16> %va, splat (i16 16) 346 ret <vscale x 1 x i16> %vc 347} 348 349define <vscale x 2 x i16> @vor_vx_nxv2i16(<vscale x 2 x i16> %va, i16 signext %b) { 350; CHECK-LABEL: vor_vx_nxv2i16: 351; CHECK: # %bb.0: 352; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma 353; CHECK-NEXT: vor.vx v8, v8, a0 354; CHECK-NEXT: ret 355 %head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0 356 %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer 357 %vc = or <vscale x 2 x i16> %va, %splat 358 ret <vscale x 2 x i16> %vc 359} 360 361define <vscale x 2 x i16> @vor_vx_nxv2i16_0(<vscale x 2 x i16> %va) { 362; CHECK-LABEL: vor_vx_nxv2i16_0: 363; CHECK: # %bb.0: 364; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 365; CHECK-NEXT: vor.vi v8, v8, -12 366; CHECK-NEXT: ret 367 %vc = or <vscale x 2 x i16> %va, splat (i16 -12) 368 ret <vscale x 2 x i16> %vc 369} 370 371define <vscale x 2 x i16> @vor_vx_nxv2i16_1(<vscale x 2 x i16> %va) { 372; CHECK-LABEL: vor_vx_nxv2i16_1: 373; CHECK: # %bb.0: 374; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 375; CHECK-NEXT: vor.vi v8, v8, 15 376; CHECK-NEXT: ret 377 %vc = or <vscale x 2 x i16> %va, splat (i16 15) 378 ret <vscale x 2 x i16> %vc 379} 380 381define <vscale x 2 x i16> @vor_vx_nxv2i16_2(<vscale x 2 x i16> %va) { 382; CHECK-LABEL: vor_vx_nxv2i16_2: 383; CHECK: # %bb.0: 384; CHECK-NEXT: li a0, 16 385; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma 386; CHECK-NEXT: vor.vx v8, v8, a0 387; CHECK-NEXT: ret 388 %vc = or <vscale x 2 x i16> %va, splat (i16 16) 389 ret <vscale x 2 x i16> %vc 390} 391 392define <vscale x 4 x i16> @vor_vx_nxv4i16(<vscale x 4 x i16> %va, i16 signext %b) { 393; CHECK-LABEL: vor_vx_nxv4i16: 394; CHECK: # %bb.0: 395; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma 396; CHECK-NEXT: vor.vx v8, v8, a0 397; CHECK-NEXT: ret 398 %head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0 399 %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer 400 %vc = or <vscale x 4 x i16> %va, %splat 401 ret <vscale x 4 x i16> %vc 402} 403 404define <vscale x 4 x i16> @vor_vx_nxv4i16_0(<vscale x 4 x i16> %va) { 405; CHECK-LABEL: vor_vx_nxv4i16_0: 406; CHECK: # %bb.0: 407; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 408; CHECK-NEXT: vor.vi v8, v8, -12 409; CHECK-NEXT: ret 410 %vc = or <vscale x 4 x i16> %va, splat (i16 -12) 411 ret <vscale x 4 x i16> %vc 412} 413 414define <vscale x 4 x i16> @vor_vx_nxv4i16_1(<vscale x 4 x i16> %va) { 415; CHECK-LABEL: vor_vx_nxv4i16_1: 416; CHECK: # %bb.0: 417; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 418; CHECK-NEXT: vor.vi v8, v8, 15 419; CHECK-NEXT: ret 420 %vc = or <vscale x 4 x i16> %va, splat (i16 15) 421 ret <vscale x 4 x i16> %vc 422} 423 424define <vscale x 4 x i16> @vor_vx_nxv4i16_2(<vscale x 4 x i16> %va) { 425; CHECK-LABEL: vor_vx_nxv4i16_2: 426; CHECK: # %bb.0: 427; CHECK-NEXT: li a0, 16 428; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma 429; CHECK-NEXT: vor.vx v8, v8, a0 430; CHECK-NEXT: ret 431 %vc = or <vscale x 4 x i16> %va, splat (i16 16) 432 ret <vscale x 4 x i16> %vc 433} 434 435define <vscale x 8 x i16> @vor_vx_nxv8i16(<vscale x 8 x i16> %va, i16 signext %b) { 436; CHECK-LABEL: vor_vx_nxv8i16: 437; CHECK: # %bb.0: 438; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma 439; CHECK-NEXT: vor.vx v8, v8, a0 440; CHECK-NEXT: ret 441 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 442 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 443 %vc = or <vscale x 8 x i16> %va, %splat 444 ret <vscale x 8 x i16> %vc 445} 446 447define <vscale x 8 x i16> @vor_vx_nxv8i16_0(<vscale x 8 x i16> %va) { 448; CHECK-LABEL: vor_vx_nxv8i16_0: 449; CHECK: # %bb.0: 450; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 451; CHECK-NEXT: vor.vi v8, v8, -12 452; CHECK-NEXT: ret 453 %vc = or <vscale x 8 x i16> %va, splat (i16 -12) 454 ret <vscale x 8 x i16> %vc 455} 456 457define <vscale x 8 x i16> @vor_vx_nxv8i16_1(<vscale x 8 x i16> %va) { 458; CHECK-LABEL: vor_vx_nxv8i16_1: 459; CHECK: # %bb.0: 460; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 461; CHECK-NEXT: vor.vi v8, v8, 15 462; CHECK-NEXT: ret 463 %vc = or <vscale x 8 x i16> %va, splat (i16 15) 464 ret <vscale x 8 x i16> %vc 465} 466 467define <vscale x 8 x i16> @vor_vx_nxv8i16_2(<vscale x 8 x i16> %va) { 468; CHECK-LABEL: vor_vx_nxv8i16_2: 469; CHECK: # %bb.0: 470; CHECK-NEXT: li a0, 16 471; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma 472; CHECK-NEXT: vor.vx v8, v8, a0 473; CHECK-NEXT: ret 474 %vc = or <vscale x 8 x i16> %va, splat (i16 16) 475 ret <vscale x 8 x i16> %vc 476} 477 478define <vscale x 16 x i16> @vor_vx_nxv16i16(<vscale x 16 x i16> %va, i16 signext %b) { 479; CHECK-LABEL: vor_vx_nxv16i16: 480; CHECK: # %bb.0: 481; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma 482; CHECK-NEXT: vor.vx v8, v8, a0 483; CHECK-NEXT: ret 484 %head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0 485 %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer 486 %vc = or <vscale x 16 x i16> %va, %splat 487 ret <vscale x 16 x i16> %vc 488} 489 490define <vscale x 16 x i16> @vor_vx_nxv16i16_0(<vscale x 16 x i16> %va) { 491; CHECK-LABEL: vor_vx_nxv16i16_0: 492; CHECK: # %bb.0: 493; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 494; CHECK-NEXT: vor.vi v8, v8, -12 495; CHECK-NEXT: ret 496 %vc = or <vscale x 16 x i16> %va, splat (i16 -12) 497 ret <vscale x 16 x i16> %vc 498} 499 500define <vscale x 16 x i16> @vor_vx_nxv16i16_1(<vscale x 16 x i16> %va) { 501; CHECK-LABEL: vor_vx_nxv16i16_1: 502; CHECK: # %bb.0: 503; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 504; CHECK-NEXT: vor.vi v8, v8, 15 505; CHECK-NEXT: ret 506 %vc = or <vscale x 16 x i16> %va, splat (i16 15) 507 ret <vscale x 16 x i16> %vc 508} 509 510define <vscale x 16 x i16> @vor_vx_nxv16i16_2(<vscale x 16 x i16> %va) { 511; CHECK-LABEL: vor_vx_nxv16i16_2: 512; CHECK: # %bb.0: 513; CHECK-NEXT: li a0, 16 514; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma 515; CHECK-NEXT: vor.vx v8, v8, a0 516; CHECK-NEXT: ret 517 %vc = or <vscale x 16 x i16> %va, splat (i16 16) 518 ret <vscale x 16 x i16> %vc 519} 520 521define <vscale x 32 x i16> @vor_vx_nxv32i16(<vscale x 32 x i16> %va, i16 signext %b) { 522; CHECK-LABEL: vor_vx_nxv32i16: 523; CHECK: # %bb.0: 524; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma 525; CHECK-NEXT: vor.vx v8, v8, a0 526; CHECK-NEXT: ret 527 %head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0 528 %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer 529 %vc = or <vscale x 32 x i16> %va, %splat 530 ret <vscale x 32 x i16> %vc 531} 532 533define <vscale x 32 x i16> @vor_vx_nxv32i16_0(<vscale x 32 x i16> %va) { 534; CHECK-LABEL: vor_vx_nxv32i16_0: 535; CHECK: # %bb.0: 536; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 537; CHECK-NEXT: vor.vi v8, v8, -12 538; CHECK-NEXT: ret 539 %vc = or <vscale x 32 x i16> %va, splat (i16 -12) 540 ret <vscale x 32 x i16> %vc 541} 542 543define <vscale x 32 x i16> @vor_vx_nxv32i16_1(<vscale x 32 x i16> %va) { 544; CHECK-LABEL: vor_vx_nxv32i16_1: 545; CHECK: # %bb.0: 546; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 547; CHECK-NEXT: vor.vi v8, v8, 15 548; CHECK-NEXT: ret 549 %vc = or <vscale x 32 x i16> %va, splat (i16 15) 550 ret <vscale x 32 x i16> %vc 551} 552 553define <vscale x 32 x i16> @vor_vx_nxv32i16_2(<vscale x 32 x i16> %va) { 554; CHECK-LABEL: vor_vx_nxv32i16_2: 555; CHECK: # %bb.0: 556; CHECK-NEXT: li a0, 16 557; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma 558; CHECK-NEXT: vor.vx v8, v8, a0 559; CHECK-NEXT: ret 560 %vc = or <vscale x 32 x i16> %va, splat (i16 16) 561 ret <vscale x 32 x i16> %vc 562} 563 564define <vscale x 1 x i32> @vor_vx_nxv1i32(<vscale x 1 x i32> %va, i32 signext %b) { 565; CHECK-LABEL: vor_vx_nxv1i32: 566; CHECK: # %bb.0: 567; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma 568; CHECK-NEXT: vor.vx v8, v8, a0 569; CHECK-NEXT: ret 570 %head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0 571 %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer 572 %vc = or <vscale x 1 x i32> %va, %splat 573 ret <vscale x 1 x i32> %vc 574} 575 576define <vscale x 1 x i32> @vor_vx_nxv1i32_0(<vscale x 1 x i32> %va) { 577; CHECK-LABEL: vor_vx_nxv1i32_0: 578; CHECK: # %bb.0: 579; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 580; CHECK-NEXT: vor.vi v8, v8, -12 581; CHECK-NEXT: ret 582 %vc = or <vscale x 1 x i32> %va, splat (i32 -12) 583 ret <vscale x 1 x i32> %vc 584} 585 586define <vscale x 1 x i32> @vor_vx_nxv1i32_1(<vscale x 1 x i32> %va) { 587; CHECK-LABEL: vor_vx_nxv1i32_1: 588; CHECK: # %bb.0: 589; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 590; CHECK-NEXT: vor.vi v8, v8, 15 591; CHECK-NEXT: ret 592 %vc = or <vscale x 1 x i32> %va, splat (i32 15) 593 ret <vscale x 1 x i32> %vc 594} 595 596define <vscale x 1 x i32> @vor_vx_nxv1i32_2(<vscale x 1 x i32> %va) { 597; CHECK-LABEL: vor_vx_nxv1i32_2: 598; CHECK: # %bb.0: 599; CHECK-NEXT: li a0, 16 600; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma 601; CHECK-NEXT: vor.vx v8, v8, a0 602; CHECK-NEXT: ret 603 %vc = or <vscale x 1 x i32> %va, splat (i32 16) 604 ret <vscale x 1 x i32> %vc 605} 606 607define <vscale x 2 x i32> @vor_vx_nxv2i32(<vscale x 2 x i32> %va, i32 signext %b) { 608; CHECK-LABEL: vor_vx_nxv2i32: 609; CHECK: # %bb.0: 610; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma 611; CHECK-NEXT: vor.vx v8, v8, a0 612; CHECK-NEXT: ret 613 %head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0 614 %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer 615 %vc = or <vscale x 2 x i32> %va, %splat 616 ret <vscale x 2 x i32> %vc 617} 618 619define <vscale x 2 x i32> @vor_vx_nxv2i32_0(<vscale x 2 x i32> %va) { 620; CHECK-LABEL: vor_vx_nxv2i32_0: 621; CHECK: # %bb.0: 622; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 623; CHECK-NEXT: vor.vi v8, v8, -12 624; CHECK-NEXT: ret 625 %vc = or <vscale x 2 x i32> %va, splat (i32 -12) 626 ret <vscale x 2 x i32> %vc 627} 628 629define <vscale x 2 x i32> @vor_vx_nxv2i32_1(<vscale x 2 x i32> %va) { 630; CHECK-LABEL: vor_vx_nxv2i32_1: 631; CHECK: # %bb.0: 632; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 633; CHECK-NEXT: vor.vi v8, v8, 15 634; CHECK-NEXT: ret 635 %vc = or <vscale x 2 x i32> %va, splat (i32 15) 636 ret <vscale x 2 x i32> %vc 637} 638 639define <vscale x 2 x i32> @vor_vx_nxv2i32_2(<vscale x 2 x i32> %va) { 640; CHECK-LABEL: vor_vx_nxv2i32_2: 641; CHECK: # %bb.0: 642; CHECK-NEXT: li a0, 16 643; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma 644; CHECK-NEXT: vor.vx v8, v8, a0 645; CHECK-NEXT: ret 646 %vc = or <vscale x 2 x i32> %va, splat (i32 16) 647 ret <vscale x 2 x i32> %vc 648} 649 650define <vscale x 4 x i32> @vor_vx_nxv4i32(<vscale x 4 x i32> %va, i32 signext %b) { 651; CHECK-LABEL: vor_vx_nxv4i32: 652; CHECK: # %bb.0: 653; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma 654; CHECK-NEXT: vor.vx v8, v8, a0 655; CHECK-NEXT: ret 656 %head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0 657 %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer 658 %vc = or <vscale x 4 x i32> %va, %splat 659 ret <vscale x 4 x i32> %vc 660} 661 662define <vscale x 4 x i32> @vor_vx_nxv4i32_0(<vscale x 4 x i32> %va) { 663; CHECK-LABEL: vor_vx_nxv4i32_0: 664; CHECK: # %bb.0: 665; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 666; CHECK-NEXT: vor.vi v8, v8, -12 667; CHECK-NEXT: ret 668 %vc = or <vscale x 4 x i32> %va, splat (i32 -12) 669 ret <vscale x 4 x i32> %vc 670} 671 672define <vscale x 4 x i32> @vor_vx_nxv4i32_1(<vscale x 4 x i32> %va) { 673; CHECK-LABEL: vor_vx_nxv4i32_1: 674; CHECK: # %bb.0: 675; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 676; CHECK-NEXT: vor.vi v8, v8, 15 677; CHECK-NEXT: ret 678 %vc = or <vscale x 4 x i32> %va, splat (i32 15) 679 ret <vscale x 4 x i32> %vc 680} 681 682define <vscale x 4 x i32> @vor_vx_nxv4i32_2(<vscale x 4 x i32> %va) { 683; CHECK-LABEL: vor_vx_nxv4i32_2: 684; CHECK: # %bb.0: 685; CHECK-NEXT: li a0, 16 686; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma 687; CHECK-NEXT: vor.vx v8, v8, a0 688; CHECK-NEXT: ret 689 %vc = or <vscale x 4 x i32> %va, splat (i32 16) 690 ret <vscale x 4 x i32> %vc 691} 692 693define <vscale x 8 x i32> @vor_vx_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b) { 694; CHECK-LABEL: vor_vx_nxv8i32: 695; CHECK: # %bb.0: 696; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma 697; CHECK-NEXT: vor.vx v8, v8, a0 698; CHECK-NEXT: ret 699 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 700 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 701 %vc = or <vscale x 8 x i32> %va, %splat 702 ret <vscale x 8 x i32> %vc 703} 704 705define <vscale x 8 x i32> @vor_vx_nxv8i32_0(<vscale x 8 x i32> %va) { 706; CHECK-LABEL: vor_vx_nxv8i32_0: 707; CHECK: # %bb.0: 708; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 709; CHECK-NEXT: vor.vi v8, v8, -12 710; CHECK-NEXT: ret 711 %vc = or <vscale x 8 x i32> %va, splat (i32 -12) 712 ret <vscale x 8 x i32> %vc 713} 714 715define <vscale x 8 x i32> @vor_vx_nxv8i32_1(<vscale x 8 x i32> %va) { 716; CHECK-LABEL: vor_vx_nxv8i32_1: 717; CHECK: # %bb.0: 718; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 719; CHECK-NEXT: vor.vi v8, v8, 15 720; CHECK-NEXT: ret 721 %vc = or <vscale x 8 x i32> %va, splat (i32 15) 722 ret <vscale x 8 x i32> %vc 723} 724 725define <vscale x 8 x i32> @vor_vx_nxv8i32_2(<vscale x 8 x i32> %va) { 726; CHECK-LABEL: vor_vx_nxv8i32_2: 727; CHECK: # %bb.0: 728; CHECK-NEXT: li a0, 16 729; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma 730; CHECK-NEXT: vor.vx v8, v8, a0 731; CHECK-NEXT: ret 732 %vc = or <vscale x 8 x i32> %va, splat (i32 16) 733 ret <vscale x 8 x i32> %vc 734} 735 736define <vscale x 16 x i32> @vor_vx_nxv16i32(<vscale x 16 x i32> %va, i32 signext %b) { 737; CHECK-LABEL: vor_vx_nxv16i32: 738; CHECK: # %bb.0: 739; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, ma 740; CHECK-NEXT: vor.vx v8, v8, a0 741; CHECK-NEXT: ret 742 %head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0 743 %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer 744 %vc = or <vscale x 16 x i32> %va, %splat 745 ret <vscale x 16 x i32> %vc 746} 747 748define <vscale x 16 x i32> @vor_vx_nxv16i32_0(<vscale x 16 x i32> %va) { 749; CHECK-LABEL: vor_vx_nxv16i32_0: 750; CHECK: # %bb.0: 751; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 752; CHECK-NEXT: vor.vi v8, v8, -12 753; CHECK-NEXT: ret 754 %vc = or <vscale x 16 x i32> %va, splat (i32 -12) 755 ret <vscale x 16 x i32> %vc 756} 757 758define <vscale x 16 x i32> @vor_vx_nxv16i32_1(<vscale x 16 x i32> %va) { 759; CHECK-LABEL: vor_vx_nxv16i32_1: 760; CHECK: # %bb.0: 761; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 762; CHECK-NEXT: vor.vi v8, v8, 15 763; CHECK-NEXT: ret 764 %vc = or <vscale x 16 x i32> %va, splat (i32 15) 765 ret <vscale x 16 x i32> %vc 766} 767 768define <vscale x 16 x i32> @vor_vx_nxv16i32_2(<vscale x 16 x i32> %va) { 769; CHECK-LABEL: vor_vx_nxv16i32_2: 770; CHECK: # %bb.0: 771; CHECK-NEXT: li a0, 16 772; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, ma 773; CHECK-NEXT: vor.vx v8, v8, a0 774; CHECK-NEXT: ret 775 %vc = or <vscale x 16 x i32> %va, splat (i32 16) 776 ret <vscale x 16 x i32> %vc 777} 778 779define <vscale x 1 x i64> @vor_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b) { 780; RV32-LABEL: vor_vx_nxv1i64: 781; RV32: # %bb.0: 782; RV32-NEXT: addi sp, sp, -16 783; RV32-NEXT: .cfi_def_cfa_offset 16 784; RV32-NEXT: sw a0, 8(sp) 785; RV32-NEXT: sw a1, 12(sp) 786; RV32-NEXT: addi a0, sp, 8 787; RV32-NEXT: vsetvli a1, zero, e64, m1, ta, ma 788; RV32-NEXT: vlse64.v v9, (a0), zero 789; RV32-NEXT: vor.vv v8, v8, v9 790; RV32-NEXT: addi sp, sp, 16 791; RV32-NEXT: .cfi_def_cfa_offset 0 792; RV32-NEXT: ret 793; 794; RV64-LABEL: vor_vx_nxv1i64: 795; RV64: # %bb.0: 796; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, ma 797; RV64-NEXT: vor.vx v8, v8, a0 798; RV64-NEXT: ret 799 %head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0 800 %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 801 %vc = or <vscale x 1 x i64> %va, %splat 802 ret <vscale x 1 x i64> %vc 803} 804 805define <vscale x 1 x i64> @vor_vx_nxv1i64_0(<vscale x 1 x i64> %va) { 806; CHECK-LABEL: vor_vx_nxv1i64_0: 807; CHECK: # %bb.0: 808; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 809; CHECK-NEXT: vor.vi v8, v8, -12 810; CHECK-NEXT: ret 811 %vc = or <vscale x 1 x i64> %va, splat (i64 -12) 812 ret <vscale x 1 x i64> %vc 813} 814 815define <vscale x 1 x i64> @vor_vx_nxv1i64_1(<vscale x 1 x i64> %va) { 816; CHECK-LABEL: vor_vx_nxv1i64_1: 817; CHECK: # %bb.0: 818; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 819; CHECK-NEXT: vor.vi v8, v8, 15 820; CHECK-NEXT: ret 821 %vc = or <vscale x 1 x i64> %va, splat (i64 15) 822 ret <vscale x 1 x i64> %vc 823} 824 825define <vscale x 1 x i64> @vor_vx_nxv1i64_2(<vscale x 1 x i64> %va) { 826; CHECK-LABEL: vor_vx_nxv1i64_2: 827; CHECK: # %bb.0: 828; CHECK-NEXT: li a0, 16 829; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, ma 830; CHECK-NEXT: vor.vx v8, v8, a0 831; CHECK-NEXT: ret 832 %vc = or <vscale x 1 x i64> %va, splat (i64 16) 833 ret <vscale x 1 x i64> %vc 834} 835 836define <vscale x 2 x i64> @vor_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b) { 837; RV32-LABEL: vor_vx_nxv2i64: 838; RV32: # %bb.0: 839; RV32-NEXT: addi sp, sp, -16 840; RV32-NEXT: .cfi_def_cfa_offset 16 841; RV32-NEXT: sw a0, 8(sp) 842; RV32-NEXT: sw a1, 12(sp) 843; RV32-NEXT: addi a0, sp, 8 844; RV32-NEXT: vsetvli a1, zero, e64, m2, ta, ma 845; RV32-NEXT: vlse64.v v10, (a0), zero 846; RV32-NEXT: vor.vv v8, v8, v10 847; RV32-NEXT: addi sp, sp, 16 848; RV32-NEXT: .cfi_def_cfa_offset 0 849; RV32-NEXT: ret 850; 851; RV64-LABEL: vor_vx_nxv2i64: 852; RV64: # %bb.0: 853; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, ma 854; RV64-NEXT: vor.vx v8, v8, a0 855; RV64-NEXT: ret 856 %head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0 857 %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 858 %vc = or <vscale x 2 x i64> %va, %splat 859 ret <vscale x 2 x i64> %vc 860} 861 862define <vscale x 2 x i64> @vor_vx_nxv2i64_0(<vscale x 2 x i64> %va) { 863; CHECK-LABEL: vor_vx_nxv2i64_0: 864; CHECK: # %bb.0: 865; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 866; CHECK-NEXT: vor.vi v8, v8, -12 867; CHECK-NEXT: ret 868 %vc = or <vscale x 2 x i64> %va, splat (i64 -12) 869 ret <vscale x 2 x i64> %vc 870} 871 872define <vscale x 2 x i64> @vor_vx_nxv2i64_1(<vscale x 2 x i64> %va) { 873; CHECK-LABEL: vor_vx_nxv2i64_1: 874; CHECK: # %bb.0: 875; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 876; CHECK-NEXT: vor.vi v8, v8, 15 877; CHECK-NEXT: ret 878 %vc = or <vscale x 2 x i64> %va, splat (i64 15) 879 ret <vscale x 2 x i64> %vc 880} 881 882define <vscale x 2 x i64> @vor_vx_nxv2i64_2(<vscale x 2 x i64> %va) { 883; CHECK-LABEL: vor_vx_nxv2i64_2: 884; CHECK: # %bb.0: 885; CHECK-NEXT: li a0, 16 886; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, ma 887; CHECK-NEXT: vor.vx v8, v8, a0 888; CHECK-NEXT: ret 889 %vc = or <vscale x 2 x i64> %va, splat (i64 16) 890 ret <vscale x 2 x i64> %vc 891} 892 893define <vscale x 4 x i64> @vor_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b) { 894; RV32-LABEL: vor_vx_nxv4i64: 895; RV32: # %bb.0: 896; RV32-NEXT: addi sp, sp, -16 897; RV32-NEXT: .cfi_def_cfa_offset 16 898; RV32-NEXT: sw a0, 8(sp) 899; RV32-NEXT: sw a1, 12(sp) 900; RV32-NEXT: addi a0, sp, 8 901; RV32-NEXT: vsetvli a1, zero, e64, m4, ta, ma 902; RV32-NEXT: vlse64.v v12, (a0), zero 903; RV32-NEXT: vor.vv v8, v8, v12 904; RV32-NEXT: addi sp, sp, 16 905; RV32-NEXT: .cfi_def_cfa_offset 0 906; RV32-NEXT: ret 907; 908; RV64-LABEL: vor_vx_nxv4i64: 909; RV64: # %bb.0: 910; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, ma 911; RV64-NEXT: vor.vx v8, v8, a0 912; RV64-NEXT: ret 913 %head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0 914 %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 915 %vc = or <vscale x 4 x i64> %va, %splat 916 ret <vscale x 4 x i64> %vc 917} 918 919define <vscale x 4 x i64> @vor_vx_nxv4i64_0(<vscale x 4 x i64> %va) { 920; CHECK-LABEL: vor_vx_nxv4i64_0: 921; CHECK: # %bb.0: 922; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 923; CHECK-NEXT: vor.vi v8, v8, -12 924; CHECK-NEXT: ret 925 %vc = or <vscale x 4 x i64> %va, splat (i64 -12) 926 ret <vscale x 4 x i64> %vc 927} 928 929define <vscale x 4 x i64> @vor_vx_nxv4i64_1(<vscale x 4 x i64> %va) { 930; CHECK-LABEL: vor_vx_nxv4i64_1: 931; CHECK: # %bb.0: 932; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 933; CHECK-NEXT: vor.vi v8, v8, 15 934; CHECK-NEXT: ret 935 %vc = or <vscale x 4 x i64> %va, splat (i64 15) 936 ret <vscale x 4 x i64> %vc 937} 938 939define <vscale x 4 x i64> @vor_vx_nxv4i64_2(<vscale x 4 x i64> %va) { 940; CHECK-LABEL: vor_vx_nxv4i64_2: 941; CHECK: # %bb.0: 942; CHECK-NEXT: li a0, 16 943; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, ma 944; CHECK-NEXT: vor.vx v8, v8, a0 945; CHECK-NEXT: ret 946 %vc = or <vscale x 4 x i64> %va, splat (i64 16) 947 ret <vscale x 4 x i64> %vc 948} 949 950define <vscale x 8 x i64> @vor_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) { 951; RV32-LABEL: vor_vx_nxv8i64: 952; RV32: # %bb.0: 953; RV32-NEXT: addi sp, sp, -16 954; RV32-NEXT: .cfi_def_cfa_offset 16 955; RV32-NEXT: sw a0, 8(sp) 956; RV32-NEXT: sw a1, 12(sp) 957; RV32-NEXT: addi a0, sp, 8 958; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma 959; RV32-NEXT: vlse64.v v16, (a0), zero 960; RV32-NEXT: vor.vv v8, v8, v16 961; RV32-NEXT: addi sp, sp, 16 962; RV32-NEXT: .cfi_def_cfa_offset 0 963; RV32-NEXT: ret 964; 965; RV64-LABEL: vor_vx_nxv8i64: 966; RV64: # %bb.0: 967; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma 968; RV64-NEXT: vor.vx v8, v8, a0 969; RV64-NEXT: ret 970 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 971 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 972 %vc = or <vscale x 8 x i64> %va, %splat 973 ret <vscale x 8 x i64> %vc 974} 975 976define <vscale x 8 x i64> @vor_vx_nxv8i64_0(<vscale x 8 x i64> %va) { 977; CHECK-LABEL: vor_vx_nxv8i64_0: 978; CHECK: # %bb.0: 979; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 980; CHECK-NEXT: vor.vi v8, v8, -12 981; CHECK-NEXT: ret 982 %vc = or <vscale x 8 x i64> %va, splat (i64 -12) 983 ret <vscale x 8 x i64> %vc 984} 985 986define <vscale x 8 x i64> @vor_vx_nxv8i64_1(<vscale x 8 x i64> %va) { 987; CHECK-LABEL: vor_vx_nxv8i64_1: 988; CHECK: # %bb.0: 989; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 990; CHECK-NEXT: vor.vi v8, v8, 15 991; CHECK-NEXT: ret 992 %vc = or <vscale x 8 x i64> %va, splat (i64 15) 993 ret <vscale x 8 x i64> %vc 994} 995 996define <vscale x 8 x i64> @vor_vx_nxv8i64_2(<vscale x 8 x i64> %va) { 997; CHECK-LABEL: vor_vx_nxv8i64_2: 998; CHECK: # %bb.0: 999; CHECK-NEXT: li a0, 16 1000; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, ma 1001; CHECK-NEXT: vor.vx v8, v8, a0 1002; CHECK-NEXT: ret 1003 %vc = or <vscale x 8 x i64> %va, splat (i64 16) 1004 ret <vscale x 8 x i64> %vc 1005} 1006 1007 1008define <vscale x 8 x i64> @vor_vx_nxv8i64_3(<vscale x 8 x i64> %va) { 1009; CHECK-LABEL: vor_vx_nxv8i64_3: 1010; CHECK: # %bb.0: 1011; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 1012; CHECK-NEXT: vmv.v.i v8, -1 1013; CHECK-NEXT: ret 1014 %vc = or <vscale x 8 x i64> %va, splat (i64 -1) 1015 ret <vscale x 8 x i64> %vc 1016} 1017 1018define <vscale x 8 x i64> @vor_xx_nxv8i64(i64 %a, i64 %b) nounwind { 1019; RV32-LABEL: vor_xx_nxv8i64: 1020; RV32: # %bb.0: 1021; RV32-NEXT: addi sp, sp, -16 1022; RV32-NEXT: or a1, a1, a3 1023; RV32-NEXT: or a0, a0, a2 1024; RV32-NEXT: sw a0, 8(sp) 1025; RV32-NEXT: sw a1, 12(sp) 1026; RV32-NEXT: addi a0, sp, 8 1027; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma 1028; RV32-NEXT: vlse64.v v8, (a0), zero 1029; RV32-NEXT: addi sp, sp, 16 1030; RV32-NEXT: ret 1031; 1032; RV64-LABEL: vor_xx_nxv8i64: 1033; RV64: # %bb.0: 1034; RV64-NEXT: or a0, a0, a1 1035; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma 1036; RV64-NEXT: vmv.v.x v8, a0 1037; RV64-NEXT: ret 1038 %head1 = insertelement <vscale x 8 x i64> poison, i64 %a, i32 0 1039 %splat1 = shufflevector <vscale x 8 x i64> %head1, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 1040 %head2 = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 1041 %splat2 = shufflevector <vscale x 8 x i64> %head2, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 1042 %v = or <vscale x 8 x i64> %splat1, %splat2 1043 ret <vscale x 8 x i64> %v 1044} 1045 1046define <vscale x 8 x i32> @vor_vv_mask_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %mask) { 1047; CHECK-LABEL: vor_vv_mask_nxv8i32: 1048; CHECK: # %bb.0: 1049; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1050; CHECK-NEXT: vor.vv v8, v8, v12, v0.t 1051; CHECK-NEXT: ret 1052 %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> %vb, <vscale x 8 x i32> zeroinitializer 1053 %vc = or <vscale x 8 x i32> %va, %vs 1054 ret <vscale x 8 x i32> %vc 1055} 1056 1057define <vscale x 8 x i32> @vor_vx_mask_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b, <vscale x 8 x i1> %mask) { 1058; CHECK-LABEL: vor_vx_mask_nxv8i32: 1059; CHECK: # %bb.0: 1060; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 1061; CHECK-NEXT: vor.vx v8, v8, a0, v0.t 1062; CHECK-NEXT: ret 1063 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1064 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1065 %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> %splat, <vscale x 8 x i32> zeroinitializer 1066 %vc = or <vscale x 8 x i32> %va, %vs 1067 ret <vscale x 8 x i32> %vc 1068} 1069 1070define <vscale x 8 x i32> @vor_vi_mask_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %mask) { 1071; CHECK-LABEL: vor_vi_mask_nxv8i32: 1072; CHECK: # %bb.0: 1073; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1074; CHECK-NEXT: vor.vi v8, v8, 7, v0.t 1075; CHECK-NEXT: ret 1076 %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> splat (i32 7), <vscale x 8 x i32> zeroinitializer 1077 %vc = or <vscale x 8 x i32> %va, %vs 1078 ret <vscale x 8 x i32> %vc 1079} 1080