5888 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV323; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV644 5define void @add_v16i8(ptr %x, ptr %y) {6; CHECK-LABEL: add_v16i8:7; CHECK: # %bb.0:8; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma9; CHECK-NEXT: vle8.v v8, (a0)10; CHECK-NEXT: vle8.v v9, (a1)11; CHECK-NEXT: vadd.vv v8, v8, v912; CHECK-NEXT: vse8.v v8, (a0)13; CHECK-NEXT: ret14 %a = load <16 x i8>, ptr %x15 %b = load <16 x i8>, ptr %y16 %c = add <16 x i8> %a, %b17 store <16 x i8> %c, ptr %x18 ret void19}20 21define void @add_v8i16(ptr %x, ptr %y) {22; CHECK-LABEL: add_v8i16:23; CHECK: # %bb.0:24; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma25; CHECK-NEXT: vle16.v v8, (a0)26; CHECK-NEXT: vle16.v v9, (a1)27; CHECK-NEXT: vadd.vv v8, v8, v928; CHECK-NEXT: vse16.v v8, (a0)29; CHECK-NEXT: ret30 %a = load <8 x i16>, ptr %x31 %b = load <8 x i16>, ptr %y32 %c = add <8 x i16> %a, %b33 store <8 x i16> %c, ptr %x34 ret void35}36 37define void @add_v6i16(ptr %x, ptr %y) {38; CHECK-LABEL: add_v6i16:39; CHECK: # %bb.0:40; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma41; CHECK-NEXT: vle16.v v8, (a0)42; CHECK-NEXT: vle16.v v9, (a1)43; CHECK-NEXT: vadd.vv v8, v8, v944; CHECK-NEXT: vse16.v v8, (a0)45; CHECK-NEXT: ret46 %a = load <6 x i16>, ptr %x47 %b = load <6 x i16>, ptr %y48 %c = add <6 x i16> %a, %b49 store <6 x i16> %c, ptr %x50 ret void51}52 53define void @add_v4i32(ptr %x, ptr %y) {54; CHECK-LABEL: add_v4i32:55; CHECK: # %bb.0:56; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma57; CHECK-NEXT: vle32.v v8, (a0)58; CHECK-NEXT: vle32.v v9, (a1)59; CHECK-NEXT: vadd.vv v8, v8, v960; CHECK-NEXT: vse32.v v8, (a0)61; CHECK-NEXT: ret62 %a = load <4 x i32>, ptr %x63 %b = load <4 x i32>, ptr %y64 %c = add <4 x i32> %a, %b65 store <4 x i32> %c, ptr %x66 ret void67}68 69define void @add_v2i64(ptr %x, ptr %y) {70; CHECK-LABEL: add_v2i64:71; CHECK: # %bb.0:72; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma73; CHECK-NEXT: vle64.v v8, (a0)74; CHECK-NEXT: vle64.v v9, (a1)75; CHECK-NEXT: vadd.vv v8, v8, v976; CHECK-NEXT: vse64.v v8, (a0)77; CHECK-NEXT: ret78 %a = load <2 x i64>, ptr %x79 %b = load <2 x i64>, ptr %y80 %c = add <2 x i64> %a, %b81 store <2 x i64> %c, ptr %x82 ret void83}84 85define void @sub_v16i8(ptr %x, ptr %y) {86; CHECK-LABEL: sub_v16i8:87; CHECK: # %bb.0:88; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma89; CHECK-NEXT: vle8.v v8, (a0)90; CHECK-NEXT: vle8.v v9, (a1)91; CHECK-NEXT: vsub.vv v8, v8, v992; CHECK-NEXT: vse8.v v8, (a0)93; CHECK-NEXT: ret94 %a = load <16 x i8>, ptr %x95 %b = load <16 x i8>, ptr %y96 %c = sub <16 x i8> %a, %b97 store <16 x i8> %c, ptr %x98 ret void99}100 101define void @sub_v8i16(ptr %x, ptr %y) {102; CHECK-LABEL: sub_v8i16:103; CHECK: # %bb.0:104; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma105; CHECK-NEXT: vle16.v v8, (a0)106; CHECK-NEXT: vle16.v v9, (a1)107; CHECK-NEXT: vsub.vv v8, v8, v9108; CHECK-NEXT: vse16.v v8, (a0)109; CHECK-NEXT: ret110 %a = load <8 x i16>, ptr %x111 %b = load <8 x i16>, ptr %y112 %c = sub <8 x i16> %a, %b113 store <8 x i16> %c, ptr %x114 ret void115}116 117define void @sub_v6i16(ptr %x, ptr %y) {118; CHECK-LABEL: sub_v6i16:119; CHECK: # %bb.0:120; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma121; CHECK-NEXT: vle16.v v8, (a0)122; CHECK-NEXT: vle16.v v9, (a1)123; CHECK-NEXT: vsub.vv v8, v8, v9124; CHECK-NEXT: vse16.v v8, (a0)125; CHECK-NEXT: ret126 %a = load <6 x i16>, ptr %x127 %b = load <6 x i16>, ptr %y128 %c = sub <6 x i16> %a, %b129 store <6 x i16> %c, ptr %x130 ret void131}132 133define void @sub_v4i32(ptr %x, ptr %y) {134; CHECK-LABEL: sub_v4i32:135; CHECK: # %bb.0:136; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma137; CHECK-NEXT: vle32.v v8, (a0)138; CHECK-NEXT: vle32.v v9, (a1)139; CHECK-NEXT: vsub.vv v8, v8, v9140; CHECK-NEXT: vse32.v v8, (a0)141; CHECK-NEXT: ret142 %a = load <4 x i32>, ptr %x143 %b = load <4 x i32>, ptr %y144 %c = sub <4 x i32> %a, %b145 store <4 x i32> %c, ptr %x146 ret void147}148 149define void @sub_v2i64(ptr %x, ptr %y) {150; CHECK-LABEL: sub_v2i64:151; CHECK: # %bb.0:152; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma153; CHECK-NEXT: vle64.v v8, (a0)154; CHECK-NEXT: vle64.v v9, (a1)155; CHECK-NEXT: vsub.vv v8, v8, v9156; CHECK-NEXT: vse64.v v8, (a0)157; CHECK-NEXT: ret158 %a = load <2 x i64>, ptr %x159 %b = load <2 x i64>, ptr %y160 %c = sub <2 x i64> %a, %b161 store <2 x i64> %c, ptr %x162 ret void163}164 165define void @mul_v16i8(ptr %x, ptr %y) {166; CHECK-LABEL: mul_v16i8:167; CHECK: # %bb.0:168; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma169; CHECK-NEXT: vle8.v v8, (a0)170; CHECK-NEXT: vle8.v v9, (a1)171; CHECK-NEXT: vmul.vv v8, v8, v9172; CHECK-NEXT: vse8.v v8, (a0)173; CHECK-NEXT: ret174 %a = load <16 x i8>, ptr %x175 %b = load <16 x i8>, ptr %y176 %c = mul <16 x i8> %a, %b177 store <16 x i8> %c, ptr %x178 ret void179}180 181define void @mul_v8i16(ptr %x, ptr %y) {182; CHECK-LABEL: mul_v8i16:183; CHECK: # %bb.0:184; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma185; CHECK-NEXT: vle16.v v8, (a0)186; CHECK-NEXT: vle16.v v9, (a1)187; CHECK-NEXT: vmul.vv v8, v8, v9188; CHECK-NEXT: vse16.v v8, (a0)189; CHECK-NEXT: ret190 %a = load <8 x i16>, ptr %x191 %b = load <8 x i16>, ptr %y192 %c = mul <8 x i16> %a, %b193 store <8 x i16> %c, ptr %x194 ret void195}196 197define void @mul_v6i16(ptr %x, ptr %y) {198; CHECK-LABEL: mul_v6i16:199; CHECK: # %bb.0:200; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma201; CHECK-NEXT: vle16.v v8, (a0)202; CHECK-NEXT: vle16.v v9, (a1)203; CHECK-NEXT: vmul.vv v8, v8, v9204; CHECK-NEXT: vse16.v v8, (a0)205; CHECK-NEXT: ret206 %a = load <6 x i16>, ptr %x207 %b = load <6 x i16>, ptr %y208 %c = mul <6 x i16> %a, %b209 store <6 x i16> %c, ptr %x210 ret void211}212 213define void @mul_v4i32(ptr %x, ptr %y) {214; CHECK-LABEL: mul_v4i32:215; CHECK: # %bb.0:216; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma217; CHECK-NEXT: vle32.v v8, (a0)218; CHECK-NEXT: vle32.v v9, (a1)219; CHECK-NEXT: vmul.vv v8, v8, v9220; CHECK-NEXT: vse32.v v8, (a0)221; CHECK-NEXT: ret222 %a = load <4 x i32>, ptr %x223 %b = load <4 x i32>, ptr %y224 %c = mul <4 x i32> %a, %b225 store <4 x i32> %c, ptr %x226 ret void227}228 229define void @mul_v2i64(ptr %x, ptr %y) {230; CHECK-LABEL: mul_v2i64:231; CHECK: # %bb.0:232; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma233; CHECK-NEXT: vle64.v v8, (a0)234; CHECK-NEXT: vle64.v v9, (a1)235; CHECK-NEXT: vmul.vv v8, v8, v9236; CHECK-NEXT: vse64.v v8, (a0)237; CHECK-NEXT: ret238 %a = load <2 x i64>, ptr %x239 %b = load <2 x i64>, ptr %y240 %c = mul <2 x i64> %a, %b241 store <2 x i64> %c, ptr %x242 ret void243}244 245define void @and_v16i8(ptr %x, ptr %y) {246; CHECK-LABEL: and_v16i8:247; CHECK: # %bb.0:248; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma249; CHECK-NEXT: vle8.v v8, (a0)250; CHECK-NEXT: vle8.v v9, (a1)251; CHECK-NEXT: vand.vv v8, v8, v9252; CHECK-NEXT: vse8.v v8, (a0)253; CHECK-NEXT: ret254 %a = load <16 x i8>, ptr %x255 %b = load <16 x i8>, ptr %y256 %c = and <16 x i8> %a, %b257 store <16 x i8> %c, ptr %x258 ret void259}260 261define void @and_v8i16(ptr %x, ptr %y) {262; CHECK-LABEL: and_v8i16:263; CHECK: # %bb.0:264; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma265; CHECK-NEXT: vle16.v v8, (a0)266; CHECK-NEXT: vle16.v v9, (a1)267; CHECK-NEXT: vand.vv v8, v8, v9268; CHECK-NEXT: vse16.v v8, (a0)269; CHECK-NEXT: ret270 %a = load <8 x i16>, ptr %x271 %b = load <8 x i16>, ptr %y272 %c = and <8 x i16> %a, %b273 store <8 x i16> %c, ptr %x274 ret void275}276 277define void @and_v6i16(ptr %x, ptr %y) {278; CHECK-LABEL: and_v6i16:279; CHECK: # %bb.0:280; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma281; CHECK-NEXT: vle16.v v8, (a0)282; CHECK-NEXT: vle16.v v9, (a1)283; CHECK-NEXT: vand.vv v8, v8, v9284; CHECK-NEXT: vse16.v v8, (a0)285; CHECK-NEXT: ret286 %a = load <6 x i16>, ptr %x287 %b = load <6 x i16>, ptr %y288 %c = and <6 x i16> %a, %b289 store <6 x i16> %c, ptr %x290 ret void291}292 293define void @and_v4i32(ptr %x, ptr %y) {294; CHECK-LABEL: and_v4i32:295; CHECK: # %bb.0:296; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma297; CHECK-NEXT: vle32.v v8, (a0)298; CHECK-NEXT: vle32.v v9, (a1)299; CHECK-NEXT: vand.vv v8, v8, v9300; CHECK-NEXT: vse32.v v8, (a0)301; CHECK-NEXT: ret302 %a = load <4 x i32>, ptr %x303 %b = load <4 x i32>, ptr %y304 %c = and <4 x i32> %a, %b305 store <4 x i32> %c, ptr %x306 ret void307}308 309define void @and_v2i64(ptr %x, ptr %y) {310; CHECK-LABEL: and_v2i64:311; CHECK: # %bb.0:312; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma313; CHECK-NEXT: vle64.v v8, (a0)314; CHECK-NEXT: vle64.v v9, (a1)315; CHECK-NEXT: vand.vv v8, v8, v9316; CHECK-NEXT: vse64.v v8, (a0)317; CHECK-NEXT: ret318 %a = load <2 x i64>, ptr %x319 %b = load <2 x i64>, ptr %y320 %c = and <2 x i64> %a, %b321 store <2 x i64> %c, ptr %x322 ret void323}324 325define void @or_v16i8(ptr %x, ptr %y) {326; CHECK-LABEL: or_v16i8:327; CHECK: # %bb.0:328; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma329; CHECK-NEXT: vle8.v v8, (a0)330; CHECK-NEXT: vle8.v v9, (a1)331; CHECK-NEXT: vor.vv v8, v8, v9332; CHECK-NEXT: vse8.v v8, (a0)333; CHECK-NEXT: ret334 %a = load <16 x i8>, ptr %x335 %b = load <16 x i8>, ptr %y336 %c = or <16 x i8> %a, %b337 store <16 x i8> %c, ptr %x338 ret void339}340 341define void @or_v8i16(ptr %x, ptr %y) {342; CHECK-LABEL: or_v8i16:343; CHECK: # %bb.0:344; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma345; CHECK-NEXT: vle16.v v8, (a0)346; CHECK-NEXT: vle16.v v9, (a1)347; CHECK-NEXT: vor.vv v8, v8, v9348; CHECK-NEXT: vse16.v v8, (a0)349; CHECK-NEXT: ret350 %a = load <8 x i16>, ptr %x351 %b = load <8 x i16>, ptr %y352 %c = or <8 x i16> %a, %b353 store <8 x i16> %c, ptr %x354 ret void355}356 357define void @or_v6i16(ptr %x, ptr %y) {358; CHECK-LABEL: or_v6i16:359; CHECK: # %bb.0:360; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma361; CHECK-NEXT: vle16.v v8, (a0)362; CHECK-NEXT: vle16.v v9, (a1)363; CHECK-NEXT: vor.vv v8, v8, v9364; CHECK-NEXT: vse16.v v8, (a0)365; CHECK-NEXT: ret366 %a = load <6 x i16>, ptr %x367 %b = load <6 x i16>, ptr %y368 %c = or <6 x i16> %a, %b369 store <6 x i16> %c, ptr %x370 ret void371}372 373define void @or_v4i32(ptr %x, ptr %y) {374; CHECK-LABEL: or_v4i32:375; CHECK: # %bb.0:376; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma377; CHECK-NEXT: vle32.v v8, (a0)378; CHECK-NEXT: vle32.v v9, (a1)379; CHECK-NEXT: vor.vv v8, v8, v9380; CHECK-NEXT: vse32.v v8, (a0)381; CHECK-NEXT: ret382 %a = load <4 x i32>, ptr %x383 %b = load <4 x i32>, ptr %y384 %c = or <4 x i32> %a, %b385 store <4 x i32> %c, ptr %x386 ret void387}388 389define void @or_v2i64(ptr %x, ptr %y) {390; CHECK-LABEL: or_v2i64:391; CHECK: # %bb.0:392; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma393; CHECK-NEXT: vle64.v v8, (a0)394; CHECK-NEXT: vle64.v v9, (a1)395; CHECK-NEXT: vor.vv v8, v8, v9396; CHECK-NEXT: vse64.v v8, (a0)397; CHECK-NEXT: ret398 %a = load <2 x i64>, ptr %x399 %b = load <2 x i64>, ptr %y400 %c = or <2 x i64> %a, %b401 store <2 x i64> %c, ptr %x402 ret void403}404 405define void @xor_v16i8(ptr %x, ptr %y) {406; CHECK-LABEL: xor_v16i8:407; CHECK: # %bb.0:408; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma409; CHECK-NEXT: vle8.v v8, (a0)410; CHECK-NEXT: vle8.v v9, (a1)411; CHECK-NEXT: vxor.vv v8, v8, v9412; CHECK-NEXT: vse8.v v8, (a0)413; CHECK-NEXT: ret414 %a = load <16 x i8>, ptr %x415 %b = load <16 x i8>, ptr %y416 %c = xor <16 x i8> %a, %b417 store <16 x i8> %c, ptr %x418 ret void419}420 421define void @xor_v8i16(ptr %x, ptr %y) {422; CHECK-LABEL: xor_v8i16:423; CHECK: # %bb.0:424; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma425; CHECK-NEXT: vle16.v v8, (a0)426; CHECK-NEXT: vle16.v v9, (a1)427; CHECK-NEXT: vxor.vv v8, v8, v9428; CHECK-NEXT: vse16.v v8, (a0)429; CHECK-NEXT: ret430 %a = load <8 x i16>, ptr %x431 %b = load <8 x i16>, ptr %y432 %c = xor <8 x i16> %a, %b433 store <8 x i16> %c, ptr %x434 ret void435}436 437define void @xor_v6i16(ptr %x, ptr %y) {438; CHECK-LABEL: xor_v6i16:439; CHECK: # %bb.0:440; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma441; CHECK-NEXT: vle16.v v8, (a0)442; CHECK-NEXT: vle16.v v9, (a1)443; CHECK-NEXT: vxor.vv v8, v8, v9444; CHECK-NEXT: vse16.v v8, (a0)445; CHECK-NEXT: ret446 %a = load <6 x i16>, ptr %x447 %b = load <6 x i16>, ptr %y448 %c = xor <6 x i16> %a, %b449 store <6 x i16> %c, ptr %x450 ret void451}452 453define void @xor_v4i32(ptr %x, ptr %y) {454; CHECK-LABEL: xor_v4i32:455; CHECK: # %bb.0:456; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma457; CHECK-NEXT: vle32.v v8, (a0)458; CHECK-NEXT: vle32.v v9, (a1)459; CHECK-NEXT: vxor.vv v8, v8, v9460; CHECK-NEXT: vse32.v v8, (a0)461; CHECK-NEXT: ret462 %a = load <4 x i32>, ptr %x463 %b = load <4 x i32>, ptr %y464 %c = xor <4 x i32> %a, %b465 store <4 x i32> %c, ptr %x466 ret void467}468 469define void @xor_v2i64(ptr %x, ptr %y) {470; CHECK-LABEL: xor_v2i64:471; CHECK: # %bb.0:472; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma473; CHECK-NEXT: vle64.v v8, (a0)474; CHECK-NEXT: vle64.v v9, (a1)475; CHECK-NEXT: vxor.vv v8, v8, v9476; CHECK-NEXT: vse64.v v8, (a0)477; CHECK-NEXT: ret478 %a = load <2 x i64>, ptr %x479 %b = load <2 x i64>, ptr %y480 %c = xor <2 x i64> %a, %b481 store <2 x i64> %c, ptr %x482 ret void483}484 485define void @lshr_v16i8(ptr %x, ptr %y) {486; CHECK-LABEL: lshr_v16i8:487; CHECK: # %bb.0:488; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma489; CHECK-NEXT: vle8.v v8, (a0)490; CHECK-NEXT: vle8.v v9, (a1)491; CHECK-NEXT: vsrl.vv v8, v8, v9492; CHECK-NEXT: vse8.v v8, (a0)493; CHECK-NEXT: ret494 %a = load <16 x i8>, ptr %x495 %b = load <16 x i8>, ptr %y496 %c = lshr <16 x i8> %a, %b497 store <16 x i8> %c, ptr %x498 ret void499}500 501define void @lshr_v8i16(ptr %x, ptr %y) {502; CHECK-LABEL: lshr_v8i16:503; CHECK: # %bb.0:504; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma505; CHECK-NEXT: vle16.v v8, (a0)506; CHECK-NEXT: vle16.v v9, (a1)507; CHECK-NEXT: vsrl.vv v8, v8, v9508; CHECK-NEXT: vse16.v v8, (a0)509; CHECK-NEXT: ret510 %a = load <8 x i16>, ptr %x511 %b = load <8 x i16>, ptr %y512 %c = lshr <8 x i16> %a, %b513 store <8 x i16> %c, ptr %x514 ret void515}516 517define void @lshr_v6i16(ptr %x, ptr %y) {518; CHECK-LABEL: lshr_v6i16:519; CHECK: # %bb.0:520; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma521; CHECK-NEXT: vle16.v v8, (a0)522; CHECK-NEXT: vle16.v v9, (a1)523; CHECK-NEXT: vsrl.vv v8, v8, v9524; CHECK-NEXT: vse16.v v8, (a0)525; CHECK-NEXT: ret526 %a = load <6 x i16>, ptr %x527 %b = load <6 x i16>, ptr %y528 %c = lshr <6 x i16> %a, %b529 store <6 x i16> %c, ptr %x530 ret void531}532 533define void @lshr_v4i32(ptr %x, ptr %y) {534; CHECK-LABEL: lshr_v4i32:535; CHECK: # %bb.0:536; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma537; CHECK-NEXT: vle32.v v8, (a0)538; CHECK-NEXT: vle32.v v9, (a1)539; CHECK-NEXT: vsrl.vv v8, v8, v9540; CHECK-NEXT: vse32.v v8, (a0)541; CHECK-NEXT: ret542 %a = load <4 x i32>, ptr %x543 %b = load <4 x i32>, ptr %y544 %c = lshr <4 x i32> %a, %b545 store <4 x i32> %c, ptr %x546 ret void547}548 549define void @lshr_v2i64(ptr %x, ptr %y) {550; CHECK-LABEL: lshr_v2i64:551; CHECK: # %bb.0:552; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma553; CHECK-NEXT: vle64.v v8, (a0)554; CHECK-NEXT: vle64.v v9, (a1)555; CHECK-NEXT: vsrl.vv v8, v8, v9556; CHECK-NEXT: vse64.v v8, (a0)557; CHECK-NEXT: ret558 %a = load <2 x i64>, ptr %x559 %b = load <2 x i64>, ptr %y560 %c = lshr <2 x i64> %a, %b561 store <2 x i64> %c, ptr %x562 ret void563}564 565define void @ashr_v16i8(ptr %x, ptr %y) {566; CHECK-LABEL: ashr_v16i8:567; CHECK: # %bb.0:568; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma569; CHECK-NEXT: vle8.v v8, (a0)570; CHECK-NEXT: vle8.v v9, (a1)571; CHECK-NEXT: vsra.vv v8, v8, v9572; CHECK-NEXT: vse8.v v8, (a0)573; CHECK-NEXT: ret574 %a = load <16 x i8>, ptr %x575 %b = load <16 x i8>, ptr %y576 %c = ashr <16 x i8> %a, %b577 store <16 x i8> %c, ptr %x578 ret void579}580 581define void @ashr_v8i16(ptr %x, ptr %y) {582; CHECK-LABEL: ashr_v8i16:583; CHECK: # %bb.0:584; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma585; CHECK-NEXT: vle16.v v8, (a0)586; CHECK-NEXT: vle16.v v9, (a1)587; CHECK-NEXT: vsra.vv v8, v8, v9588; CHECK-NEXT: vse16.v v8, (a0)589; CHECK-NEXT: ret590 %a = load <8 x i16>, ptr %x591 %b = load <8 x i16>, ptr %y592 %c = ashr <8 x i16> %a, %b593 store <8 x i16> %c, ptr %x594 ret void595}596 597define void @ashr_v6i16(ptr %x, ptr %y) {598; CHECK-LABEL: ashr_v6i16:599; CHECK: # %bb.0:600; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma601; CHECK-NEXT: vle16.v v8, (a0)602; CHECK-NEXT: vle16.v v9, (a1)603; CHECK-NEXT: vsra.vv v8, v8, v9604; CHECK-NEXT: vse16.v v8, (a0)605; CHECK-NEXT: ret606 %a = load <6 x i16>, ptr %x607 %b = load <6 x i16>, ptr %y608 %c = ashr <6 x i16> %a, %b609 store <6 x i16> %c, ptr %x610 ret void611}612 613define void @ashr_v4i32(ptr %x, ptr %y) {614; CHECK-LABEL: ashr_v4i32:615; CHECK: # %bb.0:616; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma617; CHECK-NEXT: vle32.v v8, (a0)618; CHECK-NEXT: vle32.v v9, (a1)619; CHECK-NEXT: vsra.vv v8, v8, v9620; CHECK-NEXT: vse32.v v8, (a0)621; CHECK-NEXT: ret622 %a = load <4 x i32>, ptr %x623 %b = load <4 x i32>, ptr %y624 %c = ashr <4 x i32> %a, %b625 store <4 x i32> %c, ptr %x626 ret void627}628 629define void @ashr_v2i64(ptr %x, ptr %y) {630; CHECK-LABEL: ashr_v2i64:631; CHECK: # %bb.0:632; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma633; CHECK-NEXT: vle64.v v8, (a0)634; CHECK-NEXT: vle64.v v9, (a1)635; CHECK-NEXT: vsra.vv v8, v8, v9636; CHECK-NEXT: vse64.v v8, (a0)637; CHECK-NEXT: ret638 %a = load <2 x i64>, ptr %x639 %b = load <2 x i64>, ptr %y640 %c = ashr <2 x i64> %a, %b641 store <2 x i64> %c, ptr %x642 ret void643}644 645define void @shl_v16i8(ptr %x, ptr %y) {646; CHECK-LABEL: shl_v16i8:647; CHECK: # %bb.0:648; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma649; CHECK-NEXT: vle8.v v8, (a0)650; CHECK-NEXT: vle8.v v9, (a1)651; CHECK-NEXT: vsll.vv v8, v8, v9652; CHECK-NEXT: vse8.v v8, (a0)653; CHECK-NEXT: ret654 %a = load <16 x i8>, ptr %x655 %b = load <16 x i8>, ptr %y656 %c = shl <16 x i8> %a, %b657 store <16 x i8> %c, ptr %x658 ret void659}660 661define void @shl_v8i16(ptr %x, ptr %y) {662; CHECK-LABEL: shl_v8i16:663; CHECK: # %bb.0:664; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma665; CHECK-NEXT: vle16.v v8, (a0)666; CHECK-NEXT: vle16.v v9, (a1)667; CHECK-NEXT: vsll.vv v8, v8, v9668; CHECK-NEXT: vse16.v v8, (a0)669; CHECK-NEXT: ret670 %a = load <8 x i16>, ptr %x671 %b = load <8 x i16>, ptr %y672 %c = shl <8 x i16> %a, %b673 store <8 x i16> %c, ptr %x674 ret void675}676 677define void @shl_v6i16(ptr %x, ptr %y) {678; CHECK-LABEL: shl_v6i16:679; CHECK: # %bb.0:680; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma681; CHECK-NEXT: vle16.v v8, (a0)682; CHECK-NEXT: vle16.v v9, (a1)683; CHECK-NEXT: vsll.vv v8, v8, v9684; CHECK-NEXT: vse16.v v8, (a0)685; CHECK-NEXT: ret686 %a = load <6 x i16>, ptr %x687 %b = load <6 x i16>, ptr %y688 %c = shl <6 x i16> %a, %b689 store <6 x i16> %c, ptr %x690 ret void691}692 693define void @shl_v4i32(ptr %x, ptr %y) {694; CHECK-LABEL: shl_v4i32:695; CHECK: # %bb.0:696; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma697; CHECK-NEXT: vle32.v v8, (a0)698; CHECK-NEXT: vle32.v v9, (a1)699; CHECK-NEXT: vsll.vv v8, v8, v9700; CHECK-NEXT: vse32.v v8, (a0)701; CHECK-NEXT: ret702 %a = load <4 x i32>, ptr %x703 %b = load <4 x i32>, ptr %y704 %c = shl <4 x i32> %a, %b705 store <4 x i32> %c, ptr %x706 ret void707}708 709define void @shl_v2i64(ptr %x, ptr %y) {710; CHECK-LABEL: shl_v2i64:711; CHECK: # %bb.0:712; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma713; CHECK-NEXT: vle64.v v8, (a0)714; CHECK-NEXT: vle64.v v9, (a1)715; CHECK-NEXT: vsll.vv v8, v8, v9716; CHECK-NEXT: vse64.v v8, (a0)717; CHECK-NEXT: ret718 %a = load <2 x i64>, ptr %x719 %b = load <2 x i64>, ptr %y720 %c = shl <2 x i64> %a, %b721 store <2 x i64> %c, ptr %x722 ret void723}724 725define void @sdiv_v16i8(ptr %x, ptr %y) {726; CHECK-LABEL: sdiv_v16i8:727; CHECK: # %bb.0:728; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma729; CHECK-NEXT: vle8.v v8, (a0)730; CHECK-NEXT: vle8.v v9, (a1)731; CHECK-NEXT: vdiv.vv v8, v8, v9732; CHECK-NEXT: vse8.v v8, (a0)733; CHECK-NEXT: ret734 %a = load <16 x i8>, ptr %x735 %b = load <16 x i8>, ptr %y736 %c = sdiv <16 x i8> %a, %b737 store <16 x i8> %c, ptr %x738 ret void739}740 741define void @sdiv_v8i16(ptr %x, ptr %y) {742; CHECK-LABEL: sdiv_v8i16:743; CHECK: # %bb.0:744; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma745; CHECK-NEXT: vle16.v v8, (a0)746; CHECK-NEXT: vle16.v v9, (a1)747; CHECK-NEXT: vdiv.vv v8, v8, v9748; CHECK-NEXT: vse16.v v8, (a0)749; CHECK-NEXT: ret750 %a = load <8 x i16>, ptr %x751 %b = load <8 x i16>, ptr %y752 %c = sdiv <8 x i16> %a, %b753 store <8 x i16> %c, ptr %x754 ret void755}756 757define void @sdiv_v6i16(ptr %x, ptr %y) {758; CHECK-LABEL: sdiv_v6i16:759; CHECK: # %bb.0:760; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma761; CHECK-NEXT: vle16.v v8, (a0)762; CHECK-NEXT: vle16.v v9, (a1)763; CHECK-NEXT: vdiv.vv v8, v8, v9764; CHECK-NEXT: vse16.v v8, (a0)765; CHECK-NEXT: ret766 %a = load <6 x i16>, ptr %x767 %b = load <6 x i16>, ptr %y768 %c = sdiv <6 x i16> %a, %b769 store <6 x i16> %c, ptr %x770 ret void771}772 773define void @sdiv_v4i32(ptr %x, ptr %y) {774; CHECK-LABEL: sdiv_v4i32:775; CHECK: # %bb.0:776; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma777; CHECK-NEXT: vle32.v v8, (a0)778; CHECK-NEXT: vle32.v v9, (a1)779; CHECK-NEXT: vdiv.vv v8, v8, v9780; CHECK-NEXT: vse32.v v8, (a0)781; CHECK-NEXT: ret782 %a = load <4 x i32>, ptr %x783 %b = load <4 x i32>, ptr %y784 %c = sdiv <4 x i32> %a, %b785 store <4 x i32> %c, ptr %x786 ret void787}788 789define void @sdiv_v2i64(ptr %x, ptr %y) {790; CHECK-LABEL: sdiv_v2i64:791; CHECK: # %bb.0:792; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma793; CHECK-NEXT: vle64.v v8, (a0)794; CHECK-NEXT: vle64.v v9, (a1)795; CHECK-NEXT: vdiv.vv v8, v8, v9796; CHECK-NEXT: vse64.v v8, (a0)797; CHECK-NEXT: ret798 %a = load <2 x i64>, ptr %x799 %b = load <2 x i64>, ptr %y800 %c = sdiv <2 x i64> %a, %b801 store <2 x i64> %c, ptr %x802 ret void803}804 805define void @srem_v16i8(ptr %x, ptr %y) {806; CHECK-LABEL: srem_v16i8:807; CHECK: # %bb.0:808; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma809; CHECK-NEXT: vle8.v v8, (a0)810; CHECK-NEXT: vle8.v v9, (a1)811; CHECK-NEXT: vrem.vv v8, v8, v9812; CHECK-NEXT: vse8.v v8, (a0)813; CHECK-NEXT: ret814 %a = load <16 x i8>, ptr %x815 %b = load <16 x i8>, ptr %y816 %c = srem <16 x i8> %a, %b817 store <16 x i8> %c, ptr %x818 ret void819}820 821define void @srem_v8i16(ptr %x, ptr %y) {822; CHECK-LABEL: srem_v8i16:823; CHECK: # %bb.0:824; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma825; CHECK-NEXT: vle16.v v8, (a0)826; CHECK-NEXT: vle16.v v9, (a1)827; CHECK-NEXT: vrem.vv v8, v8, v9828; CHECK-NEXT: vse16.v v8, (a0)829; CHECK-NEXT: ret830 %a = load <8 x i16>, ptr %x831 %b = load <8 x i16>, ptr %y832 %c = srem <8 x i16> %a, %b833 store <8 x i16> %c, ptr %x834 ret void835}836 837define void @srem_v6i16(ptr %x, ptr %y) {838; CHECK-LABEL: srem_v6i16:839; CHECK: # %bb.0:840; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma841; CHECK-NEXT: vle16.v v8, (a0)842; CHECK-NEXT: vle16.v v9, (a1)843; CHECK-NEXT: vrem.vv v8, v8, v9844; CHECK-NEXT: vse16.v v8, (a0)845; CHECK-NEXT: ret846 %a = load <6 x i16>, ptr %x847 %b = load <6 x i16>, ptr %y848 %c = srem <6 x i16> %a, %b849 store <6 x i16> %c, ptr %x850 ret void851}852 853define void @srem_v4i32(ptr %x, ptr %y) {854; CHECK-LABEL: srem_v4i32:855; CHECK: # %bb.0:856; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma857; CHECK-NEXT: vle32.v v8, (a0)858; CHECK-NEXT: vle32.v v9, (a1)859; CHECK-NEXT: vrem.vv v8, v8, v9860; CHECK-NEXT: vse32.v v8, (a0)861; CHECK-NEXT: ret862 %a = load <4 x i32>, ptr %x863 %b = load <4 x i32>, ptr %y864 %c = srem <4 x i32> %a, %b865 store <4 x i32> %c, ptr %x866 ret void867}868 869define void @srem_v2i64(ptr %x, ptr %y) {870; CHECK-LABEL: srem_v2i64:871; CHECK: # %bb.0:872; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma873; CHECK-NEXT: vle64.v v8, (a0)874; CHECK-NEXT: vle64.v v9, (a1)875; CHECK-NEXT: vrem.vv v8, v8, v9876; CHECK-NEXT: vse64.v v8, (a0)877; CHECK-NEXT: ret878 %a = load <2 x i64>, ptr %x879 %b = load <2 x i64>, ptr %y880 %c = srem <2 x i64> %a, %b881 store <2 x i64> %c, ptr %x882 ret void883}884 885define void @udiv_v16i8(ptr %x, ptr %y) {886; CHECK-LABEL: udiv_v16i8:887; CHECK: # %bb.0:888; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma889; CHECK-NEXT: vle8.v v8, (a0)890; CHECK-NEXT: vle8.v v9, (a1)891; CHECK-NEXT: vdivu.vv v8, v8, v9892; CHECK-NEXT: vse8.v v8, (a0)893; CHECK-NEXT: ret894 %a = load <16 x i8>, ptr %x895 %b = load <16 x i8>, ptr %y896 %c = udiv <16 x i8> %a, %b897 store <16 x i8> %c, ptr %x898 ret void899}900 901define void @udiv_v8i16(ptr %x, ptr %y) {902; CHECK-LABEL: udiv_v8i16:903; CHECK: # %bb.0:904; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma905; CHECK-NEXT: vle16.v v8, (a0)906; CHECK-NEXT: vle16.v v9, (a1)907; CHECK-NEXT: vdivu.vv v8, v8, v9908; CHECK-NEXT: vse16.v v8, (a0)909; CHECK-NEXT: ret910 %a = load <8 x i16>, ptr %x911 %b = load <8 x i16>, ptr %y912 %c = udiv <8 x i16> %a, %b913 store <8 x i16> %c, ptr %x914 ret void915}916 917define void @udiv_v6i16(ptr %x, ptr %y) {918; CHECK-LABEL: udiv_v6i16:919; CHECK: # %bb.0:920; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma921; CHECK-NEXT: vle16.v v8, (a0)922; CHECK-NEXT: vle16.v v9, (a1)923; CHECK-NEXT: vdivu.vv v8, v8, v9924; CHECK-NEXT: vse16.v v8, (a0)925; CHECK-NEXT: ret926 %a = load <6 x i16>, ptr %x927 %b = load <6 x i16>, ptr %y928 %c = udiv <6 x i16> %a, %b929 store <6 x i16> %c, ptr %x930 ret void931}932 933define void @udiv_v4i32(ptr %x, ptr %y) {934; CHECK-LABEL: udiv_v4i32:935; CHECK: # %bb.0:936; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma937; CHECK-NEXT: vle32.v v8, (a0)938; CHECK-NEXT: vle32.v v9, (a1)939; CHECK-NEXT: vdivu.vv v8, v8, v9940; CHECK-NEXT: vse32.v v8, (a0)941; CHECK-NEXT: ret942 %a = load <4 x i32>, ptr %x943 %b = load <4 x i32>, ptr %y944 %c = udiv <4 x i32> %a, %b945 store <4 x i32> %c, ptr %x946 ret void947}948 949define void @udiv_v2i64(ptr %x, ptr %y) {950; CHECK-LABEL: udiv_v2i64:951; CHECK: # %bb.0:952; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma953; CHECK-NEXT: vle64.v v8, (a0)954; CHECK-NEXT: vle64.v v9, (a1)955; CHECK-NEXT: vdivu.vv v8, v8, v9956; CHECK-NEXT: vse64.v v8, (a0)957; CHECK-NEXT: ret958 %a = load <2 x i64>, ptr %x959 %b = load <2 x i64>, ptr %y960 %c = udiv <2 x i64> %a, %b961 store <2 x i64> %c, ptr %x962 ret void963}964 965define void @urem_v16i8(ptr %x, ptr %y) {966; CHECK-LABEL: urem_v16i8:967; CHECK: # %bb.0:968; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma969; CHECK-NEXT: vle8.v v8, (a0)970; CHECK-NEXT: vle8.v v9, (a1)971; CHECK-NEXT: vremu.vv v8, v8, v9972; CHECK-NEXT: vse8.v v8, (a0)973; CHECK-NEXT: ret974 %a = load <16 x i8>, ptr %x975 %b = load <16 x i8>, ptr %y976 %c = urem <16 x i8> %a, %b977 store <16 x i8> %c, ptr %x978 ret void979}980 981define void @urem_v8i16(ptr %x, ptr %y) {982; CHECK-LABEL: urem_v8i16:983; CHECK: # %bb.0:984; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma985; CHECK-NEXT: vle16.v v8, (a0)986; CHECK-NEXT: vle16.v v9, (a1)987; CHECK-NEXT: vremu.vv v8, v8, v9988; CHECK-NEXT: vse16.v v8, (a0)989; CHECK-NEXT: ret990 %a = load <8 x i16>, ptr %x991 %b = load <8 x i16>, ptr %y992 %c = urem <8 x i16> %a, %b993 store <8 x i16> %c, ptr %x994 ret void995}996 997define void @urem_v6i16(ptr %x, ptr %y) {998; CHECK-LABEL: urem_v6i16:999; CHECK: # %bb.0:1000; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma1001; CHECK-NEXT: vle16.v v8, (a0)1002; CHECK-NEXT: vle16.v v9, (a1)1003; CHECK-NEXT: vremu.vv v8, v8, v91004; CHECK-NEXT: vse16.v v8, (a0)1005; CHECK-NEXT: ret1006 %a = load <6 x i16>, ptr %x1007 %b = load <6 x i16>, ptr %y1008 %c = urem <6 x i16> %a, %b1009 store <6 x i16> %c, ptr %x1010 ret void1011}1012 1013define void @urem_v4i32(ptr %x, ptr %y) {1014; CHECK-LABEL: urem_v4i32:1015; CHECK: # %bb.0:1016; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma1017; CHECK-NEXT: vle32.v v8, (a0)1018; CHECK-NEXT: vle32.v v9, (a1)1019; CHECK-NEXT: vremu.vv v8, v8, v91020; CHECK-NEXT: vse32.v v8, (a0)1021; CHECK-NEXT: ret1022 %a = load <4 x i32>, ptr %x1023 %b = load <4 x i32>, ptr %y1024 %c = urem <4 x i32> %a, %b1025 store <4 x i32> %c, ptr %x1026 ret void1027}1028 1029define void @urem_v2i64(ptr %x, ptr %y) {1030; CHECK-LABEL: urem_v2i64:1031; CHECK: # %bb.0:1032; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma1033; CHECK-NEXT: vle64.v v8, (a0)1034; CHECK-NEXT: vle64.v v9, (a1)1035; CHECK-NEXT: vremu.vv v8, v8, v91036; CHECK-NEXT: vse64.v v8, (a0)1037; CHECK-NEXT: ret1038 %a = load <2 x i64>, ptr %x1039 %b = load <2 x i64>, ptr %y1040 %c = urem <2 x i64> %a, %b1041 store <2 x i64> %c, ptr %x1042 ret void1043}1044 1045define void @mulhu_v16i8(ptr %x) {1046; CHECK-LABEL: mulhu_v16i8:1047; CHECK: # %bb.0:1048; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma1049; CHECK-NEXT: vle8.v v8, (a0)1050; CHECK-NEXT: lui a1, 31051; CHECK-NEXT: vmv.v.i v9, 01052; CHECK-NEXT: lui a2, %hi(.LCPI65_0)1053; CHECK-NEXT: addi a2, a2, %lo(.LCPI65_0)1054; CHECK-NEXT: vle8.v v10, (a2)1055; CHECK-NEXT: li a2, -1281056; CHECK-NEXT: addi a1, a1, -20441057; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma1058; CHECK-NEXT: vmv.s.x v0, a11059; CHECK-NEXT: lui a1, 11060; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma1061; CHECK-NEXT: vmerge.vxm v11, v9, a2, v01062; CHECK-NEXT: addi a2, a1, 321063; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma1064; CHECK-NEXT: vmv.s.x v0, a21065; CHECK-NEXT: li a2, 5131066; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma1067; CHECK-NEXT: vmv.v.i v12, 41068; CHECK-NEXT: addi a1, a1, 781069; CHECK-NEXT: vmerge.vim v9, v9, 1, v01070; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma1071; CHECK-NEXT: vmv.s.x v0, a21072; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma1073; CHECK-NEXT: vsrl.vv v9, v8, v91074; CHECK-NEXT: vmerge.vim v12, v12, 1, v01075; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma1076; CHECK-NEXT: vmv.s.x v0, a11077; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma1078; CHECK-NEXT: vmulhu.vv v9, v9, v101079; CHECK-NEXT: vmerge.vim v10, v12, 3, v01080; CHECK-NEXT: lui a1, 81081; CHECK-NEXT: addi a1, a1, 3041082; CHECK-NEXT: vsub.vv v8, v8, v91083; CHECK-NEXT: vmulhu.vv v8, v8, v111084; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma1085; CHECK-NEXT: vmv.s.x v0, a11086; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma1087; CHECK-NEXT: vadd.vv v8, v8, v91088; CHECK-NEXT: vmerge.vim v9, v10, 2, v01089; CHECK-NEXT: vsrl.vv v8, v8, v91090; CHECK-NEXT: vse8.v v8, (a0)1091; CHECK-NEXT: ret1092 %a = load <16 x i8>, ptr %x1093 %b = udiv <16 x i8> %a, <i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25>1094 store <16 x i8> %b, ptr %x1095 ret void1096}1097 1098define void @mulhu_v8i16(ptr %x) {1099; CHECK-LABEL: mulhu_v8i16:1100; CHECK: # %bb.0:1101; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1102; CHECK-NEXT: vle16.v v8, (a0)1103; CHECK-NEXT: vmv.v.i v9, 01104; CHECK-NEXT: vsetivli zero, 7, e16, m1, ta, ma1105; CHECK-NEXT: vmv.v.i v10, 11106; CHECK-NEXT: li a1, 331107; CHECK-NEXT: vmv.s.x v0, a11108; CHECK-NEXT: lui a1, %hi(.LCPI66_0)1109; CHECK-NEXT: addi a1, a1, %lo(.LCPI66_0)1110; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1111; CHECK-NEXT: vmv.v.i v11, 31112; CHECK-NEXT: vle16.v v12, (a1)1113; CHECK-NEXT: vmerge.vim v11, v11, 2, v01114; CHECK-NEXT: vmv1r.v v13, v91115; CHECK-NEXT: vsetivli zero, 7, e16, m1, tu, ma1116; CHECK-NEXT: vslideup.vi v9, v10, 61117; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1118; CHECK-NEXT: vsrl.vv v9, v8, v91119; CHECK-NEXT: vmulhu.vv v9, v9, v121120; CHECK-NEXT: lui a1, 10485681121; CHECK-NEXT: vsetvli zero, zero, e16, m1, tu, ma1122; CHECK-NEXT: vmv.s.x v13, a11123; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma1124; CHECK-NEXT: vsub.vv v8, v8, v91125; CHECK-NEXT: vmulhu.vv v8, v8, v131126; CHECK-NEXT: vadd.vv v8, v8, v91127; CHECK-NEXT: vsetivli zero, 7, e16, m1, tu, ma1128; CHECK-NEXT: vslideup.vi v11, v10, 61129; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1130; CHECK-NEXT: vsrl.vv v8, v8, v111131; CHECK-NEXT: vse16.v v8, (a0)1132; CHECK-NEXT: ret1133 %a = load <8 x i16>, ptr %x1134 %b = udiv <8 x i16> %a, <i16 7, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>1135 store <8 x i16> %b, ptr %x1136 ret void1137}1138 1139define void @mulhu_v6i16(ptr %x) {1140; CHECK-LABEL: mulhu_v6i16:1141; CHECK: # %bb.0:1142; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma1143; CHECK-NEXT: vle16.v v8, (a0)1144; CHECK-NEXT: lui a1, %hi(.LCPI67_0)1145; CHECK-NEXT: addi a1, a1, %lo(.LCPI67_0)1146; CHECK-NEXT: vle16.v v9, (a1)1147; CHECK-NEXT: vdivu.vv v8, v8, v91148; CHECK-NEXT: vse16.v v8, (a0)1149; CHECK-NEXT: ret1150 %a = load <6 x i16>, ptr %x1151 %b = udiv <6 x i16> %a, <i16 7, i16 9, i16 10, i16 11, i16 12, i16 13>1152 store <6 x i16> %b, ptr %x1153 ret void1154}1155 1156define void @mulhu_v4i32(ptr %x) {1157; CHECK-LABEL: mulhu_v4i32:1158; CHECK: # %bb.0:1159; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma1160; CHECK-NEXT: vle32.v v8, (a0)1161; CHECK-NEXT: lui a1, 5242881162; CHECK-NEXT: vmv.v.i v9, 01163; CHECK-NEXT: vmv.s.x v10, a11164; CHECK-NEXT: lui a1, %hi(.LCPI68_0)1165; CHECK-NEXT: addi a1, a1, %lo(.LCPI68_0)1166; CHECK-NEXT: vle32.v v11, (a1)1167; CHECK-NEXT: vsetivli zero, 3, e32, m1, tu, ma1168; CHECK-NEXT: vslideup.vi v9, v10, 21169; CHECK-NEXT: lui a1, 41281170; CHECK-NEXT: addi a1, a1, 5141171; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma1172; CHECK-NEXT: vmulhu.vv v10, v8, v111173; CHECK-NEXT: vsub.vv v8, v8, v101174; CHECK-NEXT: vmulhu.vv v8, v8, v91175; CHECK-NEXT: vmv.s.x v9, a11176; CHECK-NEXT: vadd.vv v8, v8, v101177; CHECK-NEXT: vsext.vf4 v10, v91178; CHECK-NEXT: vsrl.vv v8, v8, v101179; CHECK-NEXT: vse32.v v8, (a0)1180; CHECK-NEXT: ret1181 %a = load <4 x i32>, ptr %x1182 %b = udiv <4 x i32> %a, <i32 5, i32 6, i32 7, i32 9>1183 store <4 x i32> %b, ptr %x1184 ret void1185}1186 1187define void @mulhu_v2i64(ptr %x) {1188; RV32-LABEL: mulhu_v2i64:1189; RV32: # %bb.0:1190; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma1191; RV32-NEXT: vle64.v v8, (a0)1192; RV32-NEXT: lui a1, %hi(.LCPI69_0)1193; RV32-NEXT: addi a1, a1, %lo(.LCPI69_0)1194; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma1195; RV32-NEXT: vle32.v v9, (a1)1196; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma1197; RV32-NEXT: vmulhu.vv v8, v8, v91198; RV32-NEXT: vid.v v91199; RV32-NEXT: vadd.vi v9, v9, 11200; RV32-NEXT: vsrl.vv v8, v8, v91201; RV32-NEXT: vse64.v v8, (a0)1202; RV32-NEXT: ret1203;1204; RV64-LABEL: mulhu_v2i64:1205; RV64: # %bb.0:1206; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma1207; RV64-NEXT: vle64.v v8, (a0)1208; RV64-NEXT: lui a1, 8388611209; RV64-NEXT: lui a2, 6990511210; RV64-NEXT: addi a1, a1, -8191211; RV64-NEXT: addi a2, a2, -13651212; RV64-NEXT: slli a3, a1, 321213; RV64-NEXT: add a1, a1, a31214; RV64-NEXT: slli a3, a2, 321215; RV64-NEXT: add a2, a2, a31216; RV64-NEXT: vmv.v.x v9, a11217; RV64-NEXT: vsetvli zero, zero, e64, m1, tu, ma1218; RV64-NEXT: vmv.s.x v9, a21219; RV64-NEXT: vsetvli zero, zero, e64, m1, ta, ma1220; RV64-NEXT: vmulhu.vv v8, v8, v91221; RV64-NEXT: vid.v v91222; RV64-NEXT: vadd.vi v9, v9, 11223; RV64-NEXT: vsrl.vv v8, v8, v91224; RV64-NEXT: vse64.v v8, (a0)1225; RV64-NEXT: ret1226 %a = load <2 x i64>, ptr %x1227 %b = udiv <2 x i64> %a, <i64 3, i64 5>1228 store <2 x i64> %b, ptr %x1229 ret void1230}1231 1232define void @mulhs_v16i8(ptr %x) {1233; CHECK-LABEL: mulhs_v16i8:1234; CHECK: # %bb.0:1235; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma1236; CHECK-NEXT: vle8.v v8, (a0)1237; CHECK-NEXT: li a1, -1231238; CHECK-NEXT: vmv.v.x v9, a11239; CHECK-NEXT: lui a1, 51240; CHECK-NEXT: addi a1, a1, -14521241; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma1242; CHECK-NEXT: vmv.s.x v0, a11243; CHECK-NEXT: li a1, 571244; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma1245; CHECK-NEXT: vmerge.vxm v9, v9, a1, v01246; CHECK-NEXT: vmv.v.i v10, 71247; CHECK-NEXT: vmulhu.vv v8, v8, v91248; CHECK-NEXT: vmerge.vim v9, v10, 1, v01249; CHECK-NEXT: vsrl.vv v8, v8, v91250; CHECK-NEXT: vse8.v v8, (a0)1251; CHECK-NEXT: ret1252 %a = load <16 x i8>, ptr %x1253 %b = udiv <16 x i8> %a, <i8 -9, i8 -9, i8 9, i8 -9, i8 9, i8 -9, i8 9, i8 -9, i8 -9, i8 9, i8 -9, i8 9, i8 -9, i8 -9, i8 9, i8 -9>1254 store <16 x i8> %b, ptr %x1255 ret void1256}1257 1258define void @mulhs_v8i16(ptr %x) {1259; CHECK-LABEL: mulhs_v8i16:1260; CHECK: # %bb.0:1261; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1262; CHECK-NEXT: vle16.v v8, (a0)1263; CHECK-NEXT: li a1, 1051264; CHECK-NEXT: vmv.s.x v0, a11265; CHECK-NEXT: lui a1, 51266; CHECK-NEXT: addi a1, a1, -17551267; CHECK-NEXT: vmv.v.x v9, a11268; CHECK-NEXT: lui a1, 10485711269; CHECK-NEXT: addi a1, a1, 17551270; CHECK-NEXT: vmerge.vxm v9, v9, a1, v01271; CHECK-NEXT: vmulh.vv v8, v8, v91272; CHECK-NEXT: vsra.vi v8, v8, 11273; CHECK-NEXT: vsrl.vi v9, v8, 151274; CHECK-NEXT: vadd.vv v8, v8, v91275; CHECK-NEXT: vse16.v v8, (a0)1276; CHECK-NEXT: ret1277 %a = load <8 x i16>, ptr %x1278 %b = sdiv <8 x i16> %a, <i16 -7, i16 7, i16 7, i16 -7, i16 7, i16 -7, i16 -7, i16 7>1279 store <8 x i16> %b, ptr %x1280 ret void1281}1282 1283define void @mulhs_v6i16(ptr %x) {1284; CHECK-LABEL: mulhs_v6i16:1285; CHECK: # %bb.0:1286; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma1287; CHECK-NEXT: vle16.v v8, (a0)1288; CHECK-NEXT: li a1, 221289; CHECK-NEXT: vmv.s.x v0, a11290; CHECK-NEXT: vmv.v.i v9, -71291; CHECK-NEXT: vmerge.vim v9, v9, 7, v01292; CHECK-NEXT: vdiv.vv v8, v8, v91293; CHECK-NEXT: vse16.v v8, (a0)1294; CHECK-NEXT: ret1295 %a = load <6 x i16>, ptr %x1296 %b = sdiv <6 x i16> %a, <i16 -7, i16 7, i16 7, i16 -7, i16 7, i16 -7>1297 store <6 x i16> %b, ptr %x1298 ret void1299}1300 1301define void @mulhs_v4i32(ptr %x) {1302; RV32-LABEL: mulhs_v4i32:1303; RV32: # %bb.0:1304; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma1305; RV32-NEXT: vle32.v v8, (a0)1306; RV32-NEXT: lui a1, 4194301307; RV32-NEXT: vmv.v.i v0, 51308; RV32-NEXT: addi a1, a1, 16391309; RV32-NEXT: vmv.v.x v9, a11310; RV32-NEXT: lui a1, 6291461311; RV32-NEXT: addi a1, a1, -16391312; RV32-NEXT: vmerge.vxm v9, v9, a1, v01313; RV32-NEXT: vmulh.vv v8, v8, v91314; RV32-NEXT: vsrl.vi v9, v8, 311315; RV32-NEXT: vsra.vi v8, v8, 11316; RV32-NEXT: vadd.vv v8, v8, v91317; RV32-NEXT: vse32.v v8, (a0)1318; RV32-NEXT: ret1319;1320; RV64-LABEL: mulhs_v4i32:1321; RV64: # %bb.0:1322; RV64-NEXT: lui a1, %hi(.LCPI73_0)1323; RV64-NEXT: ld a1, %lo(.LCPI73_0)(a1)1324; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma1325; RV64-NEXT: vle32.v v8, (a0)1326; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma1327; RV64-NEXT: vmv.v.x v9, a11328; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma1329; RV64-NEXT: vmulh.vv v8, v8, v91330; RV64-NEXT: vsra.vi v8, v8, 11331; RV64-NEXT: vsrl.vi v9, v8, 311332; RV64-NEXT: vadd.vv v8, v8, v91333; RV64-NEXT: vse32.v v8, (a0)1334; RV64-NEXT: ret1335 %a = load <4 x i32>, ptr %x1336 %b = sdiv <4 x i32> %a, <i32 -5, i32 5, i32 -5, i32 5>1337 store <4 x i32> %b, ptr %x1338 ret void1339}1340 1341define void @mulhs_v2i64(ptr %x) {1342; RV32-LABEL: mulhs_v2i64:1343; RV32: # %bb.0:1344; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma1345; RV32-NEXT: vle64.v v8, (a0)1346; RV32-NEXT: lui a1, 3495251347; RV32-NEXT: vid.v v91348; RV32-NEXT: addi a2, a1, 13651349; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma1350; RV32-NEXT: vmv.v.x v10, a21351; RV32-NEXT: li a2, 631352; RV32-NEXT: addi a1, a1, 13661353; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma1354; RV32-NEXT: vrsub.vi v11, v9, 01355; RV32-NEXT: vsetvli zero, zero, e32, mf2, tu, ma1356; RV32-NEXT: vmv.s.x v10, a11357; RV32-NEXT: vsetvli zero, zero, e64, m1, ta, ma1358; RV32-NEXT: vmulh.vv v10, v8, v101359; RV32-NEXT: vmadd.vv v11, v8, v101360; RV32-NEXT: vsrl.vx v8, v11, a21361; RV32-NEXT: vsra.vv v9, v11, v91362; RV32-NEXT: vadd.vv v8, v9, v81363; RV32-NEXT: vse64.v v8, (a0)1364; RV32-NEXT: ret1365;1366; RV64-LABEL: mulhs_v2i64:1367; RV64: # %bb.0:1368; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma1369; RV64-NEXT: vle64.v v8, (a0)1370; RV64-NEXT: lui a1, 3495251371; RV64-NEXT: addi a1, a1, 13651372; RV64-NEXT: slli a2, a1, 321373; RV64-NEXT: add a1, a1, a21374; RV64-NEXT: lui a2, %hi(.LCPI74_0)1375; RV64-NEXT: vid.v v91376; RV64-NEXT: ld a2, %lo(.LCPI74_0)(a2)1377; RV64-NEXT: vmv.v.x v10, a11378; RV64-NEXT: li a1, 631379; RV64-NEXT: vrsub.vi v11, v9, 01380; RV64-NEXT: vsetvli zero, zero, e64, m1, tu, ma1381; RV64-NEXT: vmv.s.x v10, a21382; RV64-NEXT: vsetvli zero, zero, e64, m1, ta, ma1383; RV64-NEXT: vmulh.vv v10, v8, v101384; RV64-NEXT: vmadd.vv v11, v8, v101385; RV64-NEXT: vsrl.vx v8, v11, a11386; RV64-NEXT: vsra.vv v9, v11, v91387; RV64-NEXT: vadd.vv v8, v9, v81388; RV64-NEXT: vse64.v v8, (a0)1389; RV64-NEXT: ret1390 %a = load <2 x i64>, ptr %x1391 %b = sdiv <2 x i64> %a, <i64 3, i64 -3>1392 store <2 x i64> %b, ptr %x1393 ret void1394}1395 1396define void @smin_v16i8(ptr %x, ptr %y) {1397; CHECK-LABEL: smin_v16i8:1398; CHECK: # %bb.0:1399; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma1400; CHECK-NEXT: vle8.v v8, (a0)1401; CHECK-NEXT: vle8.v v9, (a1)1402; CHECK-NEXT: vmin.vv v8, v8, v91403; CHECK-NEXT: vse8.v v8, (a0)1404; CHECK-NEXT: ret1405 %a = load <16 x i8>, ptr %x1406 %b = load <16 x i8>, ptr %y1407 %cc = icmp slt <16 x i8> %a, %b1408 %c = select <16 x i1> %cc, <16 x i8> %a, <16 x i8> %b1409 store <16 x i8> %c, ptr %x1410 ret void1411}1412 1413define void @smin_v8i16(ptr %x, ptr %y) {1414; CHECK-LABEL: smin_v8i16:1415; CHECK: # %bb.0:1416; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1417; CHECK-NEXT: vle16.v v8, (a0)1418; CHECK-NEXT: vle16.v v9, (a1)1419; CHECK-NEXT: vmin.vv v8, v8, v91420; CHECK-NEXT: vse16.v v8, (a0)1421; CHECK-NEXT: ret1422 %a = load <8 x i16>, ptr %x1423 %b = load <8 x i16>, ptr %y1424 %cc = icmp slt <8 x i16> %a, %b1425 %c = select <8 x i1> %cc, <8 x i16> %a, <8 x i16> %b1426 store <8 x i16> %c, ptr %x1427 ret void1428}1429 1430define void @smin_v6i16(ptr %x, ptr %y) {1431; CHECK-LABEL: smin_v6i16:1432; CHECK: # %bb.0:1433; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma1434; CHECK-NEXT: vle16.v v8, (a0)1435; CHECK-NEXT: vle16.v v9, (a1)1436; CHECK-NEXT: vmin.vv v8, v8, v91437; CHECK-NEXT: vse16.v v8, (a0)1438; CHECK-NEXT: ret1439 %a = load <6 x i16>, ptr %x1440 %b = load <6 x i16>, ptr %y1441 %cc = icmp slt <6 x i16> %a, %b1442 %c = select <6 x i1> %cc, <6 x i16> %a, <6 x i16> %b1443 store <6 x i16> %c, ptr %x1444 ret void1445}1446 1447define void @smin_v4i32(ptr %x, ptr %y) {1448; CHECK-LABEL: smin_v4i32:1449; CHECK: # %bb.0:1450; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma1451; CHECK-NEXT: vle32.v v8, (a0)1452; CHECK-NEXT: vle32.v v9, (a1)1453; CHECK-NEXT: vmin.vv v8, v8, v91454; CHECK-NEXT: vse32.v v8, (a0)1455; CHECK-NEXT: ret1456 %a = load <4 x i32>, ptr %x1457 %b = load <4 x i32>, ptr %y1458 %cc = icmp slt <4 x i32> %a, %b1459 %c = select <4 x i1> %cc, <4 x i32> %a, <4 x i32> %b1460 store <4 x i32> %c, ptr %x1461 ret void1462}1463 1464define void @smin_v2i64(ptr %x, ptr %y) {1465; CHECK-LABEL: smin_v2i64:1466; CHECK: # %bb.0:1467; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma1468; CHECK-NEXT: vle64.v v8, (a0)1469; CHECK-NEXT: vle64.v v9, (a1)1470; CHECK-NEXT: vmin.vv v8, v8, v91471; CHECK-NEXT: vse64.v v8, (a0)1472; CHECK-NEXT: ret1473 %a = load <2 x i64>, ptr %x1474 %b = load <2 x i64>, ptr %y1475 %cc = icmp slt <2 x i64> %a, %b1476 %c = select <2 x i1> %cc, <2 x i64> %a, <2 x i64> %b1477 store <2 x i64> %c, ptr %x1478 ret void1479}1480 1481define void @smin_vx_v16i8(ptr %x, i8 %y) {1482; CHECK-LABEL: smin_vx_v16i8:1483; CHECK: # %bb.0:1484; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma1485; CHECK-NEXT: vle8.v v8, (a0)1486; CHECK-NEXT: vmin.vx v8, v8, a11487; CHECK-NEXT: vse8.v v8, (a0)1488; CHECK-NEXT: ret1489 %a = load <16 x i8>, ptr %x1490 %b = insertelement <16 x i8> poison, i8 %y, i32 01491 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer1492 %d = call <16 x i8> @llvm.smin.v16i8(<16 x i8> %a, <16 x i8> %c)1493 store <16 x i8> %d, ptr %x1494 ret void1495}1496 1497define void @smin_vx_v8i16(ptr %x, i16 %y) {1498; CHECK-LABEL: smin_vx_v8i16:1499; CHECK: # %bb.0:1500; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1501; CHECK-NEXT: vle16.v v8, (a0)1502; CHECK-NEXT: vmin.vx v8, v8, a11503; CHECK-NEXT: vse16.v v8, (a0)1504; CHECK-NEXT: ret1505 %a = load <8 x i16>, ptr %x1506 %b = insertelement <8 x i16> poison, i16 %y, i32 01507 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer1508 %d = call <8 x i16> @llvm.smin.v8i16(<8 x i16> %a, <8 x i16> %c)1509 store <8 x i16> %d, ptr %x1510 ret void1511}1512 1513define void @smin_vx_v6i16(ptr %x, i16 %y) {1514; CHECK-LABEL: smin_vx_v6i16:1515; CHECK: # %bb.0:1516; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma1517; CHECK-NEXT: vle16.v v8, (a0)1518; CHECK-NEXT: vmin.vx v8, v8, a11519; CHECK-NEXT: vse16.v v8, (a0)1520; CHECK-NEXT: ret1521 %a = load <6 x i16>, ptr %x1522 %b = insertelement <6 x i16> poison, i16 %y, i32 01523 %c = shufflevector <6 x i16> %b, <6 x i16> poison, <6 x i32> zeroinitializer1524 %d = call <6 x i16> @llvm.smin.v6i16(<6 x i16> %a, <6 x i16> %c)1525 store <6 x i16> %d, ptr %x1526 ret void1527}1528 1529define void @smin_vx_v4i32(ptr %x, i32 %y) {1530; CHECK-LABEL: smin_vx_v4i32:1531; CHECK: # %bb.0:1532; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma1533; CHECK-NEXT: vle32.v v8, (a0)1534; CHECK-NEXT: vmin.vx v8, v8, a11535; CHECK-NEXT: vse32.v v8, (a0)1536; CHECK-NEXT: ret1537 %a = load <4 x i32>, ptr %x1538 %b = insertelement <4 x i32> poison, i32 %y, i32 01539 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer1540 %d = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %a, <4 x i32> %c)1541 store <4 x i32> %d, ptr %x1542 ret void1543}1544 1545define void @smin_xv_v16i8(ptr %x, i8 %y) {1546; CHECK-LABEL: smin_xv_v16i8:1547; CHECK: # %bb.0:1548; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma1549; CHECK-NEXT: vle8.v v8, (a0)1550; CHECK-NEXT: vmin.vx v8, v8, a11551; CHECK-NEXT: vse8.v v8, (a0)1552; CHECK-NEXT: ret1553 %a = load <16 x i8>, ptr %x1554 %b = insertelement <16 x i8> poison, i8 %y, i32 01555 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer1556 %d = call <16 x i8> @llvm.smin.v16i8(<16 x i8> %c, <16 x i8> %a)1557 store <16 x i8> %d, ptr %x1558 ret void1559}1560 1561define void @smin_xv_v8i16(ptr %x, i16 %y) {1562; CHECK-LABEL: smin_xv_v8i16:1563; CHECK: # %bb.0:1564; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1565; CHECK-NEXT: vle16.v v8, (a0)1566; CHECK-NEXT: vmin.vx v8, v8, a11567; CHECK-NEXT: vse16.v v8, (a0)1568; CHECK-NEXT: ret1569 %a = load <8 x i16>, ptr %x1570 %b = insertelement <8 x i16> poison, i16 %y, i32 01571 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer1572 %d = call <8 x i16> @llvm.smin.v8i16(<8 x i16> %c, <8 x i16> %a)1573 store <8 x i16> %d, ptr %x1574 ret void1575}1576 1577define void @smin_xv_v6i16(ptr %x, i16 %y) {1578; CHECK-LABEL: smin_xv_v6i16:1579; CHECK: # %bb.0:1580; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma1581; CHECK-NEXT: vle16.v v8, (a0)1582; CHECK-NEXT: vmin.vx v8, v8, a11583; CHECK-NEXT: vse16.v v8, (a0)1584; CHECK-NEXT: ret1585 %a = load <6 x i16>, ptr %x1586 %b = insertelement <6 x i16> poison, i16 %y, i32 01587 %c = shufflevector <6 x i16> %b, <6 x i16> poison, <6 x i32> zeroinitializer1588 %d = call <6 x i16> @llvm.smin.v6i16(<6 x i16> %c, <6 x i16> %a)1589 store <6 x i16> %d, ptr %x1590 ret void1591}1592 1593define void @smin_xv_v4i32(ptr %x, i32 %y) {1594; CHECK-LABEL: smin_xv_v4i32:1595; CHECK: # %bb.0:1596; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma1597; CHECK-NEXT: vle32.v v8, (a0)1598; CHECK-NEXT: vmin.vx v8, v8, a11599; CHECK-NEXT: vse32.v v8, (a0)1600; CHECK-NEXT: ret1601 %a = load <4 x i32>, ptr %x1602 %b = insertelement <4 x i32> poison, i32 %y, i32 01603 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer1604 %d = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %c, <4 x i32> %a)1605 store <4 x i32> %d, ptr %x1606 ret void1607}1608 1609define void @smax_v16i8(ptr %x, ptr %y) {1610; CHECK-LABEL: smax_v16i8:1611; CHECK: # %bb.0:1612; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma1613; CHECK-NEXT: vle8.v v8, (a0)1614; CHECK-NEXT: vle8.v v9, (a1)1615; CHECK-NEXT: vmax.vv v8, v8, v91616; CHECK-NEXT: vse8.v v8, (a0)1617; CHECK-NEXT: ret1618 %a = load <16 x i8>, ptr %x1619 %b = load <16 x i8>, ptr %y1620 %cc = icmp sgt <16 x i8> %a, %b1621 %c = select <16 x i1> %cc, <16 x i8> %a, <16 x i8> %b1622 store <16 x i8> %c, ptr %x1623 ret void1624}1625 1626define void @smax_v8i16(ptr %x, ptr %y) {1627; CHECK-LABEL: smax_v8i16:1628; CHECK: # %bb.0:1629; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1630; CHECK-NEXT: vle16.v v8, (a0)1631; CHECK-NEXT: vle16.v v9, (a1)1632; CHECK-NEXT: vmax.vv v8, v8, v91633; CHECK-NEXT: vse16.v v8, (a0)1634; CHECK-NEXT: ret1635 %a = load <8 x i16>, ptr %x1636 %b = load <8 x i16>, ptr %y1637 %cc = icmp sgt <8 x i16> %a, %b1638 %c = select <8 x i1> %cc, <8 x i16> %a, <8 x i16> %b1639 store <8 x i16> %c, ptr %x1640 ret void1641}1642 1643define void @smax_v6i16(ptr %x, ptr %y) {1644; CHECK-LABEL: smax_v6i16:1645; CHECK: # %bb.0:1646; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma1647; CHECK-NEXT: vle16.v v8, (a0)1648; CHECK-NEXT: vle16.v v9, (a1)1649; CHECK-NEXT: vmax.vv v8, v8, v91650; CHECK-NEXT: vse16.v v8, (a0)1651; CHECK-NEXT: ret1652 %a = load <6 x i16>, ptr %x1653 %b = load <6 x i16>, ptr %y1654 %cc = icmp sgt <6 x i16> %a, %b1655 %c = select <6 x i1> %cc, <6 x i16> %a, <6 x i16> %b1656 store <6 x i16> %c, ptr %x1657 ret void1658}1659 1660define void @smax_v4i32(ptr %x, ptr %y) {1661; CHECK-LABEL: smax_v4i32:1662; CHECK: # %bb.0:1663; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma1664; CHECK-NEXT: vle32.v v8, (a0)1665; CHECK-NEXT: vle32.v v9, (a1)1666; CHECK-NEXT: vmax.vv v8, v8, v91667; CHECK-NEXT: vse32.v v8, (a0)1668; CHECK-NEXT: ret1669 %a = load <4 x i32>, ptr %x1670 %b = load <4 x i32>, ptr %y1671 %cc = icmp sgt <4 x i32> %a, %b1672 %c = select <4 x i1> %cc, <4 x i32> %a, <4 x i32> %b1673 store <4 x i32> %c, ptr %x1674 ret void1675}1676 1677define void @smax_v2i64(ptr %x, ptr %y) {1678; CHECK-LABEL: smax_v2i64:1679; CHECK: # %bb.0:1680; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma1681; CHECK-NEXT: vle64.v v8, (a0)1682; CHECK-NEXT: vle64.v v9, (a1)1683; CHECK-NEXT: vmax.vv v8, v8, v91684; CHECK-NEXT: vse64.v v8, (a0)1685; CHECK-NEXT: ret1686 %a = load <2 x i64>, ptr %x1687 %b = load <2 x i64>, ptr %y1688 %cc = icmp sgt <2 x i64> %a, %b1689 %c = select <2 x i1> %cc, <2 x i64> %a, <2 x i64> %b1690 store <2 x i64> %c, ptr %x1691 ret void1692}1693 1694define void @smax_vx_v16i8(ptr %x, i8 %y) {1695; CHECK-LABEL: smax_vx_v16i8:1696; CHECK: # %bb.0:1697; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma1698; CHECK-NEXT: vle8.v v8, (a0)1699; CHECK-NEXT: vmax.vx v8, v8, a11700; CHECK-NEXT: vse8.v v8, (a0)1701; CHECK-NEXT: ret1702 %a = load <16 x i8>, ptr %x1703 %b = insertelement <16 x i8> poison, i8 %y, i32 01704 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer1705 %d = call <16 x i8> @llvm.smax.v16i8(<16 x i8> %a, <16 x i8> %c)1706 store <16 x i8> %d, ptr %x1707 ret void1708}1709 1710define void @smax_vx_v8i16(ptr %x, i16 %y) {1711; CHECK-LABEL: smax_vx_v8i16:1712; CHECK: # %bb.0:1713; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1714; CHECK-NEXT: vle16.v v8, (a0)1715; CHECK-NEXT: vmax.vx v8, v8, a11716; CHECK-NEXT: vse16.v v8, (a0)1717; CHECK-NEXT: ret1718 %a = load <8 x i16>, ptr %x1719 %b = insertelement <8 x i16> poison, i16 %y, i32 01720 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer1721 %d = call <8 x i16> @llvm.smax.v8i16(<8 x i16> %a, <8 x i16> %c)1722 store <8 x i16> %d, ptr %x1723 ret void1724}1725 1726define void @smax_vx_v6i16(ptr %x, i16 %y) {1727; CHECK-LABEL: smax_vx_v6i16:1728; CHECK: # %bb.0:1729; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma1730; CHECK-NEXT: vle16.v v8, (a0)1731; CHECK-NEXT: vmax.vx v8, v8, a11732; CHECK-NEXT: vse16.v v8, (a0)1733; CHECK-NEXT: ret1734 %a = load <6 x i16>, ptr %x1735 %b = insertelement <6 x i16> poison, i16 %y, i32 01736 %c = shufflevector <6 x i16> %b, <6 x i16> poison, <6 x i32> zeroinitializer1737 %d = call <6 x i16> @llvm.smax.v6i16(<6 x i16> %a, <6 x i16> %c)1738 store <6 x i16> %d, ptr %x1739 ret void1740}1741 1742define void @smax_vx_v4i32(ptr %x, i32 %y) {1743; CHECK-LABEL: smax_vx_v4i32:1744; CHECK: # %bb.0:1745; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma1746; CHECK-NEXT: vle32.v v8, (a0)1747; CHECK-NEXT: vmax.vx v8, v8, a11748; CHECK-NEXT: vse32.v v8, (a0)1749; CHECK-NEXT: ret1750 %a = load <4 x i32>, ptr %x1751 %b = insertelement <4 x i32> poison, i32 %y, i32 01752 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer1753 %d = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %a, <4 x i32> %c)1754 store <4 x i32> %d, ptr %x1755 ret void1756}1757 1758define void @smax_xv_v16i8(ptr %x, i8 %y) {1759; CHECK-LABEL: smax_xv_v16i8:1760; CHECK: # %bb.0:1761; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma1762; CHECK-NEXT: vle8.v v8, (a0)1763; CHECK-NEXT: vmax.vx v8, v8, a11764; CHECK-NEXT: vse8.v v8, (a0)1765; CHECK-NEXT: ret1766 %a = load <16 x i8>, ptr %x1767 %b = insertelement <16 x i8> poison, i8 %y, i32 01768 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer1769 %d = call <16 x i8> @llvm.smax.v16i8(<16 x i8> %c, <16 x i8> %a)1770 store <16 x i8> %d, ptr %x1771 ret void1772}1773 1774define void @smax_xv_v8i16(ptr %x, i16 %y) {1775; CHECK-LABEL: smax_xv_v8i16:1776; CHECK: # %bb.0:1777; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1778; CHECK-NEXT: vle16.v v8, (a0)1779; CHECK-NEXT: vmax.vx v8, v8, a11780; CHECK-NEXT: vse16.v v8, (a0)1781; CHECK-NEXT: ret1782 %a = load <8 x i16>, ptr %x1783 %b = insertelement <8 x i16> poison, i16 %y, i32 01784 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer1785 %d = call <8 x i16> @llvm.smax.v8i16(<8 x i16> %c, <8 x i16> %a)1786 store <8 x i16> %d, ptr %x1787 ret void1788}1789 1790define void @smax_xv_v6i16(ptr %x, i16 %y) {1791; CHECK-LABEL: smax_xv_v6i16:1792; CHECK: # %bb.0:1793; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma1794; CHECK-NEXT: vle16.v v8, (a0)1795; CHECK-NEXT: vmax.vx v8, v8, a11796; CHECK-NEXT: vse16.v v8, (a0)1797; CHECK-NEXT: ret1798 %a = load <6 x i16>, ptr %x1799 %b = insertelement <6 x i16> poison, i16 %y, i32 01800 %c = shufflevector <6 x i16> %b, <6 x i16> poison, <6 x i32> zeroinitializer1801 %d = call <6 x i16> @llvm.smax.v6i16(<6 x i16> %c, <6 x i16> %a)1802 store <6 x i16> %d, ptr %x1803 ret void1804}1805 1806define void @smax_xv_v4i32(ptr %x, i32 %y) {1807; CHECK-LABEL: smax_xv_v4i32:1808; CHECK: # %bb.0:1809; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma1810; CHECK-NEXT: vle32.v v8, (a0)1811; CHECK-NEXT: vmax.vx v8, v8, a11812; CHECK-NEXT: vse32.v v8, (a0)1813; CHECK-NEXT: ret1814 %a = load <4 x i32>, ptr %x1815 %b = insertelement <4 x i32> poison, i32 %y, i32 01816 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer1817 %d = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %c, <4 x i32> %a)1818 store <4 x i32> %d, ptr %x1819 ret void1820}1821 1822define void @umin_v16i8(ptr %x, ptr %y) {1823; CHECK-LABEL: umin_v16i8:1824; CHECK: # %bb.0:1825; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma1826; CHECK-NEXT: vle8.v v8, (a0)1827; CHECK-NEXT: vle8.v v9, (a1)1828; CHECK-NEXT: vminu.vv v8, v8, v91829; CHECK-NEXT: vse8.v v8, (a0)1830; CHECK-NEXT: ret1831 %a = load <16 x i8>, ptr %x1832 %b = load <16 x i8>, ptr %y1833 %cc = icmp ult <16 x i8> %a, %b1834 %c = select <16 x i1> %cc, <16 x i8> %a, <16 x i8> %b1835 store <16 x i8> %c, ptr %x1836 ret void1837}1838 1839define void @umin_v8i16(ptr %x, ptr %y) {1840; CHECK-LABEL: umin_v8i16:1841; CHECK: # %bb.0:1842; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1843; CHECK-NEXT: vle16.v v8, (a0)1844; CHECK-NEXT: vle16.v v9, (a1)1845; CHECK-NEXT: vminu.vv v8, v8, v91846; CHECK-NEXT: vse16.v v8, (a0)1847; CHECK-NEXT: ret1848 %a = load <8 x i16>, ptr %x1849 %b = load <8 x i16>, ptr %y1850 %cc = icmp ult <8 x i16> %a, %b1851 %c = select <8 x i1> %cc, <8 x i16> %a, <8 x i16> %b1852 store <8 x i16> %c, ptr %x1853 ret void1854}1855 1856define void @umin_v6i16(ptr %x, ptr %y) {1857; CHECK-LABEL: umin_v6i16:1858; CHECK: # %bb.0:1859; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma1860; CHECK-NEXT: vle16.v v8, (a0)1861; CHECK-NEXT: vle16.v v9, (a1)1862; CHECK-NEXT: vminu.vv v8, v8, v91863; CHECK-NEXT: vse16.v v8, (a0)1864; CHECK-NEXT: ret1865 %a = load <6 x i16>, ptr %x1866 %b = load <6 x i16>, ptr %y1867 %cc = icmp ult <6 x i16> %a, %b1868 %c = select <6 x i1> %cc, <6 x i16> %a, <6 x i16> %b1869 store <6 x i16> %c, ptr %x1870 ret void1871}1872 1873define void @umin_v4i32(ptr %x, ptr %y) {1874; CHECK-LABEL: umin_v4i32:1875; CHECK: # %bb.0:1876; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma1877; CHECK-NEXT: vle32.v v8, (a0)1878; CHECK-NEXT: vle32.v v9, (a1)1879; CHECK-NEXT: vminu.vv v8, v8, v91880; CHECK-NEXT: vse32.v v8, (a0)1881; CHECK-NEXT: ret1882 %a = load <4 x i32>, ptr %x1883 %b = load <4 x i32>, ptr %y1884 %cc = icmp ult <4 x i32> %a, %b1885 %c = select <4 x i1> %cc, <4 x i32> %a, <4 x i32> %b1886 store <4 x i32> %c, ptr %x1887 ret void1888}1889 1890define void @umin_v2i64(ptr %x, ptr %y) {1891; CHECK-LABEL: umin_v2i64:1892; CHECK: # %bb.0:1893; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma1894; CHECK-NEXT: vle64.v v8, (a0)1895; CHECK-NEXT: vle64.v v9, (a1)1896; CHECK-NEXT: vminu.vv v8, v8, v91897; CHECK-NEXT: vse64.v v8, (a0)1898; CHECK-NEXT: ret1899 %a = load <2 x i64>, ptr %x1900 %b = load <2 x i64>, ptr %y1901 %cc = icmp ult <2 x i64> %a, %b1902 %c = select <2 x i1> %cc, <2 x i64> %a, <2 x i64> %b1903 store <2 x i64> %c, ptr %x1904 ret void1905}1906 1907define void @umin_vx_v16i8(ptr %x, i8 %y) {1908; CHECK-LABEL: umin_vx_v16i8:1909; CHECK: # %bb.0:1910; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma1911; CHECK-NEXT: vle8.v v8, (a0)1912; CHECK-NEXT: vminu.vx v8, v8, a11913; CHECK-NEXT: vse8.v v8, (a0)1914; CHECK-NEXT: ret1915 %a = load <16 x i8>, ptr %x1916 %b = insertelement <16 x i8> poison, i8 %y, i32 01917 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer1918 %d = call <16 x i8> @llvm.umin.v16i8(<16 x i8> %a, <16 x i8> %c)1919 store <16 x i8> %d, ptr %x1920 ret void1921}1922 1923define void @umin_vx_v8i16(ptr %x, i16 %y) {1924; CHECK-LABEL: umin_vx_v8i16:1925; CHECK: # %bb.0:1926; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1927; CHECK-NEXT: vle16.v v8, (a0)1928; CHECK-NEXT: vminu.vx v8, v8, a11929; CHECK-NEXT: vse16.v v8, (a0)1930; CHECK-NEXT: ret1931 %a = load <8 x i16>, ptr %x1932 %b = insertelement <8 x i16> poison, i16 %y, i32 01933 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer1934 %d = call <8 x i16> @llvm.umin.v8i16(<8 x i16> %a, <8 x i16> %c)1935 store <8 x i16> %d, ptr %x1936 ret void1937}1938 1939define void @umin_vx_v6i16(ptr %x, i16 %y) {1940; CHECK-LABEL: umin_vx_v6i16:1941; CHECK: # %bb.0:1942; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma1943; CHECK-NEXT: vle16.v v8, (a0)1944; CHECK-NEXT: vminu.vx v8, v8, a11945; CHECK-NEXT: vse16.v v8, (a0)1946; CHECK-NEXT: ret1947 %a = load <6 x i16>, ptr %x1948 %b = insertelement <6 x i16> poison, i16 %y, i32 01949 %c = shufflevector <6 x i16> %b, <6 x i16> poison, <6 x i32> zeroinitializer1950 %d = call <6 x i16> @llvm.umin.v6i16(<6 x i16> %a, <6 x i16> %c)1951 store <6 x i16> %d, ptr %x1952 ret void1953}1954 1955define void @umin_vx_v4i32(ptr %x, i32 %y) {1956; CHECK-LABEL: umin_vx_v4i32:1957; CHECK: # %bb.0:1958; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma1959; CHECK-NEXT: vle32.v v8, (a0)1960; CHECK-NEXT: vminu.vx v8, v8, a11961; CHECK-NEXT: vse32.v v8, (a0)1962; CHECK-NEXT: ret1963 %a = load <4 x i32>, ptr %x1964 %b = insertelement <4 x i32> poison, i32 %y, i32 01965 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer1966 %d = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %a, <4 x i32> %c)1967 store <4 x i32> %d, ptr %x1968 ret void1969}1970 1971define void @umin_xv_v16i8(ptr %x, i8 %y) {1972; CHECK-LABEL: umin_xv_v16i8:1973; CHECK: # %bb.0:1974; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma1975; CHECK-NEXT: vle8.v v8, (a0)1976; CHECK-NEXT: vminu.vx v8, v8, a11977; CHECK-NEXT: vse8.v v8, (a0)1978; CHECK-NEXT: ret1979 %a = load <16 x i8>, ptr %x1980 %b = insertelement <16 x i8> poison, i8 %y, i32 01981 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer1982 %d = call <16 x i8> @llvm.umin.v16i8(<16 x i8> %c, <16 x i8> %a)1983 store <16 x i8> %d, ptr %x1984 ret void1985}1986 1987define void @umin_xv_v8i16(ptr %x, i16 %y) {1988; CHECK-LABEL: umin_xv_v8i16:1989; CHECK: # %bb.0:1990; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma1991; CHECK-NEXT: vle16.v v8, (a0)1992; CHECK-NEXT: vminu.vx v8, v8, a11993; CHECK-NEXT: vse16.v v8, (a0)1994; CHECK-NEXT: ret1995 %a = load <8 x i16>, ptr %x1996 %b = insertelement <8 x i16> poison, i16 %y, i32 01997 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer1998 %d = call <8 x i16> @llvm.umin.v8i16(<8 x i16> %c, <8 x i16> %a)1999 store <8 x i16> %d, ptr %x2000 ret void2001}2002 2003define void @umin_xv_v6i16(ptr %x, i16 %y) {2004; CHECK-LABEL: umin_xv_v6i16:2005; CHECK: # %bb.0:2006; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma2007; CHECK-NEXT: vle16.v v8, (a0)2008; CHECK-NEXT: vminu.vx v8, v8, a12009; CHECK-NEXT: vse16.v v8, (a0)2010; CHECK-NEXT: ret2011 %a = load <6 x i16>, ptr %x2012 %b = insertelement <6 x i16> poison, i16 %y, i32 02013 %c = shufflevector <6 x i16> %b, <6 x i16> poison, <6 x i32> zeroinitializer2014 %d = call <6 x i16> @llvm.umin.v6i16(<6 x i16> %c, <6 x i16> %a)2015 store <6 x i16> %d, ptr %x2016 ret void2017}2018 2019define void @umin_xv_v4i32(ptr %x, i32 %y) {2020; CHECK-LABEL: umin_xv_v4i32:2021; CHECK: # %bb.0:2022; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma2023; CHECK-NEXT: vle32.v v8, (a0)2024; CHECK-NEXT: vminu.vx v8, v8, a12025; CHECK-NEXT: vse32.v v8, (a0)2026; CHECK-NEXT: ret2027 %a = load <4 x i32>, ptr %x2028 %b = insertelement <4 x i32> poison, i32 %y, i32 02029 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer2030 %d = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %c, <4 x i32> %a)2031 store <4 x i32> %d, ptr %x2032 ret void2033}2034 2035define void @umax_v16i8(ptr %x, ptr %y) {2036; CHECK-LABEL: umax_v16i8:2037; CHECK: # %bb.0:2038; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma2039; CHECK-NEXT: vle8.v v8, (a0)2040; CHECK-NEXT: vle8.v v9, (a1)2041; CHECK-NEXT: vmaxu.vv v8, v8, v92042; CHECK-NEXT: vse8.v v8, (a0)2043; CHECK-NEXT: ret2044 %a = load <16 x i8>, ptr %x2045 %b = load <16 x i8>, ptr %y2046 %cc = icmp ugt <16 x i8> %a, %b2047 %c = select <16 x i1> %cc, <16 x i8> %a, <16 x i8> %b2048 store <16 x i8> %c, ptr %x2049 ret void2050}2051 2052define void @umax_v8i16(ptr %x, ptr %y) {2053; CHECK-LABEL: umax_v8i16:2054; CHECK: # %bb.0:2055; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma2056; CHECK-NEXT: vle16.v v8, (a0)2057; CHECK-NEXT: vle16.v v9, (a1)2058; CHECK-NEXT: vmaxu.vv v8, v8, v92059; CHECK-NEXT: vse16.v v8, (a0)2060; CHECK-NEXT: ret2061 %a = load <8 x i16>, ptr %x2062 %b = load <8 x i16>, ptr %y2063 %cc = icmp ugt <8 x i16> %a, %b2064 %c = select <8 x i1> %cc, <8 x i16> %a, <8 x i16> %b2065 store <8 x i16> %c, ptr %x2066 ret void2067}2068 2069define void @umax_v6i16(ptr %x, ptr %y) {2070; CHECK-LABEL: umax_v6i16:2071; CHECK: # %bb.0:2072; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma2073; CHECK-NEXT: vle16.v v8, (a0)2074; CHECK-NEXT: vle16.v v9, (a1)2075; CHECK-NEXT: vmaxu.vv v8, v8, v92076; CHECK-NEXT: vse16.v v8, (a0)2077; CHECK-NEXT: ret2078 %a = load <6 x i16>, ptr %x2079 %b = load <6 x i16>, ptr %y2080 %cc = icmp ugt <6 x i16> %a, %b2081 %c = select <6 x i1> %cc, <6 x i16> %a, <6 x i16> %b2082 store <6 x i16> %c, ptr %x2083 ret void2084}2085 2086define void @umax_v4i32(ptr %x, ptr %y) {2087; CHECK-LABEL: umax_v4i32:2088; CHECK: # %bb.0:2089; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma2090; CHECK-NEXT: vle32.v v8, (a0)2091; CHECK-NEXT: vle32.v v9, (a1)2092; CHECK-NEXT: vmaxu.vv v8, v8, v92093; CHECK-NEXT: vse32.v v8, (a0)2094; CHECK-NEXT: ret2095 %a = load <4 x i32>, ptr %x2096 %b = load <4 x i32>, ptr %y2097 %cc = icmp ugt <4 x i32> %a, %b2098 %c = select <4 x i1> %cc, <4 x i32> %a, <4 x i32> %b2099 store <4 x i32> %c, ptr %x2100 ret void2101}2102 2103define void @umax_v2i64(ptr %x, ptr %y) {2104; CHECK-LABEL: umax_v2i64:2105; CHECK: # %bb.0:2106; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma2107; CHECK-NEXT: vle64.v v8, (a0)2108; CHECK-NEXT: vle64.v v9, (a1)2109; CHECK-NEXT: vmaxu.vv v8, v8, v92110; CHECK-NEXT: vse64.v v8, (a0)2111; CHECK-NEXT: ret2112 %a = load <2 x i64>, ptr %x2113 %b = load <2 x i64>, ptr %y2114 %cc = icmp ugt <2 x i64> %a, %b2115 %c = select <2 x i1> %cc, <2 x i64> %a, <2 x i64> %b2116 store <2 x i64> %c, ptr %x2117 ret void2118}2119 2120define void @umax_vx_v16i8(ptr %x, i8 %y) {2121; CHECK-LABEL: umax_vx_v16i8:2122; CHECK: # %bb.0:2123; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma2124; CHECK-NEXT: vle8.v v8, (a0)2125; CHECK-NEXT: vmaxu.vx v8, v8, a12126; CHECK-NEXT: vse8.v v8, (a0)2127; CHECK-NEXT: ret2128 %a = load <16 x i8>, ptr %x2129 %b = insertelement <16 x i8> poison, i8 %y, i32 02130 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer2131 %d = call <16 x i8> @llvm.umax.v16i8(<16 x i8> %a, <16 x i8> %c)2132 store <16 x i8> %d, ptr %x2133 ret void2134}2135 2136define void @umax_vx_v8i16(ptr %x, i16 %y) {2137; CHECK-LABEL: umax_vx_v8i16:2138; CHECK: # %bb.0:2139; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma2140; CHECK-NEXT: vle16.v v8, (a0)2141; CHECK-NEXT: vmaxu.vx v8, v8, a12142; CHECK-NEXT: vse16.v v8, (a0)2143; CHECK-NEXT: ret2144 %a = load <8 x i16>, ptr %x2145 %b = insertelement <8 x i16> poison, i16 %y, i32 02146 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer2147 %d = call <8 x i16> @llvm.umax.v8i16(<8 x i16> %a, <8 x i16> %c)2148 store <8 x i16> %d, ptr %x2149 ret void2150}2151 2152define void @umax_vx_v6i16(ptr %x, i16 %y) {2153; CHECK-LABEL: umax_vx_v6i16:2154; CHECK: # %bb.0:2155; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma2156; CHECK-NEXT: vle16.v v8, (a0)2157; CHECK-NEXT: vmaxu.vx v8, v8, a12158; CHECK-NEXT: vse16.v v8, (a0)2159; CHECK-NEXT: ret2160 %a = load <6 x i16>, ptr %x2161 %b = insertelement <6 x i16> poison, i16 %y, i32 02162 %c = shufflevector <6 x i16> %b, <6 x i16> poison, <6 x i32> zeroinitializer2163 %d = call <6 x i16> @llvm.umax.v6i16(<6 x i16> %a, <6 x i16> %c)2164 store <6 x i16> %d, ptr %x2165 ret void2166}2167 2168define void @umax_vx_v4i32(ptr %x, i32 %y) {2169; CHECK-LABEL: umax_vx_v4i32:2170; CHECK: # %bb.0:2171; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma2172; CHECK-NEXT: vle32.v v8, (a0)2173; CHECK-NEXT: vmaxu.vx v8, v8, a12174; CHECK-NEXT: vse32.v v8, (a0)2175; CHECK-NEXT: ret2176 %a = load <4 x i32>, ptr %x2177 %b = insertelement <4 x i32> poison, i32 %y, i32 02178 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer2179 %d = call <4 x i32> @llvm.umax.v4i32(<4 x i32> %a, <4 x i32> %c)2180 store <4 x i32> %d, ptr %x2181 ret void2182}2183 2184define void @umax_xv_v16i8(ptr %x, i8 %y) {2185; CHECK-LABEL: umax_xv_v16i8:2186; CHECK: # %bb.0:2187; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma2188; CHECK-NEXT: vle8.v v8, (a0)2189; CHECK-NEXT: vmaxu.vx v8, v8, a12190; CHECK-NEXT: vse8.v v8, (a0)2191; CHECK-NEXT: ret2192 %a = load <16 x i8>, ptr %x2193 %b = insertelement <16 x i8> poison, i8 %y, i32 02194 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer2195 %d = call <16 x i8> @llvm.umax.v16i8(<16 x i8> %c, <16 x i8> %a)2196 store <16 x i8> %d, ptr %x2197 ret void2198}2199 2200define void @umax_xv_v8i16(ptr %x, i16 %y) {2201; CHECK-LABEL: umax_xv_v8i16:2202; CHECK: # %bb.0:2203; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma2204; CHECK-NEXT: vle16.v v8, (a0)2205; CHECK-NEXT: vmaxu.vx v8, v8, a12206; CHECK-NEXT: vse16.v v8, (a0)2207; CHECK-NEXT: ret2208 %a = load <8 x i16>, ptr %x2209 %b = insertelement <8 x i16> poison, i16 %y, i32 02210 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer2211 %d = call <8 x i16> @llvm.umax.v8i16(<8 x i16> %c, <8 x i16> %a)2212 store <8 x i16> %d, ptr %x2213 ret void2214}2215 2216define void @umax_xv_v6i16(ptr %x, i16 %y) {2217; CHECK-LABEL: umax_xv_v6i16:2218; CHECK: # %bb.0:2219; CHECK-NEXT: vsetivli zero, 6, e16, m1, ta, ma2220; CHECK-NEXT: vle16.v v8, (a0)2221; CHECK-NEXT: vmaxu.vx v8, v8, a12222; CHECK-NEXT: vse16.v v8, (a0)2223; CHECK-NEXT: ret2224 %a = load <6 x i16>, ptr %x2225 %b = insertelement <6 x i16> poison, i16 %y, i32 02226 %c = shufflevector <6 x i16> %b, <6 x i16> poison, <6 x i32> zeroinitializer2227 %d = call <6 x i16> @llvm.umax.v6i16(<6 x i16> %c, <6 x i16> %a)2228 store <6 x i16> %d, ptr %x2229 ret void2230}2231 2232define void @umax_xv_v4i32(ptr %x, i32 %y) {2233; CHECK-LABEL: umax_xv_v4i32:2234; CHECK: # %bb.0:2235; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma2236; CHECK-NEXT: vle32.v v8, (a0)2237; CHECK-NEXT: vmaxu.vx v8, v8, a12238; CHECK-NEXT: vse32.v v8, (a0)2239; CHECK-NEXT: ret2240 %a = load <4 x i32>, ptr %x2241 %b = insertelement <4 x i32> poison, i32 %y, i32 02242 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer2243 %d = call <4 x i32> @llvm.umax.v4i32(<4 x i32> %c, <4 x i32> %a)2244 store <4 x i32> %d, ptr %x2245 ret void2246}2247 2248define void @add_v32i8(ptr %x, ptr %y) {2249; CHECK-LABEL: add_v32i8:2250; CHECK: # %bb.0:2251; CHECK-NEXT: li a2, 322252; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2253; CHECK-NEXT: vle8.v v8, (a0)2254; CHECK-NEXT: vle8.v v10, (a1)2255; CHECK-NEXT: vadd.vv v8, v8, v102256; CHECK-NEXT: vse8.v v8, (a0)2257; CHECK-NEXT: ret2258 %a = load <32 x i8>, ptr %x2259 %b = load <32 x i8>, ptr %y2260 %c = add <32 x i8> %a, %b2261 store <32 x i8> %c, ptr %x2262 ret void2263}2264 2265define void @add_v16i16(ptr %x, ptr %y) {2266; CHECK-LABEL: add_v16i16:2267; CHECK: # %bb.0:2268; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma2269; CHECK-NEXT: vle16.v v8, (a0)2270; CHECK-NEXT: vle16.v v10, (a1)2271; CHECK-NEXT: vadd.vv v8, v8, v102272; CHECK-NEXT: vse16.v v8, (a0)2273; CHECK-NEXT: ret2274 %a = load <16 x i16>, ptr %x2275 %b = load <16 x i16>, ptr %y2276 %c = add <16 x i16> %a, %b2277 store <16 x i16> %c, ptr %x2278 ret void2279}2280 2281define void @add_v8i32(ptr %x, ptr %y) {2282; CHECK-LABEL: add_v8i32:2283; CHECK: # %bb.0:2284; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma2285; CHECK-NEXT: vle32.v v8, (a0)2286; CHECK-NEXT: vle32.v v10, (a1)2287; CHECK-NEXT: vadd.vv v8, v8, v102288; CHECK-NEXT: vse32.v v8, (a0)2289; CHECK-NEXT: ret2290 %a = load <8 x i32>, ptr %x2291 %b = load <8 x i32>, ptr %y2292 %c = add <8 x i32> %a, %b2293 store <8 x i32> %c, ptr %x2294 ret void2295}2296 2297define void @add_v6i32(ptr %x, ptr %y) {2298; CHECK-LABEL: add_v6i32:2299; CHECK: # %bb.0:2300; CHECK-NEXT: vsetivli zero, 6, e32, m2, ta, ma2301; CHECK-NEXT: vle32.v v8, (a0)2302; CHECK-NEXT: vle32.v v10, (a1)2303; CHECK-NEXT: vadd.vv v8, v8, v102304; CHECK-NEXT: vse32.v v8, (a0)2305; CHECK-NEXT: ret2306 %a = load <6 x i32>, ptr %x2307 %b = load <6 x i32>, ptr %y2308 %c = add <6 x i32> %a, %b2309 store <6 x i32> %c, ptr %x2310 ret void2311}2312 2313define void @add_v4i64(ptr %x, ptr %y) {2314; CHECK-LABEL: add_v4i64:2315; CHECK: # %bb.0:2316; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma2317; CHECK-NEXT: vle64.v v8, (a0)2318; CHECK-NEXT: vle64.v v10, (a1)2319; CHECK-NEXT: vadd.vv v8, v8, v102320; CHECK-NEXT: vse64.v v8, (a0)2321; CHECK-NEXT: ret2322 %a = load <4 x i64>, ptr %x2323 %b = load <4 x i64>, ptr %y2324 %c = add <4 x i64> %a, %b2325 store <4 x i64> %c, ptr %x2326 ret void2327}2328 2329define void @sub_v32i8(ptr %x, ptr %y) {2330; CHECK-LABEL: sub_v32i8:2331; CHECK: # %bb.0:2332; CHECK-NEXT: li a2, 322333; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2334; CHECK-NEXT: vle8.v v8, (a0)2335; CHECK-NEXT: vle8.v v10, (a1)2336; CHECK-NEXT: vsub.vv v8, v8, v102337; CHECK-NEXT: vse8.v v8, (a0)2338; CHECK-NEXT: ret2339 %a = load <32 x i8>, ptr %x2340 %b = load <32 x i8>, ptr %y2341 %c = sub <32 x i8> %a, %b2342 store <32 x i8> %c, ptr %x2343 ret void2344}2345 2346define void @sub_v16i16(ptr %x, ptr %y) {2347; CHECK-LABEL: sub_v16i16:2348; CHECK: # %bb.0:2349; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma2350; CHECK-NEXT: vle16.v v8, (a0)2351; CHECK-NEXT: vle16.v v10, (a1)2352; CHECK-NEXT: vsub.vv v8, v8, v102353; CHECK-NEXT: vse16.v v8, (a0)2354; CHECK-NEXT: ret2355 %a = load <16 x i16>, ptr %x2356 %b = load <16 x i16>, ptr %y2357 %c = sub <16 x i16> %a, %b2358 store <16 x i16> %c, ptr %x2359 ret void2360}2361 2362define void @sub_v8i32(ptr %x, ptr %y) {2363; CHECK-LABEL: sub_v8i32:2364; CHECK: # %bb.0:2365; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma2366; CHECK-NEXT: vle32.v v8, (a0)2367; CHECK-NEXT: vle32.v v10, (a1)2368; CHECK-NEXT: vsub.vv v8, v8, v102369; CHECK-NEXT: vse32.v v8, (a0)2370; CHECK-NEXT: ret2371 %a = load <8 x i32>, ptr %x2372 %b = load <8 x i32>, ptr %y2373 %c = sub <8 x i32> %a, %b2374 store <8 x i32> %c, ptr %x2375 ret void2376}2377 2378define void @sub_v4i64(ptr %x, ptr %y) {2379; CHECK-LABEL: sub_v4i64:2380; CHECK: # %bb.0:2381; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma2382; CHECK-NEXT: vle64.v v8, (a0)2383; CHECK-NEXT: vle64.v v10, (a1)2384; CHECK-NEXT: vsub.vv v8, v8, v102385; CHECK-NEXT: vse64.v v8, (a0)2386; CHECK-NEXT: ret2387 %a = load <4 x i64>, ptr %x2388 %b = load <4 x i64>, ptr %y2389 %c = sub <4 x i64> %a, %b2390 store <4 x i64> %c, ptr %x2391 ret void2392}2393 2394define void @mul_v32i8(ptr %x, ptr %y) {2395; CHECK-LABEL: mul_v32i8:2396; CHECK: # %bb.0:2397; CHECK-NEXT: li a2, 322398; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2399; CHECK-NEXT: vle8.v v8, (a0)2400; CHECK-NEXT: vle8.v v10, (a1)2401; CHECK-NEXT: vmul.vv v8, v8, v102402; CHECK-NEXT: vse8.v v8, (a0)2403; CHECK-NEXT: ret2404 %a = load <32 x i8>, ptr %x2405 %b = load <32 x i8>, ptr %y2406 %c = mul <32 x i8> %a, %b2407 store <32 x i8> %c, ptr %x2408 ret void2409}2410 2411define void @mul_v16i16(ptr %x, ptr %y) {2412; CHECK-LABEL: mul_v16i16:2413; CHECK: # %bb.0:2414; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma2415; CHECK-NEXT: vle16.v v8, (a0)2416; CHECK-NEXT: vle16.v v10, (a1)2417; CHECK-NEXT: vmul.vv v8, v8, v102418; CHECK-NEXT: vse16.v v8, (a0)2419; CHECK-NEXT: ret2420 %a = load <16 x i16>, ptr %x2421 %b = load <16 x i16>, ptr %y2422 %c = mul <16 x i16> %a, %b2423 store <16 x i16> %c, ptr %x2424 ret void2425}2426 2427define void @mul_v8i32(ptr %x, ptr %y) {2428; CHECK-LABEL: mul_v8i32:2429; CHECK: # %bb.0:2430; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma2431; CHECK-NEXT: vle32.v v8, (a0)2432; CHECK-NEXT: vle32.v v10, (a1)2433; CHECK-NEXT: vmul.vv v8, v8, v102434; CHECK-NEXT: vse32.v v8, (a0)2435; CHECK-NEXT: ret2436 %a = load <8 x i32>, ptr %x2437 %b = load <8 x i32>, ptr %y2438 %c = mul <8 x i32> %a, %b2439 store <8 x i32> %c, ptr %x2440 ret void2441}2442 2443define void @mul_v4i64(ptr %x, ptr %y) {2444; CHECK-LABEL: mul_v4i64:2445; CHECK: # %bb.0:2446; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma2447; CHECK-NEXT: vle64.v v8, (a0)2448; CHECK-NEXT: vle64.v v10, (a1)2449; CHECK-NEXT: vmul.vv v8, v8, v102450; CHECK-NEXT: vse64.v v8, (a0)2451; CHECK-NEXT: ret2452 %a = load <4 x i64>, ptr %x2453 %b = load <4 x i64>, ptr %y2454 %c = mul <4 x i64> %a, %b2455 store <4 x i64> %c, ptr %x2456 ret void2457}2458 2459define void @and_v32i8(ptr %x, ptr %y) {2460; CHECK-LABEL: and_v32i8:2461; CHECK: # %bb.0:2462; CHECK-NEXT: li a2, 322463; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2464; CHECK-NEXT: vle8.v v8, (a0)2465; CHECK-NEXT: vle8.v v10, (a1)2466; CHECK-NEXT: vand.vv v8, v8, v102467; CHECK-NEXT: vse8.v v8, (a0)2468; CHECK-NEXT: ret2469 %a = load <32 x i8>, ptr %x2470 %b = load <32 x i8>, ptr %y2471 %c = and <32 x i8> %a, %b2472 store <32 x i8> %c, ptr %x2473 ret void2474}2475 2476define void @and_v16i16(ptr %x, ptr %y) {2477; CHECK-LABEL: and_v16i16:2478; CHECK: # %bb.0:2479; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma2480; CHECK-NEXT: vle16.v v8, (a0)2481; CHECK-NEXT: vle16.v v10, (a1)2482; CHECK-NEXT: vand.vv v8, v8, v102483; CHECK-NEXT: vse16.v v8, (a0)2484; CHECK-NEXT: ret2485 %a = load <16 x i16>, ptr %x2486 %b = load <16 x i16>, ptr %y2487 %c = and <16 x i16> %a, %b2488 store <16 x i16> %c, ptr %x2489 ret void2490}2491 2492define void @and_v8i32(ptr %x, ptr %y) {2493; CHECK-LABEL: and_v8i32:2494; CHECK: # %bb.0:2495; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma2496; CHECK-NEXT: vle32.v v8, (a0)2497; CHECK-NEXT: vle32.v v10, (a1)2498; CHECK-NEXT: vand.vv v8, v8, v102499; CHECK-NEXT: vse32.v v8, (a0)2500; CHECK-NEXT: ret2501 %a = load <8 x i32>, ptr %x2502 %b = load <8 x i32>, ptr %y2503 %c = and <8 x i32> %a, %b2504 store <8 x i32> %c, ptr %x2505 ret void2506}2507 2508define void @and_v4i64(ptr %x, ptr %y) {2509; CHECK-LABEL: and_v4i64:2510; CHECK: # %bb.0:2511; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma2512; CHECK-NEXT: vle64.v v8, (a0)2513; CHECK-NEXT: vle64.v v10, (a1)2514; CHECK-NEXT: vand.vv v8, v8, v102515; CHECK-NEXT: vse64.v v8, (a0)2516; CHECK-NEXT: ret2517 %a = load <4 x i64>, ptr %x2518 %b = load <4 x i64>, ptr %y2519 %c = and <4 x i64> %a, %b2520 store <4 x i64> %c, ptr %x2521 ret void2522}2523 2524define void @or_v32i8(ptr %x, ptr %y) {2525; CHECK-LABEL: or_v32i8:2526; CHECK: # %bb.0:2527; CHECK-NEXT: li a2, 322528; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2529; CHECK-NEXT: vle8.v v8, (a0)2530; CHECK-NEXT: vle8.v v10, (a1)2531; CHECK-NEXT: vor.vv v8, v8, v102532; CHECK-NEXT: vse8.v v8, (a0)2533; CHECK-NEXT: ret2534 %a = load <32 x i8>, ptr %x2535 %b = load <32 x i8>, ptr %y2536 %c = or <32 x i8> %a, %b2537 store <32 x i8> %c, ptr %x2538 ret void2539}2540 2541define void @or_v16i16(ptr %x, ptr %y) {2542; CHECK-LABEL: or_v16i16:2543; CHECK: # %bb.0:2544; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma2545; CHECK-NEXT: vle16.v v8, (a0)2546; CHECK-NEXT: vle16.v v10, (a1)2547; CHECK-NEXT: vor.vv v8, v8, v102548; CHECK-NEXT: vse16.v v8, (a0)2549; CHECK-NEXT: ret2550 %a = load <16 x i16>, ptr %x2551 %b = load <16 x i16>, ptr %y2552 %c = or <16 x i16> %a, %b2553 store <16 x i16> %c, ptr %x2554 ret void2555}2556 2557define void @or_v8i32(ptr %x, ptr %y) {2558; CHECK-LABEL: or_v8i32:2559; CHECK: # %bb.0:2560; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma2561; CHECK-NEXT: vle32.v v8, (a0)2562; CHECK-NEXT: vle32.v v10, (a1)2563; CHECK-NEXT: vor.vv v8, v8, v102564; CHECK-NEXT: vse32.v v8, (a0)2565; CHECK-NEXT: ret2566 %a = load <8 x i32>, ptr %x2567 %b = load <8 x i32>, ptr %y2568 %c = or <8 x i32> %a, %b2569 store <8 x i32> %c, ptr %x2570 ret void2571}2572 2573define void @or_v4i64(ptr %x, ptr %y) {2574; CHECK-LABEL: or_v4i64:2575; CHECK: # %bb.0:2576; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma2577; CHECK-NEXT: vle64.v v8, (a0)2578; CHECK-NEXT: vle64.v v10, (a1)2579; CHECK-NEXT: vor.vv v8, v8, v102580; CHECK-NEXT: vse64.v v8, (a0)2581; CHECK-NEXT: ret2582 %a = load <4 x i64>, ptr %x2583 %b = load <4 x i64>, ptr %y2584 %c = or <4 x i64> %a, %b2585 store <4 x i64> %c, ptr %x2586 ret void2587}2588 2589define void @xor_v32i8(ptr %x, ptr %y) {2590; CHECK-LABEL: xor_v32i8:2591; CHECK: # %bb.0:2592; CHECK-NEXT: li a2, 322593; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2594; CHECK-NEXT: vle8.v v8, (a0)2595; CHECK-NEXT: vle8.v v10, (a1)2596; CHECK-NEXT: vxor.vv v8, v8, v102597; CHECK-NEXT: vse8.v v8, (a0)2598; CHECK-NEXT: ret2599 %a = load <32 x i8>, ptr %x2600 %b = load <32 x i8>, ptr %y2601 %c = xor <32 x i8> %a, %b2602 store <32 x i8> %c, ptr %x2603 ret void2604}2605 2606define void @xor_v16i16(ptr %x, ptr %y) {2607; CHECK-LABEL: xor_v16i16:2608; CHECK: # %bb.0:2609; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma2610; CHECK-NEXT: vle16.v v8, (a0)2611; CHECK-NEXT: vle16.v v10, (a1)2612; CHECK-NEXT: vxor.vv v8, v8, v102613; CHECK-NEXT: vse16.v v8, (a0)2614; CHECK-NEXT: ret2615 %a = load <16 x i16>, ptr %x2616 %b = load <16 x i16>, ptr %y2617 %c = xor <16 x i16> %a, %b2618 store <16 x i16> %c, ptr %x2619 ret void2620}2621 2622define void @xor_v8i32(ptr %x, ptr %y) {2623; CHECK-LABEL: xor_v8i32:2624; CHECK: # %bb.0:2625; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma2626; CHECK-NEXT: vle32.v v8, (a0)2627; CHECK-NEXT: vle32.v v10, (a1)2628; CHECK-NEXT: vxor.vv v8, v8, v102629; CHECK-NEXT: vse32.v v8, (a0)2630; CHECK-NEXT: ret2631 %a = load <8 x i32>, ptr %x2632 %b = load <8 x i32>, ptr %y2633 %c = xor <8 x i32> %a, %b2634 store <8 x i32> %c, ptr %x2635 ret void2636}2637 2638define void @xor_v4i64(ptr %x, ptr %y) {2639; CHECK-LABEL: xor_v4i64:2640; CHECK: # %bb.0:2641; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma2642; CHECK-NEXT: vle64.v v8, (a0)2643; CHECK-NEXT: vle64.v v10, (a1)2644; CHECK-NEXT: vxor.vv v8, v8, v102645; CHECK-NEXT: vse64.v v8, (a0)2646; CHECK-NEXT: ret2647 %a = load <4 x i64>, ptr %x2648 %b = load <4 x i64>, ptr %y2649 %c = xor <4 x i64> %a, %b2650 store <4 x i64> %c, ptr %x2651 ret void2652}2653 2654define void @lshr_v32i8(ptr %x, ptr %y) {2655; CHECK-LABEL: lshr_v32i8:2656; CHECK: # %bb.0:2657; CHECK-NEXT: li a2, 322658; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2659; CHECK-NEXT: vle8.v v8, (a0)2660; CHECK-NEXT: vle8.v v10, (a1)2661; CHECK-NEXT: vsrl.vv v8, v8, v102662; CHECK-NEXT: vse8.v v8, (a0)2663; CHECK-NEXT: ret2664 %a = load <32 x i8>, ptr %x2665 %b = load <32 x i8>, ptr %y2666 %c = lshr <32 x i8> %a, %b2667 store <32 x i8> %c, ptr %x2668 ret void2669}2670 2671define void @lshr_v16i16(ptr %x, ptr %y) {2672; CHECK-LABEL: lshr_v16i16:2673; CHECK: # %bb.0:2674; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma2675; CHECK-NEXT: vle16.v v8, (a0)2676; CHECK-NEXT: vle16.v v10, (a1)2677; CHECK-NEXT: vsrl.vv v8, v8, v102678; CHECK-NEXT: vse16.v v8, (a0)2679; CHECK-NEXT: ret2680 %a = load <16 x i16>, ptr %x2681 %b = load <16 x i16>, ptr %y2682 %c = lshr <16 x i16> %a, %b2683 store <16 x i16> %c, ptr %x2684 ret void2685}2686 2687define void @lshr_v8i32(ptr %x, ptr %y) {2688; CHECK-LABEL: lshr_v8i32:2689; CHECK: # %bb.0:2690; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma2691; CHECK-NEXT: vle32.v v8, (a0)2692; CHECK-NEXT: vle32.v v10, (a1)2693; CHECK-NEXT: vsrl.vv v8, v8, v102694; CHECK-NEXT: vse32.v v8, (a0)2695; CHECK-NEXT: ret2696 %a = load <8 x i32>, ptr %x2697 %b = load <8 x i32>, ptr %y2698 %c = lshr <8 x i32> %a, %b2699 store <8 x i32> %c, ptr %x2700 ret void2701}2702 2703define void @lshr_v4i64(ptr %x, ptr %y) {2704; CHECK-LABEL: lshr_v4i64:2705; CHECK: # %bb.0:2706; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma2707; CHECK-NEXT: vle64.v v8, (a0)2708; CHECK-NEXT: vle64.v v10, (a1)2709; CHECK-NEXT: vsrl.vv v8, v8, v102710; CHECK-NEXT: vse64.v v8, (a0)2711; CHECK-NEXT: ret2712 %a = load <4 x i64>, ptr %x2713 %b = load <4 x i64>, ptr %y2714 %c = lshr <4 x i64> %a, %b2715 store <4 x i64> %c, ptr %x2716 ret void2717}2718 2719define void @ashr_v32i8(ptr %x, ptr %y) {2720; CHECK-LABEL: ashr_v32i8:2721; CHECK: # %bb.0:2722; CHECK-NEXT: li a2, 322723; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2724; CHECK-NEXT: vle8.v v8, (a0)2725; CHECK-NEXT: vle8.v v10, (a1)2726; CHECK-NEXT: vsra.vv v8, v8, v102727; CHECK-NEXT: vse8.v v8, (a0)2728; CHECK-NEXT: ret2729 %a = load <32 x i8>, ptr %x2730 %b = load <32 x i8>, ptr %y2731 %c = ashr <32 x i8> %a, %b2732 store <32 x i8> %c, ptr %x2733 ret void2734}2735 2736define void @ashr_v16i16(ptr %x, ptr %y) {2737; CHECK-LABEL: ashr_v16i16:2738; CHECK: # %bb.0:2739; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma2740; CHECK-NEXT: vle16.v v8, (a0)2741; CHECK-NEXT: vle16.v v10, (a1)2742; CHECK-NEXT: vsra.vv v8, v8, v102743; CHECK-NEXT: vse16.v v8, (a0)2744; CHECK-NEXT: ret2745 %a = load <16 x i16>, ptr %x2746 %b = load <16 x i16>, ptr %y2747 %c = ashr <16 x i16> %a, %b2748 store <16 x i16> %c, ptr %x2749 ret void2750}2751 2752define void @ashr_v8i32(ptr %x, ptr %y) {2753; CHECK-LABEL: ashr_v8i32:2754; CHECK: # %bb.0:2755; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma2756; CHECK-NEXT: vle32.v v8, (a0)2757; CHECK-NEXT: vle32.v v10, (a1)2758; CHECK-NEXT: vsra.vv v8, v8, v102759; CHECK-NEXT: vse32.v v8, (a0)2760; CHECK-NEXT: ret2761 %a = load <8 x i32>, ptr %x2762 %b = load <8 x i32>, ptr %y2763 %c = ashr <8 x i32> %a, %b2764 store <8 x i32> %c, ptr %x2765 ret void2766}2767 2768define void @ashr_v4i64(ptr %x, ptr %y) {2769; CHECK-LABEL: ashr_v4i64:2770; CHECK: # %bb.0:2771; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma2772; CHECK-NEXT: vle64.v v8, (a0)2773; CHECK-NEXT: vle64.v v10, (a1)2774; CHECK-NEXT: vsra.vv v8, v8, v102775; CHECK-NEXT: vse64.v v8, (a0)2776; CHECK-NEXT: ret2777 %a = load <4 x i64>, ptr %x2778 %b = load <4 x i64>, ptr %y2779 %c = ashr <4 x i64> %a, %b2780 store <4 x i64> %c, ptr %x2781 ret void2782}2783 2784define void @shl_v32i8(ptr %x, ptr %y) {2785; CHECK-LABEL: shl_v32i8:2786; CHECK: # %bb.0:2787; CHECK-NEXT: li a2, 322788; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2789; CHECK-NEXT: vle8.v v8, (a0)2790; CHECK-NEXT: vle8.v v10, (a1)2791; CHECK-NEXT: vsll.vv v8, v8, v102792; CHECK-NEXT: vse8.v v8, (a0)2793; CHECK-NEXT: ret2794 %a = load <32 x i8>, ptr %x2795 %b = load <32 x i8>, ptr %y2796 %c = shl <32 x i8> %a, %b2797 store <32 x i8> %c, ptr %x2798 ret void2799}2800 2801define void @shl_v16i16(ptr %x, ptr %y) {2802; CHECK-LABEL: shl_v16i16:2803; CHECK: # %bb.0:2804; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma2805; CHECK-NEXT: vle16.v v8, (a0)2806; CHECK-NEXT: vle16.v v10, (a1)2807; CHECK-NEXT: vsll.vv v8, v8, v102808; CHECK-NEXT: vse16.v v8, (a0)2809; CHECK-NEXT: ret2810 %a = load <16 x i16>, ptr %x2811 %b = load <16 x i16>, ptr %y2812 %c = shl <16 x i16> %a, %b2813 store <16 x i16> %c, ptr %x2814 ret void2815}2816 2817define void @shl_v8i32(ptr %x, ptr %y) {2818; CHECK-LABEL: shl_v8i32:2819; CHECK: # %bb.0:2820; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma2821; CHECK-NEXT: vle32.v v8, (a0)2822; CHECK-NEXT: vle32.v v10, (a1)2823; CHECK-NEXT: vsll.vv v8, v8, v102824; CHECK-NEXT: vse32.v v8, (a0)2825; CHECK-NEXT: ret2826 %a = load <8 x i32>, ptr %x2827 %b = load <8 x i32>, ptr %y2828 %c = shl <8 x i32> %a, %b2829 store <8 x i32> %c, ptr %x2830 ret void2831}2832 2833define void @shl_v4i64(ptr %x, ptr %y) {2834; CHECK-LABEL: shl_v4i64:2835; CHECK: # %bb.0:2836; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma2837; CHECK-NEXT: vle64.v v8, (a0)2838; CHECK-NEXT: vle64.v v10, (a1)2839; CHECK-NEXT: vsll.vv v8, v8, v102840; CHECK-NEXT: vse64.v v8, (a0)2841; CHECK-NEXT: ret2842 %a = load <4 x i64>, ptr %x2843 %b = load <4 x i64>, ptr %y2844 %c = shl <4 x i64> %a, %b2845 store <4 x i64> %c, ptr %x2846 ret void2847}2848 2849define void @sdiv_v32i8(ptr %x, ptr %y) {2850; CHECK-LABEL: sdiv_v32i8:2851; CHECK: # %bb.0:2852; CHECK-NEXT: li a2, 322853; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2854; CHECK-NEXT: vle8.v v8, (a0)2855; CHECK-NEXT: vle8.v v10, (a1)2856; CHECK-NEXT: vdiv.vv v8, v8, v102857; CHECK-NEXT: vse8.v v8, (a0)2858; CHECK-NEXT: ret2859 %a = load <32 x i8>, ptr %x2860 %b = load <32 x i8>, ptr %y2861 %c = sdiv <32 x i8> %a, %b2862 store <32 x i8> %c, ptr %x2863 ret void2864}2865 2866define void @sdiv_v16i16(ptr %x, ptr %y) {2867; CHECK-LABEL: sdiv_v16i16:2868; CHECK: # %bb.0:2869; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma2870; CHECK-NEXT: vle16.v v8, (a0)2871; CHECK-NEXT: vle16.v v10, (a1)2872; CHECK-NEXT: vdiv.vv v8, v8, v102873; CHECK-NEXT: vse16.v v8, (a0)2874; CHECK-NEXT: ret2875 %a = load <16 x i16>, ptr %x2876 %b = load <16 x i16>, ptr %y2877 %c = sdiv <16 x i16> %a, %b2878 store <16 x i16> %c, ptr %x2879 ret void2880}2881 2882define void @sdiv_v8i32(ptr %x, ptr %y) {2883; CHECK-LABEL: sdiv_v8i32:2884; CHECK: # %bb.0:2885; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma2886; CHECK-NEXT: vle32.v v8, (a0)2887; CHECK-NEXT: vle32.v v10, (a1)2888; CHECK-NEXT: vdiv.vv v8, v8, v102889; CHECK-NEXT: vse32.v v8, (a0)2890; CHECK-NEXT: ret2891 %a = load <8 x i32>, ptr %x2892 %b = load <8 x i32>, ptr %y2893 %c = sdiv <8 x i32> %a, %b2894 store <8 x i32> %c, ptr %x2895 ret void2896}2897 2898define void @sdiv_v4i64(ptr %x, ptr %y) {2899; CHECK-LABEL: sdiv_v4i64:2900; CHECK: # %bb.0:2901; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma2902; CHECK-NEXT: vle64.v v8, (a0)2903; CHECK-NEXT: vle64.v v10, (a1)2904; CHECK-NEXT: vdiv.vv v8, v8, v102905; CHECK-NEXT: vse64.v v8, (a0)2906; CHECK-NEXT: ret2907 %a = load <4 x i64>, ptr %x2908 %b = load <4 x i64>, ptr %y2909 %c = sdiv <4 x i64> %a, %b2910 store <4 x i64> %c, ptr %x2911 ret void2912}2913 2914define void @srem_v32i8(ptr %x, ptr %y) {2915; CHECK-LABEL: srem_v32i8:2916; CHECK: # %bb.0:2917; CHECK-NEXT: li a2, 322918; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2919; CHECK-NEXT: vle8.v v8, (a0)2920; CHECK-NEXT: vle8.v v10, (a1)2921; CHECK-NEXT: vrem.vv v8, v8, v102922; CHECK-NEXT: vse8.v v8, (a0)2923; CHECK-NEXT: ret2924 %a = load <32 x i8>, ptr %x2925 %b = load <32 x i8>, ptr %y2926 %c = srem <32 x i8> %a, %b2927 store <32 x i8> %c, ptr %x2928 ret void2929}2930 2931define void @srem_v16i16(ptr %x, ptr %y) {2932; CHECK-LABEL: srem_v16i16:2933; CHECK: # %bb.0:2934; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma2935; CHECK-NEXT: vle16.v v8, (a0)2936; CHECK-NEXT: vle16.v v10, (a1)2937; CHECK-NEXT: vrem.vv v8, v8, v102938; CHECK-NEXT: vse16.v v8, (a0)2939; CHECK-NEXT: ret2940 %a = load <16 x i16>, ptr %x2941 %b = load <16 x i16>, ptr %y2942 %c = srem <16 x i16> %a, %b2943 store <16 x i16> %c, ptr %x2944 ret void2945}2946 2947define void @srem_v8i32(ptr %x, ptr %y) {2948; CHECK-LABEL: srem_v8i32:2949; CHECK: # %bb.0:2950; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma2951; CHECK-NEXT: vle32.v v8, (a0)2952; CHECK-NEXT: vle32.v v10, (a1)2953; CHECK-NEXT: vrem.vv v8, v8, v102954; CHECK-NEXT: vse32.v v8, (a0)2955; CHECK-NEXT: ret2956 %a = load <8 x i32>, ptr %x2957 %b = load <8 x i32>, ptr %y2958 %c = srem <8 x i32> %a, %b2959 store <8 x i32> %c, ptr %x2960 ret void2961}2962 2963define void @srem_v4i64(ptr %x, ptr %y) {2964; CHECK-LABEL: srem_v4i64:2965; CHECK: # %bb.0:2966; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma2967; CHECK-NEXT: vle64.v v8, (a0)2968; CHECK-NEXT: vle64.v v10, (a1)2969; CHECK-NEXT: vrem.vv v8, v8, v102970; CHECK-NEXT: vse64.v v8, (a0)2971; CHECK-NEXT: ret2972 %a = load <4 x i64>, ptr %x2973 %b = load <4 x i64>, ptr %y2974 %c = srem <4 x i64> %a, %b2975 store <4 x i64> %c, ptr %x2976 ret void2977}2978 2979define void @udiv_v32i8(ptr %x, ptr %y) {2980; CHECK-LABEL: udiv_v32i8:2981; CHECK: # %bb.0:2982; CHECK-NEXT: li a2, 322983; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma2984; CHECK-NEXT: vle8.v v8, (a0)2985; CHECK-NEXT: vle8.v v10, (a1)2986; CHECK-NEXT: vdivu.vv v8, v8, v102987; CHECK-NEXT: vse8.v v8, (a0)2988; CHECK-NEXT: ret2989 %a = load <32 x i8>, ptr %x2990 %b = load <32 x i8>, ptr %y2991 %c = udiv <32 x i8> %a, %b2992 store <32 x i8> %c, ptr %x2993 ret void2994}2995 2996define void @udiv_v16i16(ptr %x, ptr %y) {2997; CHECK-LABEL: udiv_v16i16:2998; CHECK: # %bb.0:2999; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma3000; CHECK-NEXT: vle16.v v8, (a0)3001; CHECK-NEXT: vle16.v v10, (a1)3002; CHECK-NEXT: vdivu.vv v8, v8, v103003; CHECK-NEXT: vse16.v v8, (a0)3004; CHECK-NEXT: ret3005 %a = load <16 x i16>, ptr %x3006 %b = load <16 x i16>, ptr %y3007 %c = udiv <16 x i16> %a, %b3008 store <16 x i16> %c, ptr %x3009 ret void3010}3011 3012define void @udiv_v8i32(ptr %x, ptr %y) {3013; CHECK-LABEL: udiv_v8i32:3014; CHECK: # %bb.0:3015; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma3016; CHECK-NEXT: vle32.v v8, (a0)3017; CHECK-NEXT: vle32.v v10, (a1)3018; CHECK-NEXT: vdivu.vv v8, v8, v103019; CHECK-NEXT: vse32.v v8, (a0)3020; CHECK-NEXT: ret3021 %a = load <8 x i32>, ptr %x3022 %b = load <8 x i32>, ptr %y3023 %c = udiv <8 x i32> %a, %b3024 store <8 x i32> %c, ptr %x3025 ret void3026}3027 3028define void @udiv_v4i64(ptr %x, ptr %y) {3029; CHECK-LABEL: udiv_v4i64:3030; CHECK: # %bb.0:3031; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma3032; CHECK-NEXT: vle64.v v8, (a0)3033; CHECK-NEXT: vle64.v v10, (a1)3034; CHECK-NEXT: vdivu.vv v8, v8, v103035; CHECK-NEXT: vse64.v v8, (a0)3036; CHECK-NEXT: ret3037 %a = load <4 x i64>, ptr %x3038 %b = load <4 x i64>, ptr %y3039 %c = udiv <4 x i64> %a, %b3040 store <4 x i64> %c, ptr %x3041 ret void3042}3043 3044define void @urem_v32i8(ptr %x, ptr %y) {3045; CHECK-LABEL: urem_v32i8:3046; CHECK: # %bb.0:3047; CHECK-NEXT: li a2, 323048; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma3049; CHECK-NEXT: vle8.v v8, (a0)3050; CHECK-NEXT: vle8.v v10, (a1)3051; CHECK-NEXT: vremu.vv v8, v8, v103052; CHECK-NEXT: vse8.v v8, (a0)3053; CHECK-NEXT: ret3054 %a = load <32 x i8>, ptr %x3055 %b = load <32 x i8>, ptr %y3056 %c = urem <32 x i8> %a, %b3057 store <32 x i8> %c, ptr %x3058 ret void3059}3060 3061define void @urem_v16i16(ptr %x, ptr %y) {3062; CHECK-LABEL: urem_v16i16:3063; CHECK: # %bb.0:3064; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma3065; CHECK-NEXT: vle16.v v8, (a0)3066; CHECK-NEXT: vle16.v v10, (a1)3067; CHECK-NEXT: vremu.vv v8, v8, v103068; CHECK-NEXT: vse16.v v8, (a0)3069; CHECK-NEXT: ret3070 %a = load <16 x i16>, ptr %x3071 %b = load <16 x i16>, ptr %y3072 %c = urem <16 x i16> %a, %b3073 store <16 x i16> %c, ptr %x3074 ret void3075}3076 3077define void @urem_v8i32(ptr %x, ptr %y) {3078; CHECK-LABEL: urem_v8i32:3079; CHECK: # %bb.0:3080; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma3081; CHECK-NEXT: vle32.v v8, (a0)3082; CHECK-NEXT: vle32.v v10, (a1)3083; CHECK-NEXT: vremu.vv v8, v8, v103084; CHECK-NEXT: vse32.v v8, (a0)3085; CHECK-NEXT: ret3086 %a = load <8 x i32>, ptr %x3087 %b = load <8 x i32>, ptr %y3088 %c = urem <8 x i32> %a, %b3089 store <8 x i32> %c, ptr %x3090 ret void3091}3092 3093define void @urem_v4i64(ptr %x, ptr %y) {3094; CHECK-LABEL: urem_v4i64:3095; CHECK: # %bb.0:3096; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma3097; CHECK-NEXT: vle64.v v8, (a0)3098; CHECK-NEXT: vle64.v v10, (a1)3099; CHECK-NEXT: vremu.vv v8, v8, v103100; CHECK-NEXT: vse64.v v8, (a0)3101; CHECK-NEXT: ret3102 %a = load <4 x i64>, ptr %x3103 %b = load <4 x i64>, ptr %y3104 %c = urem <4 x i64> %a, %b3105 store <4 x i64> %c, ptr %x3106 ret void3107}3108 3109define void @extract_v4i64(ptr %x, ptr %y) {3110; CHECK-LABEL: extract_v4i64:3111; CHECK: # %bb.0:3112; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma3113; CHECK-NEXT: vle64.v v8, (a0)3114; CHECK-NEXT: vle64.v v10, (a1)3115; CHECK-NEXT: vadd.vv v8, v8, v103116; CHECK-NEXT: vse64.v v8, (a0)3117; CHECK-NEXT: ret3118 %a = load <4 x i64>, ptr %x3119 %b = load <4 x i64>, ptr %y3120 br label %"compute"3121"compute":3122 %c = add <4 x i64> %a, %b3123 store <4 x i64> %c, ptr %x3124 ret void3125}3126 3127define void @mulhu_v32i8(ptr %x) {3128; CHECK-LABEL: mulhu_v32i8:3129; CHECK: # %bb.0:3130; CHECK-NEXT: li a1, 323131; CHECK-NEXT: lui a2, %hi(.LCPI181_0)3132; CHECK-NEXT: addi a2, a2, %lo(.LCPI181_0)3133; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma3134; CHECK-NEXT: vle8.v v8, (a2)3135; CHECK-NEXT: lui a1, 1639073136; CHECK-NEXT: addi a1, a1, -20443137; CHECK-NEXT: vmv.s.x v0, a13138; CHECK-NEXT: li a1, -1283139; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma3140; CHECK-NEXT: vmv.v.i v10, 03141; CHECK-NEXT: vmerge.vxm v12, v10, a1, v03142; CHECK-NEXT: lui a1, 660493143; CHECK-NEXT: addi a1, a1, 323144; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma3145; CHECK-NEXT: vmv.s.x v0, a13146; CHECK-NEXT: lui a1, 82083147; CHECK-NEXT: vle8.v v14, (a0)3148; CHECK-NEXT: addi a1, a1, 5133149; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma3150; CHECK-NEXT: vmerge.vim v10, v10, 1, v03151; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma3152; CHECK-NEXT: vmv.s.x v0, a13153; CHECK-NEXT: lui a1, 667853154; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma3155; CHECK-NEXT: vmv.v.i v16, 43156; CHECK-NEXT: addi a1, a1, 783157; CHECK-NEXT: vsrl.vv v10, v14, v103158; CHECK-NEXT: vmerge.vim v16, v16, 1, v03159; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma3160; CHECK-NEXT: vmv.s.x v0, a13161; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma3162; CHECK-NEXT: vmulhu.vv v8, v10, v83163; CHECK-NEXT: vmerge.vim v10, v16, 3, v03164; CHECK-NEXT: lui a1, 5291603165; CHECK-NEXT: addi a1, a1, 3043166; CHECK-NEXT: vsub.vv v14, v14, v83167; CHECK-NEXT: vmulhu.vv v12, v14, v123168; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma3169; CHECK-NEXT: vmv.s.x v0, a13170; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma3171; CHECK-NEXT: vadd.vv v8, v12, v83172; CHECK-NEXT: vmerge.vim v10, v10, 2, v03173; CHECK-NEXT: vsrl.vv v8, v8, v103174; CHECK-NEXT: vse8.v v8, (a0)3175; CHECK-NEXT: ret3176 %a = load <32 x i8>, ptr %x3177 %b = udiv <32 x i8> %a, <i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25>3178 store <32 x i8> %b, ptr %x3179 ret void3180}3181 3182define void @mulhu_v16i16(ptr %x) {3183; RV32-LABEL: mulhu_v16i16:3184; RV32: # %bb.0:3185; RV32-NEXT: vsetivli zero, 16, e16, m2, ta, ma3186; RV32-NEXT: vle16.v v10, (a0)3187; RV32-NEXT: li a1, 2573188; RV32-NEXT: vmv.v.i v8, 03189; RV32-NEXT: vmv.s.x v0, a13190; RV32-NEXT: lui a1, 10485683191; RV32-NEXT: vmerge.vxm v12, v8, a1, v03192; RV32-NEXT: lui a1, 43193; RV32-NEXT: vsetvli zero, zero, e8, m1, ta, ma3194; RV32-NEXT: vmv.v.i v9, 03195; RV32-NEXT: addi a1, a1, 643196; RV32-NEXT: vsetvli zero, zero, e16, m2, ta, ma3197; RV32-NEXT: vmv.s.x v8, a13198; RV32-NEXT: lui a1, 23199; RV32-NEXT: addi a1, a1, 2893200; RV32-NEXT: vmv1r.v v0, v83201; RV32-NEXT: vsetvli zero, zero, e8, m1, ta, ma3202; RV32-NEXT: vmerge.vim v16, v9, 1, v03203; RV32-NEXT: vsetvli zero, zero, e16, m2, ta, ma3204; RV32-NEXT: vmv.s.x v0, a13205; RV32-NEXT: lui a1, %hi(.LCPI182_0)3206; RV32-NEXT: addi a1, a1, %lo(.LCPI182_0)3207; RV32-NEXT: vsetvli zero, zero, e8, m1, ta, ma3208; RV32-NEXT: vmv.v.i v9, 33209; RV32-NEXT: vmerge.vim v9, v9, 2, v03210; RV32-NEXT: vle16.v v14, (a1)3211; RV32-NEXT: vmv1r.v v0, v83212; RV32-NEXT: vmerge.vim v17, v9, 1, v03213; RV32-NEXT: vsetvli zero, zero, e16, m2, ta, ma3214; RV32-NEXT: vsext.vf2 v8, v163215; RV32-NEXT: vsrl.vv v8, v10, v83216; RV32-NEXT: vmulhu.vv v8, v8, v143217; RV32-NEXT: vsub.vv v10, v10, v83218; RV32-NEXT: vmulhu.vv v10, v10, v123219; RV32-NEXT: vadd.vv v8, v10, v83220; RV32-NEXT: vsext.vf2 v10, v173221; RV32-NEXT: vsrl.vv v8, v8, v103222; RV32-NEXT: vse16.v v8, (a0)3223; RV32-NEXT: ret3224;3225; RV64-LABEL: mulhu_v16i16:3226; RV64: # %bb.0:3227; RV64-NEXT: vsetivli zero, 16, e16, m2, ta, ma3228; RV64-NEXT: vle16.v v8, (a0)3229; RV64-NEXT: li a1, 2573230; RV64-NEXT: vmv.v.i v10, 03231; RV64-NEXT: vmv.s.x v0, a13232; RV64-NEXT: lui a1, %hi(.LCPI182_0)3233; RV64-NEXT: addi a1, a1, %lo(.LCPI182_0)3234; RV64-NEXT: vle16.v v12, (a1)3235; RV64-NEXT: lui a1, 10485683236; RV64-NEXT: vmerge.vxm v10, v10, a1, v03237; RV64-NEXT: li a1, 13238; RV64-NEXT: slli a1, a1, 483239; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma3240; RV64-NEXT: vmv.v.x v16, a13241; RV64-NEXT: lui a1, %hi(.LCPI182_1)3242; RV64-NEXT: ld a1, %lo(.LCPI182_1)(a1)3243; RV64-NEXT: vsetivli zero, 16, e16, m2, ta, ma3244; RV64-NEXT: vsext.vf2 v14, v163245; RV64-NEXT: vsrl.vv v14, v8, v143246; RV64-NEXT: vmulhu.vv v12, v14, v123247; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma3248; RV64-NEXT: vmv.v.x v14, a13249; RV64-NEXT: vsetivli zero, 16, e16, m2, ta, ma3250; RV64-NEXT: vsub.vv v8, v8, v123251; RV64-NEXT: vmulhu.vv v8, v8, v103252; RV64-NEXT: vadd.vv v8, v8, v123253; RV64-NEXT: vsext.vf2 v10, v143254; RV64-NEXT: vsrl.vv v8, v8, v103255; RV64-NEXT: vse16.v v8, (a0)3256; RV64-NEXT: ret3257 %a = load <16 x i16>, ptr %x3258 %b = udiv <16 x i16> %a, <i16 7, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15, i16 7, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>3259 store <16 x i16> %b, ptr %x3260 ret void3261}3262 3263define void @mulhu_v8i32(ptr %x) {3264; CHECK-LABEL: mulhu_v8i32:3265; CHECK: # %bb.0:3266; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma3267; CHECK-NEXT: vle32.v v8, (a0)3268; CHECK-NEXT: li a1, 683269; CHECK-NEXT: vmv.v.i v10, 03270; CHECK-NEXT: vmv.s.x v0, a13271; CHECK-NEXT: lui a1, %hi(.LCPI183_0)3272; CHECK-NEXT: addi a1, a1, %lo(.LCPI183_0)3273; CHECK-NEXT: vle32.v v12, (a1)3274; CHECK-NEXT: lui a1, 5242883275; CHECK-NEXT: vmerge.vxm v10, v10, a1, v03276; CHECK-NEXT: lui a1, 41283277; CHECK-NEXT: addi a1, a1, 5143278; CHECK-NEXT: vmulhu.vv v12, v8, v123279; CHECK-NEXT: vsub.vv v8, v8, v123280; CHECK-NEXT: vmulhu.vv v8, v8, v103281; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma3282; CHECK-NEXT: vmv.v.x v14, a13283; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma3284; CHECK-NEXT: vadd.vv v8, v8, v123285; CHECK-NEXT: vsext.vf4 v10, v143286; CHECK-NEXT: vsrl.vv v8, v8, v103287; CHECK-NEXT: vse32.v v8, (a0)3288; CHECK-NEXT: ret3289 %a = load <8 x i32>, ptr %x3290 %b = udiv <8 x i32> %a, <i32 5, i32 6, i32 7, i32 9, i32 5, i32 6, i32 7, i32 9>3291 store <8 x i32> %b, ptr %x3292 ret void3293}3294 3295define void @mulhu_v4i64(ptr %x) {3296; RV32-LABEL: mulhu_v4i64:3297; RV32: # %bb.0:3298; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma3299; RV32-NEXT: vle64.v v8, (a0)3300; RV32-NEXT: lui a1, %hi(.LCPI184_0)3301; RV32-NEXT: addi a1, a1, %lo(.LCPI184_0)3302; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma3303; RV32-NEXT: vle32.v v10, (a1)3304; RV32-NEXT: lui a1, 5242883305; RV32-NEXT: vmv.v.i v12, 03306; RV32-NEXT: vmv.s.x v14, a13307; RV32-NEXT: lui a1, %hi(.LCPI184_1)3308; RV32-NEXT: addi a1, a1, %lo(.LCPI184_1)3309; RV32-NEXT: vsetivli zero, 6, e32, m2, tu, ma3310; RV32-NEXT: vslideup.vi v12, v14, 53311; RV32-NEXT: vsetivli zero, 8, e8, mf2, ta, ma3312; RV32-NEXT: vle8.v v14, (a1)3313; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma3314; RV32-NEXT: vmulhu.vv v10, v8, v103315; RV32-NEXT: vsub.vv v8, v8, v103316; RV32-NEXT: vmulhu.vv v8, v8, v123317; RV32-NEXT: vadd.vv v8, v8, v103318; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma3319; RV32-NEXT: vsext.vf4 v10, v143320; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma3321; RV32-NEXT: vsrl.vv v8, v8, v103322; RV32-NEXT: vse64.v v8, (a0)3323; RV32-NEXT: ret3324;3325; RV64-LABEL: mulhu_v4i64:3326; RV64: # %bb.0:3327; RV64-NEXT: vsetivli zero, 4, e64, m2, ta, ma3328; RV64-NEXT: vle64.v v8, (a0)3329; RV64-NEXT: lui a1, %hi(.LCPI184_0)3330; RV64-NEXT: addi a1, a1, %lo(.LCPI184_0)3331; RV64-NEXT: vle64.v v10, (a1)3332; RV64-NEXT: li a1, -13333; RV64-NEXT: vmv.v.i v12, 03334; RV64-NEXT: slli a1, a1, 633335; RV64-NEXT: vmv.s.x v14, a13336; RV64-NEXT: lui a1, 123203337; RV64-NEXT: addi a1, a1, 5133338; RV64-NEXT: vsetivli zero, 3, e64, m2, tu, ma3339; RV64-NEXT: vslideup.vi v12, v14, 23340; RV64-NEXT: vmv.s.x v14, a13341; RV64-NEXT: vsetivli zero, 4, e64, m2, ta, ma3342; RV64-NEXT: vmulhu.vv v10, v8, v103343; RV64-NEXT: vsub.vv v8, v8, v103344; RV64-NEXT: vmulhu.vv v8, v8, v123345; RV64-NEXT: vadd.vv v8, v8, v103346; RV64-NEXT: vsext.vf8 v10, v143347; RV64-NEXT: vsrl.vv v8, v8, v103348; RV64-NEXT: vse64.v v8, (a0)3349; RV64-NEXT: ret3350 %a = load <4 x i64>, ptr %x3351 %b = udiv <4 x i64> %a, <i64 3, i64 5, i64 7, i64 9>3352 store <4 x i64> %b, ptr %x3353 ret void3354}3355 3356define void @mulhs_v32i8(ptr %x) {3357; CHECK-LABEL: mulhs_v32i8:3358; CHECK: # %bb.0:3359; CHECK-NEXT: li a1, 323360; CHECK-NEXT: lui a2, 3044533361; CHECK-NEXT: addi a2, a2, -14523362; CHECK-NEXT: vsetivli zero, 1, e32, m1, ta, ma3363; CHECK-NEXT: vmv.s.x v0, a23364; CHECK-NEXT: li a2, -1233365; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma3366; CHECK-NEXT: vle8.v v8, (a0)3367; CHECK-NEXT: vmv.v.i v10, 73368; CHECK-NEXT: vmerge.vim v10, v10, 1, v03369; CHECK-NEXT: vmv.v.x v12, a23370; CHECK-NEXT: li a1, 573371; CHECK-NEXT: vmerge.vxm v12, v12, a1, v03372; CHECK-NEXT: vmulhu.vv v8, v8, v123373; CHECK-NEXT: vsrl.vv v8, v8, v103374; CHECK-NEXT: vse8.v v8, (a0)3375; CHECK-NEXT: ret3376 %a = load <32 x i8>, ptr %x3377 %b = udiv <32 x i8> %a, <i8 -9, i8 -9, i8 9, i8 -9, i8 9, i8 -9, i8 9, i8 -9, i8 -9, i8 9, i8 -9, i8 9, i8 -9, i8 -9, i8 9, i8 -9, i8 -9, i8 -9, i8 9, i8 -9, i8 9, i8 -9, i8 9, i8 -9, i8 -9, i8 9, i8 -9, i8 9, i8 -9, i8 -9, i8 9, i8 -9>3378 store <32 x i8> %b, ptr %x3379 ret void3380}3381 3382define void @mulhs_v16i16(ptr %x) {3383; CHECK-LABEL: mulhs_v16i16:3384; CHECK: # %bb.0:3385; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma3386; CHECK-NEXT: vle16.v v8, (a0)3387; CHECK-NEXT: lui a1, 53388; CHECK-NEXT: addi a1, a1, -17553389; CHECK-NEXT: vmv.v.x v10, a13390; CHECK-NEXT: lui a1, 73391; CHECK-NEXT: addi a1, a1, -16873392; CHECK-NEXT: vmv.s.x v0, a13393; CHECK-NEXT: lui a1, 10485713394; CHECK-NEXT: addi a1, a1, 17553395; CHECK-NEXT: vmerge.vxm v10, v10, a1, v03396; CHECK-NEXT: vmulh.vv v8, v8, v103397; CHECK-NEXT: vsra.vi v8, v8, 13398; CHECK-NEXT: vsrl.vi v10, v8, 153399; CHECK-NEXT: vadd.vv v8, v8, v103400; CHECK-NEXT: vse16.v v8, (a0)3401; CHECK-NEXT: ret3402 %a = load <16 x i16>, ptr %x3403 %b = sdiv <16 x i16> %a, <i16 -7, i16 7, i16 7, i16 -7, i16 7, i16 -7, i16 -7, i16 7, i16 -7, i16 7, i16 7, i16 -7, i16 7, i16 -7, i16 -7, i16 7>3404 store <16 x i16> %b, ptr %x3405 ret void3406}3407 3408define void @mulhs_v8i32(ptr %x) {3409; RV32-LABEL: mulhs_v8i32:3410; RV32: # %bb.0:3411; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma3412; RV32-NEXT: vle32.v v8, (a0)3413; RV32-NEXT: li a1, 853414; RV32-NEXT: vmv.s.x v0, a13415; RV32-NEXT: lui a1, 4194303416; RV32-NEXT: addi a1, a1, 16393417; RV32-NEXT: vmv.v.x v10, a13418; RV32-NEXT: lui a1, 6291463419; RV32-NEXT: addi a1, a1, -16393420; RV32-NEXT: vmerge.vxm v10, v10, a1, v03421; RV32-NEXT: vmulh.vv v8, v8, v103422; RV32-NEXT: vsrl.vi v10, v8, 313423; RV32-NEXT: vsra.vi v8, v8, 13424; RV32-NEXT: vadd.vv v8, v8, v103425; RV32-NEXT: vse32.v v8, (a0)3426; RV32-NEXT: ret3427;3428; RV64-LABEL: mulhs_v8i32:3429; RV64: # %bb.0:3430; RV64-NEXT: lui a1, %hi(.LCPI187_0)3431; RV64-NEXT: ld a1, %lo(.LCPI187_0)(a1)3432; RV64-NEXT: vsetivli zero, 8, e32, m2, ta, ma3433; RV64-NEXT: vle32.v v8, (a0)3434; RV64-NEXT: vsetivli zero, 4, e64, m2, ta, ma3435; RV64-NEXT: vmv.v.x v10, a13436; RV64-NEXT: vsetivli zero, 8, e32, m2, ta, ma3437; RV64-NEXT: vmulh.vv v8, v8, v103438; RV64-NEXT: vsra.vi v8, v8, 13439; RV64-NEXT: vsrl.vi v10, v8, 313440; RV64-NEXT: vadd.vv v8, v8, v103441; RV64-NEXT: vse32.v v8, (a0)3442; RV64-NEXT: ret3443 %a = load <8 x i32>, ptr %x3444 %b = sdiv <8 x i32> %a, <i32 -5, i32 5, i32 -5, i32 5, i32 -5, i32 5, i32 -5, i32 5>3445 store <8 x i32> %b, ptr %x3446 ret void3447}3448 3449define void @mulhs_v4i64(ptr %x) {3450; RV32-LABEL: mulhs_v4i64:3451; RV32: # %bb.0:3452; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma3453; RV32-NEXT: vle64.v v8, (a0)3454; RV32-NEXT: lui a1, 3495253455; RV32-NEXT: li a2, 173456; RV32-NEXT: vmv.s.x v0, a23457; RV32-NEXT: lui a2, 10485603458; RV32-NEXT: vsetivli zero, 2, e32, mf2, ta, ma3459; RV32-NEXT: vmv.v.x v14, a23460; RV32-NEXT: addi a2, a1, 13653461; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma3462; RV32-NEXT: vmv.v.x v10, a23463; RV32-NEXT: li a2, 633464; RV32-NEXT: addi a1, a1, 13663465; RV32-NEXT: vmerge.vxm v10, v10, a1, v03466; RV32-NEXT: lui a1, 163467; RV32-NEXT: vsext.vf4 v12, v143468; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma3469; RV32-NEXT: vmulh.vv v10, v8, v103470; RV32-NEXT: vmadd.vv v12, v8, v103471; RV32-NEXT: vsetivli zero, 2, e32, mf2, ta, ma3472; RV32-NEXT: vmv.v.x v10, a13473; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma3474; RV32-NEXT: vsext.vf4 v8, v103475; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma3476; RV32-NEXT: vsrl.vx v10, v12, a23477; RV32-NEXT: vsra.vv v8, v12, v83478; RV32-NEXT: vadd.vv v8, v8, v103479; RV32-NEXT: vse64.v v8, (a0)3480; RV32-NEXT: ret3481;3482; RV64-LABEL: mulhs_v4i64:3483; RV64: # %bb.0:3484; RV64-NEXT: vsetivli zero, 4, e64, m2, ta, ma3485; RV64-NEXT: vle64.v v8, (a0)3486; RV64-NEXT: lui a1, 3495253487; RV64-NEXT: lui a2, 10444963488; RV64-NEXT: addi a1, a1, 13653489; RV64-NEXT: addi a2, a2, -2563490; RV64-NEXT: vmv.s.x v14, a23491; RV64-NEXT: slli a2, a1, 323492; RV64-NEXT: add a1, a1, a23493; RV64-NEXT: lui a2, %hi(.LCPI188_0)3494; RV64-NEXT: ld a2, %lo(.LCPI188_0)(a2)3495; RV64-NEXT: vsetivli zero, 1, e8, mf8, ta, ma3496; RV64-NEXT: vmv.v.i v0, 53497; RV64-NEXT: vsetivli zero, 4, e64, m2, ta, ma3498; RV64-NEXT: vmv.v.x v10, a13499; RV64-NEXT: li a1, 633500; RV64-NEXT: vmerge.vxm v10, v10, a2, v03501; RV64-NEXT: lui a2, 40963502; RV64-NEXT: addi a2, a2, 2563503; RV64-NEXT: vsext.vf8 v12, v143504; RV64-NEXT: vmulh.vv v10, v8, v103505; RV64-NEXT: vmadd.vv v12, v8, v103506; RV64-NEXT: vmv.s.x v10, a23507; RV64-NEXT: vsext.vf8 v8, v103508; RV64-NEXT: vsrl.vx v10, v12, a13509; RV64-NEXT: vsra.vv v8, v12, v83510; RV64-NEXT: vadd.vv v8, v8, v103511; RV64-NEXT: vse64.v v8, (a0)3512; RV64-NEXT: ret3513 %a = load <4 x i64>, ptr %x3514 %b = sdiv <4 x i64> %a, <i64 3, i64 -3, i64 3, i64 -3>3515 store <4 x i64> %b, ptr %x3516 ret void3517}3518 3519define void @smin_v32i8(ptr %x, ptr %y) {3520; CHECK-LABEL: smin_v32i8:3521; CHECK: # %bb.0:3522; CHECK-NEXT: li a2, 323523; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma3524; CHECK-NEXT: vle8.v v8, (a0)3525; CHECK-NEXT: vle8.v v10, (a1)3526; CHECK-NEXT: vmin.vv v8, v8, v103527; CHECK-NEXT: vse8.v v8, (a0)3528; CHECK-NEXT: ret3529 %a = load <32 x i8>, ptr %x3530 %b = load <32 x i8>, ptr %y3531 %cc = icmp slt <32 x i8> %a, %b3532 %c = select <32 x i1> %cc, <32 x i8> %a, <32 x i8> %b3533 store <32 x i8> %c, ptr %x3534 ret void3535}3536 3537define void @smin_v16i16(ptr %x, ptr %y) {3538; CHECK-LABEL: smin_v16i16:3539; CHECK: # %bb.0:3540; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma3541; CHECK-NEXT: vle16.v v8, (a0)3542; CHECK-NEXT: vle16.v v10, (a1)3543; CHECK-NEXT: vmin.vv v8, v8, v103544; CHECK-NEXT: vse16.v v8, (a0)3545; CHECK-NEXT: ret3546 %a = load <16 x i16>, ptr %x3547 %b = load <16 x i16>, ptr %y3548 %cc = icmp slt <16 x i16> %a, %b3549 %c = select <16 x i1> %cc, <16 x i16> %a, <16 x i16> %b3550 store <16 x i16> %c, ptr %x3551 ret void3552}3553 3554define void @smin_v8i32(ptr %x, ptr %y) {3555; CHECK-LABEL: smin_v8i32:3556; CHECK: # %bb.0:3557; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma3558; CHECK-NEXT: vle32.v v8, (a0)3559; CHECK-NEXT: vle32.v v10, (a1)3560; CHECK-NEXT: vmin.vv v8, v8, v103561; CHECK-NEXT: vse32.v v8, (a0)3562; CHECK-NEXT: ret3563 %a = load <8 x i32>, ptr %x3564 %b = load <8 x i32>, ptr %y3565 %cc = icmp slt <8 x i32> %a, %b3566 %c = select <8 x i1> %cc, <8 x i32> %a, <8 x i32> %b3567 store <8 x i32> %c, ptr %x3568 ret void3569}3570 3571define void @smin_v4i64(ptr %x, ptr %y) {3572; CHECK-LABEL: smin_v4i64:3573; CHECK: # %bb.0:3574; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma3575; CHECK-NEXT: vle64.v v8, (a0)3576; CHECK-NEXT: vle64.v v10, (a1)3577; CHECK-NEXT: vmin.vv v8, v8, v103578; CHECK-NEXT: vse64.v v8, (a0)3579; CHECK-NEXT: ret3580 %a = load <4 x i64>, ptr %x3581 %b = load <4 x i64>, ptr %y3582 %cc = icmp slt <4 x i64> %a, %b3583 %c = select <4 x i1> %cc, <4 x i64> %a, <4 x i64> %b3584 store <4 x i64> %c, ptr %x3585 ret void3586}3587 3588define void @smax_v32i8(ptr %x, ptr %y) {3589; CHECK-LABEL: smax_v32i8:3590; CHECK: # %bb.0:3591; CHECK-NEXT: li a2, 323592; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma3593; CHECK-NEXT: vle8.v v8, (a0)3594; CHECK-NEXT: vle8.v v10, (a1)3595; CHECK-NEXT: vmax.vv v8, v8, v103596; CHECK-NEXT: vse8.v v8, (a0)3597; CHECK-NEXT: ret3598 %a = load <32 x i8>, ptr %x3599 %b = load <32 x i8>, ptr %y3600 %cc = icmp sgt <32 x i8> %a, %b3601 %c = select <32 x i1> %cc, <32 x i8> %a, <32 x i8> %b3602 store <32 x i8> %c, ptr %x3603 ret void3604}3605 3606define void @smax_v16i16(ptr %x, ptr %y) {3607; CHECK-LABEL: smax_v16i16:3608; CHECK: # %bb.0:3609; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma3610; CHECK-NEXT: vle16.v v8, (a0)3611; CHECK-NEXT: vle16.v v10, (a1)3612; CHECK-NEXT: vmax.vv v8, v8, v103613; CHECK-NEXT: vse16.v v8, (a0)3614; CHECK-NEXT: ret3615 %a = load <16 x i16>, ptr %x3616 %b = load <16 x i16>, ptr %y3617 %cc = icmp sgt <16 x i16> %a, %b3618 %c = select <16 x i1> %cc, <16 x i16> %a, <16 x i16> %b3619 store <16 x i16> %c, ptr %x3620 ret void3621}3622 3623define void @smax_v8i32(ptr %x, ptr %y) {3624; CHECK-LABEL: smax_v8i32:3625; CHECK: # %bb.0:3626; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma3627; CHECK-NEXT: vle32.v v8, (a0)3628; CHECK-NEXT: vle32.v v10, (a1)3629; CHECK-NEXT: vmax.vv v8, v8, v103630; CHECK-NEXT: vse32.v v8, (a0)3631; CHECK-NEXT: ret3632 %a = load <8 x i32>, ptr %x3633 %b = load <8 x i32>, ptr %y3634 %cc = icmp sgt <8 x i32> %a, %b3635 %c = select <8 x i1> %cc, <8 x i32> %a, <8 x i32> %b3636 store <8 x i32> %c, ptr %x3637 ret void3638}3639 3640define void @smax_v4i64(ptr %x, ptr %y) {3641; CHECK-LABEL: smax_v4i64:3642; CHECK: # %bb.0:3643; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma3644; CHECK-NEXT: vle64.v v8, (a0)3645; CHECK-NEXT: vle64.v v10, (a1)3646; CHECK-NEXT: vmax.vv v8, v8, v103647; CHECK-NEXT: vse64.v v8, (a0)3648; CHECK-NEXT: ret3649 %a = load <4 x i64>, ptr %x3650 %b = load <4 x i64>, ptr %y3651 %cc = icmp sgt <4 x i64> %a, %b3652 %c = select <4 x i1> %cc, <4 x i64> %a, <4 x i64> %b3653 store <4 x i64> %c, ptr %x3654 ret void3655}3656 3657define void @umin_v32i8(ptr %x, ptr %y) {3658; CHECK-LABEL: umin_v32i8:3659; CHECK: # %bb.0:3660; CHECK-NEXT: li a2, 323661; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma3662; CHECK-NEXT: vle8.v v8, (a0)3663; CHECK-NEXT: vle8.v v10, (a1)3664; CHECK-NEXT: vminu.vv v8, v8, v103665; CHECK-NEXT: vse8.v v8, (a0)3666; CHECK-NEXT: ret3667 %a = load <32 x i8>, ptr %x3668 %b = load <32 x i8>, ptr %y3669 %cc = icmp ult <32 x i8> %a, %b3670 %c = select <32 x i1> %cc, <32 x i8> %a, <32 x i8> %b3671 store <32 x i8> %c, ptr %x3672 ret void3673}3674 3675define void @umin_v16i16(ptr %x, ptr %y) {3676; CHECK-LABEL: umin_v16i16:3677; CHECK: # %bb.0:3678; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma3679; CHECK-NEXT: vle16.v v8, (a0)3680; CHECK-NEXT: vle16.v v10, (a1)3681; CHECK-NEXT: vminu.vv v8, v8, v103682; CHECK-NEXT: vse16.v v8, (a0)3683; CHECK-NEXT: ret3684 %a = load <16 x i16>, ptr %x3685 %b = load <16 x i16>, ptr %y3686 %cc = icmp ult <16 x i16> %a, %b3687 %c = select <16 x i1> %cc, <16 x i16> %a, <16 x i16> %b3688 store <16 x i16> %c, ptr %x3689 ret void3690}3691 3692define void @umin_v8i32(ptr %x, ptr %y) {3693; CHECK-LABEL: umin_v8i32:3694; CHECK: # %bb.0:3695; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma3696; CHECK-NEXT: vle32.v v8, (a0)3697; CHECK-NEXT: vle32.v v10, (a1)3698; CHECK-NEXT: vminu.vv v8, v8, v103699; CHECK-NEXT: vse32.v v8, (a0)3700; CHECK-NEXT: ret3701 %a = load <8 x i32>, ptr %x3702 %b = load <8 x i32>, ptr %y3703 %cc = icmp ult <8 x i32> %a, %b3704 %c = select <8 x i1> %cc, <8 x i32> %a, <8 x i32> %b3705 store <8 x i32> %c, ptr %x3706 ret void3707}3708 3709define void @umin_v4i64(ptr %x, ptr %y) {3710; CHECK-LABEL: umin_v4i64:3711; CHECK: # %bb.0:3712; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma3713; CHECK-NEXT: vle64.v v8, (a0)3714; CHECK-NEXT: vle64.v v10, (a1)3715; CHECK-NEXT: vminu.vv v8, v8, v103716; CHECK-NEXT: vse64.v v8, (a0)3717; CHECK-NEXT: ret3718 %a = load <4 x i64>, ptr %x3719 %b = load <4 x i64>, ptr %y3720 %cc = icmp ult <4 x i64> %a, %b3721 %c = select <4 x i1> %cc, <4 x i64> %a, <4 x i64> %b3722 store <4 x i64> %c, ptr %x3723 ret void3724}3725 3726define void @umax_v32i8(ptr %x, ptr %y) {3727; CHECK-LABEL: umax_v32i8:3728; CHECK: # %bb.0:3729; CHECK-NEXT: li a2, 323730; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma3731; CHECK-NEXT: vle8.v v8, (a0)3732; CHECK-NEXT: vle8.v v10, (a1)3733; CHECK-NEXT: vmaxu.vv v8, v8, v103734; CHECK-NEXT: vse8.v v8, (a0)3735; CHECK-NEXT: ret3736 %a = load <32 x i8>, ptr %x3737 %b = load <32 x i8>, ptr %y3738 %cc = icmp ugt <32 x i8> %a, %b3739 %c = select <32 x i1> %cc, <32 x i8> %a, <32 x i8> %b3740 store <32 x i8> %c, ptr %x3741 ret void3742}3743 3744define void @umax_v16i16(ptr %x, ptr %y) {3745; CHECK-LABEL: umax_v16i16:3746; CHECK: # %bb.0:3747; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma3748; CHECK-NEXT: vle16.v v8, (a0)3749; CHECK-NEXT: vle16.v v10, (a1)3750; CHECK-NEXT: vmaxu.vv v8, v8, v103751; CHECK-NEXT: vse16.v v8, (a0)3752; CHECK-NEXT: ret3753 %a = load <16 x i16>, ptr %x3754 %b = load <16 x i16>, ptr %y3755 %cc = icmp ugt <16 x i16> %a, %b3756 %c = select <16 x i1> %cc, <16 x i16> %a, <16 x i16> %b3757 store <16 x i16> %c, ptr %x3758 ret void3759}3760 3761define void @umax_v8i32(ptr %x, ptr %y) {3762; CHECK-LABEL: umax_v8i32:3763; CHECK: # %bb.0:3764; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma3765; CHECK-NEXT: vle32.v v8, (a0)3766; CHECK-NEXT: vle32.v v10, (a1)3767; CHECK-NEXT: vmaxu.vv v8, v8, v103768; CHECK-NEXT: vse32.v v8, (a0)3769; CHECK-NEXT: ret3770 %a = load <8 x i32>, ptr %x3771 %b = load <8 x i32>, ptr %y3772 %cc = icmp ugt <8 x i32> %a, %b3773 %c = select <8 x i1> %cc, <8 x i32> %a, <8 x i32> %b3774 store <8 x i32> %c, ptr %x3775 ret void3776}3777 3778define void @umax_v4i64(ptr %x, ptr %y) {3779; CHECK-LABEL: umax_v4i64:3780; CHECK: # %bb.0:3781; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma3782; CHECK-NEXT: vle64.v v8, (a0)3783; CHECK-NEXT: vle64.v v10, (a1)3784; CHECK-NEXT: vmaxu.vv v8, v8, v103785; CHECK-NEXT: vse64.v v8, (a0)3786; CHECK-NEXT: ret3787 %a = load <4 x i64>, ptr %x3788 %b = load <4 x i64>, ptr %y3789 %cc = icmp ugt <4 x i64> %a, %b3790 %c = select <4 x i1> %cc, <4 x i64> %a, <4 x i64> %b3791 store <4 x i64> %c, ptr %x3792 ret void3793}3794 3795define void @add_vi_v16i8(ptr %x) {3796; CHECK-LABEL: add_vi_v16i8:3797; CHECK: # %bb.0:3798; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma3799; CHECK-NEXT: vle8.v v8, (a0)3800; CHECK-NEXT: vadd.vi v8, v8, -13801; CHECK-NEXT: vse8.v v8, (a0)3802; CHECK-NEXT: ret3803 %a = load <16 x i8>, ptr %x3804 %d = add <16 x i8> %a, splat (i8 -1)3805 store <16 x i8> %d, ptr %x3806 ret void3807}3808 3809define void @add_vi_v8i16(ptr %x) {3810; CHECK-LABEL: add_vi_v8i16:3811; CHECK: # %bb.0:3812; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma3813; CHECK-NEXT: vle16.v v8, (a0)3814; CHECK-NEXT: vadd.vi v8, v8, -13815; CHECK-NEXT: vse16.v v8, (a0)3816; CHECK-NEXT: ret3817 %a = load <8 x i16>, ptr %x3818 %d = add <8 x i16> %a, splat (i16 -1)3819 store <8 x i16> %d, ptr %x3820 ret void3821}3822 3823define void @add_vi_v4i32(ptr %x) {3824; CHECK-LABEL: add_vi_v4i32:3825; CHECK: # %bb.0:3826; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma3827; CHECK-NEXT: vle32.v v8, (a0)3828; CHECK-NEXT: vadd.vi v8, v8, -13829; CHECK-NEXT: vse32.v v8, (a0)3830; CHECK-NEXT: ret3831 %a = load <4 x i32>, ptr %x3832 %d = add <4 x i32> %a, splat (i32 -1)3833 store <4 x i32> %d, ptr %x3834 ret void3835}3836 3837define void @add_vi_v2i64(ptr %x) {3838; CHECK-LABEL: add_vi_v2i64:3839; CHECK: # %bb.0:3840; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma3841; CHECK-NEXT: vle64.v v8, (a0)3842; CHECK-NEXT: vadd.vi v8, v8, -13843; CHECK-NEXT: vse64.v v8, (a0)3844; CHECK-NEXT: ret3845 %a = load <2 x i64>, ptr %x3846 %d = add <2 x i64> %a, splat (i64 -1)3847 store <2 x i64> %d, ptr %x3848 ret void3849}3850 3851define void @add_iv_v16i8(ptr %x) {3852; CHECK-LABEL: add_iv_v16i8:3853; CHECK: # %bb.0:3854; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma3855; CHECK-NEXT: vle8.v v8, (a0)3856; CHECK-NEXT: vadd.vi v8, v8, 13857; CHECK-NEXT: vse8.v v8, (a0)3858; CHECK-NEXT: ret3859 %a = load <16 x i8>, ptr %x3860 %d = add <16 x i8> splat (i8 1), %a3861 store <16 x i8> %d, ptr %x3862 ret void3863}3864 3865define void @add_iv_v8i16(ptr %x) {3866; CHECK-LABEL: add_iv_v8i16:3867; CHECK: # %bb.0:3868; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma3869; CHECK-NEXT: vle16.v v8, (a0)3870; CHECK-NEXT: vadd.vi v8, v8, 13871; CHECK-NEXT: vse16.v v8, (a0)3872; CHECK-NEXT: ret3873 %a = load <8 x i16>, ptr %x3874 %d = add <8 x i16> splat (i16 1), %a3875 store <8 x i16> %d, ptr %x3876 ret void3877}3878 3879define void @add_iv_v4i32(ptr %x) {3880; CHECK-LABEL: add_iv_v4i32:3881; CHECK: # %bb.0:3882; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma3883; CHECK-NEXT: vle32.v v8, (a0)3884; CHECK-NEXT: vadd.vi v8, v8, 13885; CHECK-NEXT: vse32.v v8, (a0)3886; CHECK-NEXT: ret3887 %a = load <4 x i32>, ptr %x3888 %d = add <4 x i32> splat (i32 1), %a3889 store <4 x i32> %d, ptr %x3890 ret void3891}3892 3893define void @add_iv_v2i64(ptr %x) {3894; CHECK-LABEL: add_iv_v2i64:3895; CHECK: # %bb.0:3896; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma3897; CHECK-NEXT: vle64.v v8, (a0)3898; CHECK-NEXT: vadd.vi v8, v8, 13899; CHECK-NEXT: vse64.v v8, (a0)3900; CHECK-NEXT: ret3901 %a = load <2 x i64>, ptr %x3902 %d = add <2 x i64> splat (i64 1), %a3903 store <2 x i64> %d, ptr %x3904 ret void3905}3906 3907define void @add_vx_v16i8(ptr %x, i8 %y) {3908; CHECK-LABEL: add_vx_v16i8:3909; CHECK: # %bb.0:3910; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma3911; CHECK-NEXT: vle8.v v8, (a0)3912; CHECK-NEXT: vadd.vx v8, v8, a13913; CHECK-NEXT: vse8.v v8, (a0)3914; CHECK-NEXT: ret3915 %a = load <16 x i8>, ptr %x3916 %b = insertelement <16 x i8> poison, i8 %y, i32 03917 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer3918 %d = add <16 x i8> %a, %c3919 store <16 x i8> %d, ptr %x3920 ret void3921}3922 3923define void @add_vx_v8i16(ptr %x, i16 %y) {3924; CHECK-LABEL: add_vx_v8i16:3925; CHECK: # %bb.0:3926; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma3927; CHECK-NEXT: vle16.v v8, (a0)3928; CHECK-NEXT: vadd.vx v8, v8, a13929; CHECK-NEXT: vse16.v v8, (a0)3930; CHECK-NEXT: ret3931 %a = load <8 x i16>, ptr %x3932 %b = insertelement <8 x i16> poison, i16 %y, i32 03933 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer3934 %d = add <8 x i16> %a, %c3935 store <8 x i16> %d, ptr %x3936 ret void3937}3938 3939define void @add_vx_v4i32(ptr %x, i32 %y) {3940; CHECK-LABEL: add_vx_v4i32:3941; CHECK: # %bb.0:3942; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma3943; CHECK-NEXT: vle32.v v8, (a0)3944; CHECK-NEXT: vadd.vx v8, v8, a13945; CHECK-NEXT: vse32.v v8, (a0)3946; CHECK-NEXT: ret3947 %a = load <4 x i32>, ptr %x3948 %b = insertelement <4 x i32> poison, i32 %y, i32 03949 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer3950 %d = add <4 x i32> %a, %c3951 store <4 x i32> %d, ptr %x3952 ret void3953}3954 3955define void @add_xv_v16i8(ptr %x, i8 %y) {3956; CHECK-LABEL: add_xv_v16i8:3957; CHECK: # %bb.0:3958; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma3959; CHECK-NEXT: vle8.v v8, (a0)3960; CHECK-NEXT: vadd.vx v8, v8, a13961; CHECK-NEXT: vse8.v v8, (a0)3962; CHECK-NEXT: ret3963 %a = load <16 x i8>, ptr %x3964 %b = insertelement <16 x i8> poison, i8 %y, i32 03965 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer3966 %d = add <16 x i8> %c, %a3967 store <16 x i8> %d, ptr %x3968 ret void3969}3970 3971define void @add_xv_v8i16(ptr %x, i16 %y) {3972; CHECK-LABEL: add_xv_v8i16:3973; CHECK: # %bb.0:3974; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma3975; CHECK-NEXT: vle16.v v8, (a0)3976; CHECK-NEXT: vadd.vx v8, v8, a13977; CHECK-NEXT: vse16.v v8, (a0)3978; CHECK-NEXT: ret3979 %a = load <8 x i16>, ptr %x3980 %b = insertelement <8 x i16> poison, i16 %y, i32 03981 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer3982 %d = add <8 x i16> %c, %a3983 store <8 x i16> %d, ptr %x3984 ret void3985}3986 3987define void @add_xv_v4i32(ptr %x, i32 %y) {3988; CHECK-LABEL: add_xv_v4i32:3989; CHECK: # %bb.0:3990; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma3991; CHECK-NEXT: vle32.v v8, (a0)3992; CHECK-NEXT: vadd.vx v8, v8, a13993; CHECK-NEXT: vse32.v v8, (a0)3994; CHECK-NEXT: ret3995 %a = load <4 x i32>, ptr %x3996 %b = insertelement <4 x i32> poison, i32 %y, i32 03997 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer3998 %d = add <4 x i32> %c, %a3999 store <4 x i32> %d, ptr %x4000 ret void4001}4002 4003define void @sub_vi_v16i8(ptr %x) {4004; CHECK-LABEL: sub_vi_v16i8:4005; CHECK: # %bb.0:4006; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4007; CHECK-NEXT: vle8.v v8, (a0)4008; CHECK-NEXT: vadd.vi v8, v8, 14009; CHECK-NEXT: vse8.v v8, (a0)4010; CHECK-NEXT: ret4011 %a = load <16 x i8>, ptr %x4012 %d = sub <16 x i8> %a, splat (i8 -1)4013 store <16 x i8> %d, ptr %x4014 ret void4015}4016 4017define void @sub_vi_v8i16(ptr %x) {4018; CHECK-LABEL: sub_vi_v8i16:4019; CHECK: # %bb.0:4020; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4021; CHECK-NEXT: vle16.v v8, (a0)4022; CHECK-NEXT: vadd.vi v8, v8, 14023; CHECK-NEXT: vse16.v v8, (a0)4024; CHECK-NEXT: ret4025 %a = load <8 x i16>, ptr %x4026 %d = sub <8 x i16> %a, splat (i16 -1)4027 store <8 x i16> %d, ptr %x4028 ret void4029}4030 4031define void @sub_vi_v4i32(ptr %x) {4032; CHECK-LABEL: sub_vi_v4i32:4033; CHECK: # %bb.0:4034; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4035; CHECK-NEXT: vle32.v v8, (a0)4036; CHECK-NEXT: vadd.vi v8, v8, 14037; CHECK-NEXT: vse32.v v8, (a0)4038; CHECK-NEXT: ret4039 %a = load <4 x i32>, ptr %x4040 %d = sub <4 x i32> %a, splat (i32 -1)4041 store <4 x i32> %d, ptr %x4042 ret void4043}4044 4045define void @sub_vi_v2i64(ptr %x) {4046; CHECK-LABEL: sub_vi_v2i64:4047; CHECK: # %bb.0:4048; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma4049; CHECK-NEXT: vle64.v v8, (a0)4050; CHECK-NEXT: vadd.vi v8, v8, 14051; CHECK-NEXT: vse64.v v8, (a0)4052; CHECK-NEXT: ret4053 %a = load <2 x i64>, ptr %x4054 %d = sub <2 x i64> %a, splat (i64 -1)4055 store <2 x i64> %d, ptr %x4056 ret void4057}4058 4059define void @sub_iv_v16i8(ptr %x) {4060; CHECK-LABEL: sub_iv_v16i8:4061; CHECK: # %bb.0:4062; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4063; CHECK-NEXT: vle8.v v8, (a0)4064; CHECK-NEXT: vrsub.vi v8, v8, 14065; CHECK-NEXT: vse8.v v8, (a0)4066; CHECK-NEXT: ret4067 %a = load <16 x i8>, ptr %x4068 %d = sub <16 x i8> splat (i8 1), %a4069 store <16 x i8> %d, ptr %x4070 ret void4071}4072 4073define void @sub_iv_v8i16(ptr %x) {4074; CHECK-LABEL: sub_iv_v8i16:4075; CHECK: # %bb.0:4076; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4077; CHECK-NEXT: vle16.v v8, (a0)4078; CHECK-NEXT: vrsub.vi v8, v8, 14079; CHECK-NEXT: vse16.v v8, (a0)4080; CHECK-NEXT: ret4081 %a = load <8 x i16>, ptr %x4082 %d = sub <8 x i16> splat (i16 1), %a4083 store <8 x i16> %d, ptr %x4084 ret void4085}4086 4087define void @sub_iv_v4i32(ptr %x) {4088; CHECK-LABEL: sub_iv_v4i32:4089; CHECK: # %bb.0:4090; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4091; CHECK-NEXT: vle32.v v8, (a0)4092; CHECK-NEXT: vrsub.vi v8, v8, 14093; CHECK-NEXT: vse32.v v8, (a0)4094; CHECK-NEXT: ret4095 %a = load <4 x i32>, ptr %x4096 %d = sub <4 x i32> splat (i32 1), %a4097 store <4 x i32> %d, ptr %x4098 ret void4099}4100 4101define void @sub_iv_v2i64(ptr %x) {4102; CHECK-LABEL: sub_iv_v2i64:4103; CHECK: # %bb.0:4104; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma4105; CHECK-NEXT: vle64.v v8, (a0)4106; CHECK-NEXT: vrsub.vi v8, v8, 14107; CHECK-NEXT: vse64.v v8, (a0)4108; CHECK-NEXT: ret4109 %a = load <2 x i64>, ptr %x4110 %d = sub <2 x i64> splat (i64 1), %a4111 store <2 x i64> %d, ptr %x4112 ret void4113}4114 4115define void @sub_vx_v16i8(ptr %x, i8 %y) {4116; CHECK-LABEL: sub_vx_v16i8:4117; CHECK: # %bb.0:4118; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4119; CHECK-NEXT: vle8.v v8, (a0)4120; CHECK-NEXT: vsub.vx v8, v8, a14121; CHECK-NEXT: vse8.v v8, (a0)4122; CHECK-NEXT: ret4123 %a = load <16 x i8>, ptr %x4124 %b = insertelement <16 x i8> poison, i8 %y, i32 04125 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer4126 %d = sub <16 x i8> %a, %c4127 store <16 x i8> %d, ptr %x4128 ret void4129}4130 4131define void @sub_vx_v8i16(ptr %x, i16 %y) {4132; CHECK-LABEL: sub_vx_v8i16:4133; CHECK: # %bb.0:4134; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4135; CHECK-NEXT: vle16.v v8, (a0)4136; CHECK-NEXT: vsub.vx v8, v8, a14137; CHECK-NEXT: vse16.v v8, (a0)4138; CHECK-NEXT: ret4139 %a = load <8 x i16>, ptr %x4140 %b = insertelement <8 x i16> poison, i16 %y, i32 04141 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer4142 %d = sub <8 x i16> %a, %c4143 store <8 x i16> %d, ptr %x4144 ret void4145}4146 4147define void @sub_vx_v4i32(ptr %x, i32 %y) {4148; CHECK-LABEL: sub_vx_v4i32:4149; CHECK: # %bb.0:4150; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4151; CHECK-NEXT: vle32.v v8, (a0)4152; CHECK-NEXT: vsub.vx v8, v8, a14153; CHECK-NEXT: vse32.v v8, (a0)4154; CHECK-NEXT: ret4155 %a = load <4 x i32>, ptr %x4156 %b = insertelement <4 x i32> poison, i32 %y, i32 04157 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer4158 %d = sub <4 x i32> %a, %c4159 store <4 x i32> %d, ptr %x4160 ret void4161}4162 4163define void @sub_xv_v16i8(ptr %x, i8 %y) {4164; CHECK-LABEL: sub_xv_v16i8:4165; CHECK: # %bb.0:4166; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4167; CHECK-NEXT: vle8.v v8, (a0)4168; CHECK-NEXT: vrsub.vx v8, v8, a14169; CHECK-NEXT: vse8.v v8, (a0)4170; CHECK-NEXT: ret4171 %a = load <16 x i8>, ptr %x4172 %b = insertelement <16 x i8> poison, i8 %y, i32 04173 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer4174 %d = sub <16 x i8> %c, %a4175 store <16 x i8> %d, ptr %x4176 ret void4177}4178 4179define void @sub_xv_v8i16(ptr %x, i16 %y) {4180; CHECK-LABEL: sub_xv_v8i16:4181; CHECK: # %bb.0:4182; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4183; CHECK-NEXT: vle16.v v8, (a0)4184; CHECK-NEXT: vrsub.vx v8, v8, a14185; CHECK-NEXT: vse16.v v8, (a0)4186; CHECK-NEXT: ret4187 %a = load <8 x i16>, ptr %x4188 %b = insertelement <8 x i16> poison, i16 %y, i32 04189 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer4190 %d = sub <8 x i16> %c, %a4191 store <8 x i16> %d, ptr %x4192 ret void4193}4194 4195define void @sub_xv_v4i32(ptr %x, i32 %y) {4196; CHECK-LABEL: sub_xv_v4i32:4197; CHECK: # %bb.0:4198; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4199; CHECK-NEXT: vle32.v v8, (a0)4200; CHECK-NEXT: vrsub.vx v8, v8, a14201; CHECK-NEXT: vse32.v v8, (a0)4202; CHECK-NEXT: ret4203 %a = load <4 x i32>, ptr %x4204 %b = insertelement <4 x i32> poison, i32 %y, i32 04205 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer4206 %d = sub <4 x i32> %c, %a4207 store <4 x i32> %d, ptr %x4208 ret void4209}4210 4211define void @mul_vx_v16i8(ptr %x, i8 %y) {4212; CHECK-LABEL: mul_vx_v16i8:4213; CHECK: # %bb.0:4214; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4215; CHECK-NEXT: vle8.v v8, (a0)4216; CHECK-NEXT: vmul.vx v8, v8, a14217; CHECK-NEXT: vse8.v v8, (a0)4218; CHECK-NEXT: ret4219 %a = load <16 x i8>, ptr %x4220 %b = insertelement <16 x i8> poison, i8 %y, i32 04221 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer4222 %d = mul <16 x i8> %a, %c4223 store <16 x i8> %d, ptr %x4224 ret void4225}4226 4227define void @mul_vx_v8i16(ptr %x, i16 %y) {4228; CHECK-LABEL: mul_vx_v8i16:4229; CHECK: # %bb.0:4230; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4231; CHECK-NEXT: vle16.v v8, (a0)4232; CHECK-NEXT: vmul.vx v8, v8, a14233; CHECK-NEXT: vse16.v v8, (a0)4234; CHECK-NEXT: ret4235 %a = load <8 x i16>, ptr %x4236 %b = insertelement <8 x i16> poison, i16 %y, i32 04237 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer4238 %d = mul <8 x i16> %a, %c4239 store <8 x i16> %d, ptr %x4240 ret void4241}4242 4243define void @mul_vx_v4i32(ptr %x, i32 %y) {4244; CHECK-LABEL: mul_vx_v4i32:4245; CHECK: # %bb.0:4246; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4247; CHECK-NEXT: vle32.v v8, (a0)4248; CHECK-NEXT: vmul.vx v8, v8, a14249; CHECK-NEXT: vse32.v v8, (a0)4250; CHECK-NEXT: ret4251 %a = load <4 x i32>, ptr %x4252 %b = insertelement <4 x i32> poison, i32 %y, i32 04253 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer4254 %d = mul <4 x i32> %a, %c4255 store <4 x i32> %d, ptr %x4256 ret void4257}4258 4259define void @mul_xv_v16i8(ptr %x, i8 %y) {4260; CHECK-LABEL: mul_xv_v16i8:4261; CHECK: # %bb.0:4262; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4263; CHECK-NEXT: vle8.v v8, (a0)4264; CHECK-NEXT: vmul.vx v8, v8, a14265; CHECK-NEXT: vse8.v v8, (a0)4266; CHECK-NEXT: ret4267 %a = load <16 x i8>, ptr %x4268 %b = insertelement <16 x i8> poison, i8 %y, i32 04269 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer4270 %d = mul <16 x i8> %c, %a4271 store <16 x i8> %d, ptr %x4272 ret void4273}4274 4275define void @mul_xv_v8i16(ptr %x, i16 %y) {4276; CHECK-LABEL: mul_xv_v8i16:4277; CHECK: # %bb.0:4278; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4279; CHECK-NEXT: vle16.v v8, (a0)4280; CHECK-NEXT: vmul.vx v8, v8, a14281; CHECK-NEXT: vse16.v v8, (a0)4282; CHECK-NEXT: ret4283 %a = load <8 x i16>, ptr %x4284 %b = insertelement <8 x i16> poison, i16 %y, i32 04285 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer4286 %d = mul <8 x i16> %c, %a4287 store <8 x i16> %d, ptr %x4288 ret void4289}4290 4291define void @mul_xv_v4i32(ptr %x, i32 %y) {4292; CHECK-LABEL: mul_xv_v4i32:4293; CHECK: # %bb.0:4294; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4295; CHECK-NEXT: vle32.v v8, (a0)4296; CHECK-NEXT: vmul.vx v8, v8, a14297; CHECK-NEXT: vse32.v v8, (a0)4298; CHECK-NEXT: ret4299 %a = load <4 x i32>, ptr %x4300 %b = insertelement <4 x i32> poison, i32 %y, i32 04301 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer4302 %d = mul <4 x i32> %c, %a4303 store <4 x i32> %d, ptr %x4304 ret void4305}4306 4307define void @and_vi_v16i8(ptr %x) {4308; CHECK-LABEL: and_vi_v16i8:4309; CHECK: # %bb.0:4310; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4311; CHECK-NEXT: vle8.v v8, (a0)4312; CHECK-NEXT: vand.vi v8, v8, -24313; CHECK-NEXT: vse8.v v8, (a0)4314; CHECK-NEXT: ret4315 %a = load <16 x i8>, ptr %x4316 %d = and <16 x i8> %a, splat (i8 -2)4317 store <16 x i8> %d, ptr %x4318 ret void4319}4320 4321define void @and_vi_v8i16(ptr %x) {4322; CHECK-LABEL: and_vi_v8i16:4323; CHECK: # %bb.0:4324; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4325; CHECK-NEXT: vle16.v v8, (a0)4326; CHECK-NEXT: vand.vi v8, v8, -24327; CHECK-NEXT: vse16.v v8, (a0)4328; CHECK-NEXT: ret4329 %a = load <8 x i16>, ptr %x4330 %d = and <8 x i16> %a, splat (i16 -2)4331 store <8 x i16> %d, ptr %x4332 ret void4333}4334 4335define void @and_vi_v4i32(ptr %x) {4336; CHECK-LABEL: and_vi_v4i32:4337; CHECK: # %bb.0:4338; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4339; CHECK-NEXT: vle32.v v8, (a0)4340; CHECK-NEXT: vand.vi v8, v8, -24341; CHECK-NEXT: vse32.v v8, (a0)4342; CHECK-NEXT: ret4343 %a = load <4 x i32>, ptr %x4344 %d = and <4 x i32> %a, splat (i32 -2)4345 store <4 x i32> %d, ptr %x4346 ret void4347}4348 4349define void @and_vi_v2i64(ptr %x) {4350; CHECK-LABEL: and_vi_v2i64:4351; CHECK: # %bb.0:4352; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma4353; CHECK-NEXT: vle64.v v8, (a0)4354; CHECK-NEXT: vand.vi v8, v8, -24355; CHECK-NEXT: vse64.v v8, (a0)4356; CHECK-NEXT: ret4357 %a = load <2 x i64>, ptr %x4358 %d = and <2 x i64> %a, splat (i64 -2)4359 store <2 x i64> %d, ptr %x4360 ret void4361}4362 4363define void @and_iv_v16i8(ptr %x) {4364; CHECK-LABEL: and_iv_v16i8:4365; CHECK: # %bb.0:4366; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4367; CHECK-NEXT: vle8.v v8, (a0)4368; CHECK-NEXT: vand.vi v8, v8, 14369; CHECK-NEXT: vse8.v v8, (a0)4370; CHECK-NEXT: ret4371 %a = load <16 x i8>, ptr %x4372 %d = and <16 x i8> splat (i8 1), %a4373 store <16 x i8> %d, ptr %x4374 ret void4375}4376 4377define void @and_iv_v8i16(ptr %x) {4378; CHECK-LABEL: and_iv_v8i16:4379; CHECK: # %bb.0:4380; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4381; CHECK-NEXT: vle16.v v8, (a0)4382; CHECK-NEXT: vand.vi v8, v8, 14383; CHECK-NEXT: vse16.v v8, (a0)4384; CHECK-NEXT: ret4385 %a = load <8 x i16>, ptr %x4386 %d = and <8 x i16> splat (i16 1), %a4387 store <8 x i16> %d, ptr %x4388 ret void4389}4390 4391define void @and_iv_v4i32(ptr %x) {4392; CHECK-LABEL: and_iv_v4i32:4393; CHECK: # %bb.0:4394; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4395; CHECK-NEXT: vle32.v v8, (a0)4396; CHECK-NEXT: vand.vi v8, v8, 14397; CHECK-NEXT: vse32.v v8, (a0)4398; CHECK-NEXT: ret4399 %a = load <4 x i32>, ptr %x4400 %d = and <4 x i32> splat (i32 1), %a4401 store <4 x i32> %d, ptr %x4402 ret void4403}4404 4405define void @and_iv_v2i64(ptr %x) {4406; CHECK-LABEL: and_iv_v2i64:4407; CHECK: # %bb.0:4408; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma4409; CHECK-NEXT: vle64.v v8, (a0)4410; CHECK-NEXT: vand.vi v8, v8, 14411; CHECK-NEXT: vse64.v v8, (a0)4412; CHECK-NEXT: ret4413 %a = load <2 x i64>, ptr %x4414 %d = and <2 x i64> splat (i64 1), %a4415 store <2 x i64> %d, ptr %x4416 ret void4417}4418 4419define void @and_vx_v16i8(ptr %x, i8 %y) {4420; CHECK-LABEL: and_vx_v16i8:4421; CHECK: # %bb.0:4422; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4423; CHECK-NEXT: vle8.v v8, (a0)4424; CHECK-NEXT: vand.vx v8, v8, a14425; CHECK-NEXT: vse8.v v8, (a0)4426; CHECK-NEXT: ret4427 %a = load <16 x i8>, ptr %x4428 %b = insertelement <16 x i8> poison, i8 %y, i32 04429 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer4430 %d = and <16 x i8> %a, %c4431 store <16 x i8> %d, ptr %x4432 ret void4433}4434 4435define void @and_vx_v8i16(ptr %x, i16 %y) {4436; CHECK-LABEL: and_vx_v8i16:4437; CHECK: # %bb.0:4438; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4439; CHECK-NEXT: vle16.v v8, (a0)4440; CHECK-NEXT: vand.vx v8, v8, a14441; CHECK-NEXT: vse16.v v8, (a0)4442; CHECK-NEXT: ret4443 %a = load <8 x i16>, ptr %x4444 %b = insertelement <8 x i16> poison, i16 %y, i32 04445 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer4446 %d = and <8 x i16> %a, %c4447 store <8 x i16> %d, ptr %x4448 ret void4449}4450 4451define void @and_vx_v4i32(ptr %x, i32 %y) {4452; CHECK-LABEL: and_vx_v4i32:4453; CHECK: # %bb.0:4454; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4455; CHECK-NEXT: vle32.v v8, (a0)4456; CHECK-NEXT: vand.vx v8, v8, a14457; CHECK-NEXT: vse32.v v8, (a0)4458; CHECK-NEXT: ret4459 %a = load <4 x i32>, ptr %x4460 %b = insertelement <4 x i32> poison, i32 %y, i32 04461 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer4462 %d = and <4 x i32> %a, %c4463 store <4 x i32> %d, ptr %x4464 ret void4465}4466 4467define void @and_xv_v16i8(ptr %x, i8 %y) {4468; CHECK-LABEL: and_xv_v16i8:4469; CHECK: # %bb.0:4470; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4471; CHECK-NEXT: vle8.v v8, (a0)4472; CHECK-NEXT: vand.vx v8, v8, a14473; CHECK-NEXT: vse8.v v8, (a0)4474; CHECK-NEXT: ret4475 %a = load <16 x i8>, ptr %x4476 %b = insertelement <16 x i8> poison, i8 %y, i32 04477 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer4478 %d = and <16 x i8> %c, %a4479 store <16 x i8> %d, ptr %x4480 ret void4481}4482 4483define void @and_xv_v8i16(ptr %x, i16 %y) {4484; CHECK-LABEL: and_xv_v8i16:4485; CHECK: # %bb.0:4486; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4487; CHECK-NEXT: vle16.v v8, (a0)4488; CHECK-NEXT: vand.vx v8, v8, a14489; CHECK-NEXT: vse16.v v8, (a0)4490; CHECK-NEXT: ret4491 %a = load <8 x i16>, ptr %x4492 %b = insertelement <8 x i16> poison, i16 %y, i32 04493 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer4494 %d = and <8 x i16> %c, %a4495 store <8 x i16> %d, ptr %x4496 ret void4497}4498 4499define void @and_xv_v4i32(ptr %x, i32 %y) {4500; CHECK-LABEL: and_xv_v4i32:4501; CHECK: # %bb.0:4502; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4503; CHECK-NEXT: vle32.v v8, (a0)4504; CHECK-NEXT: vand.vx v8, v8, a14505; CHECK-NEXT: vse32.v v8, (a0)4506; CHECK-NEXT: ret4507 %a = load <4 x i32>, ptr %x4508 %b = insertelement <4 x i32> poison, i32 %y, i32 04509 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer4510 %d = and <4 x i32> %c, %a4511 store <4 x i32> %d, ptr %x4512 ret void4513}4514 4515define void @or_vi_v16i8(ptr %x) {4516; CHECK-LABEL: or_vi_v16i8:4517; CHECK: # %bb.0:4518; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4519; CHECK-NEXT: vle8.v v8, (a0)4520; CHECK-NEXT: vor.vi v8, v8, -24521; CHECK-NEXT: vse8.v v8, (a0)4522; CHECK-NEXT: ret4523 %a = load <16 x i8>, ptr %x4524 %d = or <16 x i8> %a, splat (i8 -2)4525 store <16 x i8> %d, ptr %x4526 ret void4527}4528 4529define void @or_vi_v8i16(ptr %x) {4530; CHECK-LABEL: or_vi_v8i16:4531; CHECK: # %bb.0:4532; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4533; CHECK-NEXT: vle16.v v8, (a0)4534; CHECK-NEXT: vor.vi v8, v8, -24535; CHECK-NEXT: vse16.v v8, (a0)4536; CHECK-NEXT: ret4537 %a = load <8 x i16>, ptr %x4538 %d = or <8 x i16> %a, splat (i16 -2)4539 store <8 x i16> %d, ptr %x4540 ret void4541}4542 4543define void @or_vi_v4i32(ptr %x) {4544; CHECK-LABEL: or_vi_v4i32:4545; CHECK: # %bb.0:4546; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4547; CHECK-NEXT: vle32.v v8, (a0)4548; CHECK-NEXT: vor.vi v8, v8, -24549; CHECK-NEXT: vse32.v v8, (a0)4550; CHECK-NEXT: ret4551 %a = load <4 x i32>, ptr %x4552 %d = or <4 x i32> %a, splat (i32 -2)4553 store <4 x i32> %d, ptr %x4554 ret void4555}4556 4557define void @or_vi_v2i64(ptr %x) {4558; CHECK-LABEL: or_vi_v2i64:4559; CHECK: # %bb.0:4560; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma4561; CHECK-NEXT: vle64.v v8, (a0)4562; CHECK-NEXT: vor.vi v8, v8, -24563; CHECK-NEXT: vse64.v v8, (a0)4564; CHECK-NEXT: ret4565 %a = load <2 x i64>, ptr %x4566 %d = or <2 x i64> %a, splat (i64 -2)4567 store <2 x i64> %d, ptr %x4568 ret void4569}4570 4571define void @or_iv_v16i8(ptr %x) {4572; CHECK-LABEL: or_iv_v16i8:4573; CHECK: # %bb.0:4574; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4575; CHECK-NEXT: vle8.v v8, (a0)4576; CHECK-NEXT: vor.vi v8, v8, 14577; CHECK-NEXT: vse8.v v8, (a0)4578; CHECK-NEXT: ret4579 %a = load <16 x i8>, ptr %x4580 %d = or <16 x i8> splat (i8 1), %a4581 store <16 x i8> %d, ptr %x4582 ret void4583}4584 4585define void @or_iv_v8i16(ptr %x) {4586; CHECK-LABEL: or_iv_v8i16:4587; CHECK: # %bb.0:4588; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4589; CHECK-NEXT: vle16.v v8, (a0)4590; CHECK-NEXT: vor.vi v8, v8, 14591; CHECK-NEXT: vse16.v v8, (a0)4592; CHECK-NEXT: ret4593 %a = load <8 x i16>, ptr %x4594 %d = or <8 x i16> splat (i16 1), %a4595 store <8 x i16> %d, ptr %x4596 ret void4597}4598 4599define void @or_iv_v4i32(ptr %x) {4600; CHECK-LABEL: or_iv_v4i32:4601; CHECK: # %bb.0:4602; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4603; CHECK-NEXT: vle32.v v8, (a0)4604; CHECK-NEXT: vor.vi v8, v8, 14605; CHECK-NEXT: vse32.v v8, (a0)4606; CHECK-NEXT: ret4607 %a = load <4 x i32>, ptr %x4608 %d = or <4 x i32> splat (i32 1), %a4609 store <4 x i32> %d, ptr %x4610 ret void4611}4612 4613define void @or_iv_v2i64(ptr %x) {4614; CHECK-LABEL: or_iv_v2i64:4615; CHECK: # %bb.0:4616; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma4617; CHECK-NEXT: vle64.v v8, (a0)4618; CHECK-NEXT: vor.vi v8, v8, 14619; CHECK-NEXT: vse64.v v8, (a0)4620; CHECK-NEXT: ret4621 %a = load <2 x i64>, ptr %x4622 %d = or <2 x i64> splat (i64 1), %a4623 store <2 x i64> %d, ptr %x4624 ret void4625}4626 4627define void @or_vx_v16i8(ptr %x, i8 %y) {4628; CHECK-LABEL: or_vx_v16i8:4629; CHECK: # %bb.0:4630; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4631; CHECK-NEXT: vle8.v v8, (a0)4632; CHECK-NEXT: vor.vx v8, v8, a14633; CHECK-NEXT: vse8.v v8, (a0)4634; CHECK-NEXT: ret4635 %a = load <16 x i8>, ptr %x4636 %b = insertelement <16 x i8> poison, i8 %y, i32 04637 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer4638 %d = or <16 x i8> %a, %c4639 store <16 x i8> %d, ptr %x4640 ret void4641}4642 4643define void @or_vx_v8i16(ptr %x, i16 %y) {4644; CHECK-LABEL: or_vx_v8i16:4645; CHECK: # %bb.0:4646; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4647; CHECK-NEXT: vle16.v v8, (a0)4648; CHECK-NEXT: vor.vx v8, v8, a14649; CHECK-NEXT: vse16.v v8, (a0)4650; CHECK-NEXT: ret4651 %a = load <8 x i16>, ptr %x4652 %b = insertelement <8 x i16> poison, i16 %y, i32 04653 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer4654 %d = or <8 x i16> %a, %c4655 store <8 x i16> %d, ptr %x4656 ret void4657}4658 4659define void @or_vx_v4i32(ptr %x, i32 %y) {4660; CHECK-LABEL: or_vx_v4i32:4661; CHECK: # %bb.0:4662; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4663; CHECK-NEXT: vle32.v v8, (a0)4664; CHECK-NEXT: vor.vx v8, v8, a14665; CHECK-NEXT: vse32.v v8, (a0)4666; CHECK-NEXT: ret4667 %a = load <4 x i32>, ptr %x4668 %b = insertelement <4 x i32> poison, i32 %y, i32 04669 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer4670 %d = or <4 x i32> %a, %c4671 store <4 x i32> %d, ptr %x4672 ret void4673}4674 4675define void @or_xv_v16i8(ptr %x, i8 %y) {4676; CHECK-LABEL: or_xv_v16i8:4677; CHECK: # %bb.0:4678; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4679; CHECK-NEXT: vle8.v v8, (a0)4680; CHECK-NEXT: vor.vx v8, v8, a14681; CHECK-NEXT: vse8.v v8, (a0)4682; CHECK-NEXT: ret4683 %a = load <16 x i8>, ptr %x4684 %b = insertelement <16 x i8> poison, i8 %y, i32 04685 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer4686 %d = or <16 x i8> %c, %a4687 store <16 x i8> %d, ptr %x4688 ret void4689}4690 4691define void @or_xv_v8i16(ptr %x, i16 %y) {4692; CHECK-LABEL: or_xv_v8i16:4693; CHECK: # %bb.0:4694; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4695; CHECK-NEXT: vle16.v v8, (a0)4696; CHECK-NEXT: vor.vx v8, v8, a14697; CHECK-NEXT: vse16.v v8, (a0)4698; CHECK-NEXT: ret4699 %a = load <8 x i16>, ptr %x4700 %b = insertelement <8 x i16> poison, i16 %y, i32 04701 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer4702 %d = or <8 x i16> %c, %a4703 store <8 x i16> %d, ptr %x4704 ret void4705}4706 4707define void @or_xv_v4i32(ptr %x, i32 %y) {4708; CHECK-LABEL: or_xv_v4i32:4709; CHECK: # %bb.0:4710; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4711; CHECK-NEXT: vle32.v v8, (a0)4712; CHECK-NEXT: vor.vx v8, v8, a14713; CHECK-NEXT: vse32.v v8, (a0)4714; CHECK-NEXT: ret4715 %a = load <4 x i32>, ptr %x4716 %b = insertelement <4 x i32> poison, i32 %y, i32 04717 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer4718 %d = or <4 x i32> %c, %a4719 store <4 x i32> %d, ptr %x4720 ret void4721}4722 4723define void @xor_vi_v16i8(ptr %x) {4724; CHECK-LABEL: xor_vi_v16i8:4725; CHECK: # %bb.0:4726; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4727; CHECK-NEXT: vle8.v v8, (a0)4728; CHECK-NEXT: vnot.v v8, v84729; CHECK-NEXT: vse8.v v8, (a0)4730; CHECK-NEXT: ret4731 %a = load <16 x i8>, ptr %x4732 %d = xor <16 x i8> %a, splat (i8 -1)4733 store <16 x i8> %d, ptr %x4734 ret void4735}4736 4737define void @xor_vi_v8i16(ptr %x) {4738; CHECK-LABEL: xor_vi_v8i16:4739; CHECK: # %bb.0:4740; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4741; CHECK-NEXT: vle16.v v8, (a0)4742; CHECK-NEXT: vnot.v v8, v84743; CHECK-NEXT: vse16.v v8, (a0)4744; CHECK-NEXT: ret4745 %a = load <8 x i16>, ptr %x4746 %d = xor <8 x i16> %a, splat (i16 -1)4747 store <8 x i16> %d, ptr %x4748 ret void4749}4750 4751define void @xor_vi_v4i32(ptr %x) {4752; CHECK-LABEL: xor_vi_v4i32:4753; CHECK: # %bb.0:4754; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4755; CHECK-NEXT: vle32.v v8, (a0)4756; CHECK-NEXT: vnot.v v8, v84757; CHECK-NEXT: vse32.v v8, (a0)4758; CHECK-NEXT: ret4759 %a = load <4 x i32>, ptr %x4760 %d = xor <4 x i32> %a, splat (i32 -1)4761 store <4 x i32> %d, ptr %x4762 ret void4763}4764 4765define void @xor_vi_v2i64(ptr %x) {4766; CHECK-LABEL: xor_vi_v2i64:4767; CHECK: # %bb.0:4768; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma4769; CHECK-NEXT: vle64.v v8, (a0)4770; CHECK-NEXT: vnot.v v8, v84771; CHECK-NEXT: vse64.v v8, (a0)4772; CHECK-NEXT: ret4773 %a = load <2 x i64>, ptr %x4774 %d = xor <2 x i64> %a, splat (i64 -1)4775 store <2 x i64> %d, ptr %x4776 ret void4777}4778 4779define void @xor_iv_v16i8(ptr %x) {4780; CHECK-LABEL: xor_iv_v16i8:4781; CHECK: # %bb.0:4782; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4783; CHECK-NEXT: vle8.v v8, (a0)4784; CHECK-NEXT: vxor.vi v8, v8, 14785; CHECK-NEXT: vse8.v v8, (a0)4786; CHECK-NEXT: ret4787 %a = load <16 x i8>, ptr %x4788 %d = xor <16 x i8> splat (i8 1), %a4789 store <16 x i8> %d, ptr %x4790 ret void4791}4792 4793define void @xor_iv_v8i16(ptr %x) {4794; CHECK-LABEL: xor_iv_v8i16:4795; CHECK: # %bb.0:4796; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4797; CHECK-NEXT: vle16.v v8, (a0)4798; CHECK-NEXT: vxor.vi v8, v8, 14799; CHECK-NEXT: vse16.v v8, (a0)4800; CHECK-NEXT: ret4801 %a = load <8 x i16>, ptr %x4802 %d = xor <8 x i16> splat (i16 1), %a4803 store <8 x i16> %d, ptr %x4804 ret void4805}4806 4807define void @xor_iv_v4i32(ptr %x) {4808; CHECK-LABEL: xor_iv_v4i32:4809; CHECK: # %bb.0:4810; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4811; CHECK-NEXT: vle32.v v8, (a0)4812; CHECK-NEXT: vxor.vi v8, v8, 14813; CHECK-NEXT: vse32.v v8, (a0)4814; CHECK-NEXT: ret4815 %a = load <4 x i32>, ptr %x4816 %d = xor <4 x i32> splat (i32 1), %a4817 store <4 x i32> %d, ptr %x4818 ret void4819}4820 4821define void @xor_iv_v2i64(ptr %x) {4822; CHECK-LABEL: xor_iv_v2i64:4823; CHECK: # %bb.0:4824; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma4825; CHECK-NEXT: vle64.v v8, (a0)4826; CHECK-NEXT: vxor.vi v8, v8, 14827; CHECK-NEXT: vse64.v v8, (a0)4828; CHECK-NEXT: ret4829 %a = load <2 x i64>, ptr %x4830 %d = xor <2 x i64> splat (i64 1), %a4831 store <2 x i64> %d, ptr %x4832 ret void4833}4834 4835define void @xor_vx_v16i8(ptr %x, i8 %y) {4836; CHECK-LABEL: xor_vx_v16i8:4837; CHECK: # %bb.0:4838; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4839; CHECK-NEXT: vle8.v v8, (a0)4840; CHECK-NEXT: vxor.vx v8, v8, a14841; CHECK-NEXT: vse8.v v8, (a0)4842; CHECK-NEXT: ret4843 %a = load <16 x i8>, ptr %x4844 %b = insertelement <16 x i8> poison, i8 %y, i32 04845 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer4846 %d = xor <16 x i8> %a, %c4847 store <16 x i8> %d, ptr %x4848 ret void4849}4850 4851define void @xor_vx_v8i16(ptr %x, i16 %y) {4852; CHECK-LABEL: xor_vx_v8i16:4853; CHECK: # %bb.0:4854; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4855; CHECK-NEXT: vle16.v v8, (a0)4856; CHECK-NEXT: vxor.vx v8, v8, a14857; CHECK-NEXT: vse16.v v8, (a0)4858; CHECK-NEXT: ret4859 %a = load <8 x i16>, ptr %x4860 %b = insertelement <8 x i16> poison, i16 %y, i32 04861 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer4862 %d = xor <8 x i16> %a, %c4863 store <8 x i16> %d, ptr %x4864 ret void4865}4866 4867define void @xor_vx_v4i32(ptr %x, i32 %y) {4868; CHECK-LABEL: xor_vx_v4i32:4869; CHECK: # %bb.0:4870; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4871; CHECK-NEXT: vle32.v v8, (a0)4872; CHECK-NEXT: vxor.vx v8, v8, a14873; CHECK-NEXT: vse32.v v8, (a0)4874; CHECK-NEXT: ret4875 %a = load <4 x i32>, ptr %x4876 %b = insertelement <4 x i32> poison, i32 %y, i32 04877 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer4878 %d = xor <4 x i32> %a, %c4879 store <4 x i32> %d, ptr %x4880 ret void4881}4882 4883define void @xor_xv_v16i8(ptr %x, i8 %y) {4884; CHECK-LABEL: xor_xv_v16i8:4885; CHECK: # %bb.0:4886; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4887; CHECK-NEXT: vle8.v v8, (a0)4888; CHECK-NEXT: vxor.vx v8, v8, a14889; CHECK-NEXT: vse8.v v8, (a0)4890; CHECK-NEXT: ret4891 %a = load <16 x i8>, ptr %x4892 %b = insertelement <16 x i8> poison, i8 %y, i32 04893 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer4894 %d = xor <16 x i8> %c, %a4895 store <16 x i8> %d, ptr %x4896 ret void4897}4898 4899define void @xor_xv_v8i16(ptr %x, i16 %y) {4900; CHECK-LABEL: xor_xv_v8i16:4901; CHECK: # %bb.0:4902; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4903; CHECK-NEXT: vle16.v v8, (a0)4904; CHECK-NEXT: vxor.vx v8, v8, a14905; CHECK-NEXT: vse16.v v8, (a0)4906; CHECK-NEXT: ret4907 %a = load <8 x i16>, ptr %x4908 %b = insertelement <8 x i16> poison, i16 %y, i32 04909 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer4910 %d = xor <8 x i16> %c, %a4911 store <8 x i16> %d, ptr %x4912 ret void4913}4914 4915define void @xor_xv_v4i32(ptr %x, i32 %y) {4916; CHECK-LABEL: xor_xv_v4i32:4917; CHECK: # %bb.0:4918; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4919; CHECK-NEXT: vle32.v v8, (a0)4920; CHECK-NEXT: vxor.vx v8, v8, a14921; CHECK-NEXT: vse32.v v8, (a0)4922; CHECK-NEXT: ret4923 %a = load <4 x i32>, ptr %x4924 %b = insertelement <4 x i32> poison, i32 %y, i32 04925 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer4926 %d = xor <4 x i32> %c, %a4927 store <4 x i32> %d, ptr %x4928 ret void4929}4930 4931define void @lshr_vi_v16i8(ptr %x) {4932; CHECK-LABEL: lshr_vi_v16i8:4933; CHECK: # %bb.0:4934; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4935; CHECK-NEXT: vle8.v v8, (a0)4936; CHECK-NEXT: vsrl.vi v8, v8, 74937; CHECK-NEXT: vse8.v v8, (a0)4938; CHECK-NEXT: ret4939 %a = load <16 x i8>, ptr %x4940 %d = lshr <16 x i8> %a, splat (i8 7)4941 store <16 x i8> %d, ptr %x4942 ret void4943}4944 4945define void @lshr_vi_v8i16(ptr %x) {4946; CHECK-LABEL: lshr_vi_v8i16:4947; CHECK: # %bb.0:4948; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma4949; CHECK-NEXT: vle16.v v8, (a0)4950; CHECK-NEXT: vsrl.vi v8, v8, 154951; CHECK-NEXT: vse16.v v8, (a0)4952; CHECK-NEXT: ret4953 %a = load <8 x i16>, ptr %x4954 %d = lshr <8 x i16> %a, splat (i16 15)4955 store <8 x i16> %d, ptr %x4956 ret void4957}4958 4959define void @lshr_vi_v4i32(ptr %x) {4960; CHECK-LABEL: lshr_vi_v4i32:4961; CHECK: # %bb.0:4962; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma4963; CHECK-NEXT: vle32.v v8, (a0)4964; CHECK-NEXT: vsrl.vi v8, v8, 314965; CHECK-NEXT: vse32.v v8, (a0)4966; CHECK-NEXT: ret4967 %a = load <4 x i32>, ptr %x4968 %d = lshr <4 x i32> %a, splat (i32 31)4969 store <4 x i32> %d, ptr %x4970 ret void4971}4972 4973define void @lshr_vi_v2i64(ptr %x) {4974; CHECK-LABEL: lshr_vi_v2i64:4975; CHECK: # %bb.0:4976; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma4977; CHECK-NEXT: vle64.v v8, (a0)4978; CHECK-NEXT: vsrl.vi v8, v8, 314979; CHECK-NEXT: vse64.v v8, (a0)4980; CHECK-NEXT: ret4981 %a = load <2 x i64>, ptr %x4982 %d = lshr <2 x i64> %a, splat (i64 31)4983 store <2 x i64> %d, ptr %x4984 ret void4985}4986 4987define void @lshr_vx_v16i8(ptr %x, i8 %y) {4988; CHECK-LABEL: lshr_vx_v16i8:4989; CHECK: # %bb.0:4990; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma4991; CHECK-NEXT: vle8.v v8, (a0)4992; CHECK-NEXT: vsrl.vx v8, v8, a14993; CHECK-NEXT: vse8.v v8, (a0)4994; CHECK-NEXT: ret4995 %a = load <16 x i8>, ptr %x4996 %b = insertelement <16 x i8> poison, i8 %y, i32 04997 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer4998 %d = lshr <16 x i8> %a, %c4999 store <16 x i8> %d, ptr %x5000 ret void5001}5002 5003define void @lshr_vx_v8i16(ptr %x, i16 %y) {5004; CHECK-LABEL: lshr_vx_v8i16:5005; CHECK: # %bb.0:5006; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5007; CHECK-NEXT: vle16.v v8, (a0)5008; CHECK-NEXT: vsrl.vx v8, v8, a15009; CHECK-NEXT: vse16.v v8, (a0)5010; CHECK-NEXT: ret5011 %a = load <8 x i16>, ptr %x5012 %b = insertelement <8 x i16> poison, i16 %y, i32 05013 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer5014 %d = lshr <8 x i16> %a, %c5015 store <8 x i16> %d, ptr %x5016 ret void5017}5018 5019define void @lshr_vx_v4i32(ptr %x, i32 %y) {5020; CHECK-LABEL: lshr_vx_v4i32:5021; CHECK: # %bb.0:5022; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5023; CHECK-NEXT: vle32.v v8, (a0)5024; CHECK-NEXT: vsrl.vx v8, v8, a15025; CHECK-NEXT: vse32.v v8, (a0)5026; CHECK-NEXT: ret5027 %a = load <4 x i32>, ptr %x5028 %b = insertelement <4 x i32> poison, i32 %y, i32 05029 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer5030 %d = lshr <4 x i32> %a, %c5031 store <4 x i32> %d, ptr %x5032 ret void5033}5034 5035define void @ashr_vi_v16i8(ptr %x) {5036; CHECK-LABEL: ashr_vi_v16i8:5037; CHECK: # %bb.0:5038; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma5039; CHECK-NEXT: vle8.v v8, (a0)5040; CHECK-NEXT: vsra.vi v8, v8, 75041; CHECK-NEXT: vse8.v v8, (a0)5042; CHECK-NEXT: ret5043 %a = load <16 x i8>, ptr %x5044 %d = ashr <16 x i8> %a, splat (i8 7)5045 store <16 x i8> %d, ptr %x5046 ret void5047}5048 5049define void @ashr_vi_v8i16(ptr %x) {5050; CHECK-LABEL: ashr_vi_v8i16:5051; CHECK: # %bb.0:5052; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5053; CHECK-NEXT: vle16.v v8, (a0)5054; CHECK-NEXT: vsra.vi v8, v8, 155055; CHECK-NEXT: vse16.v v8, (a0)5056; CHECK-NEXT: ret5057 %a = load <8 x i16>, ptr %x5058 %d = ashr <8 x i16> %a, splat (i16 15)5059 store <8 x i16> %d, ptr %x5060 ret void5061}5062 5063define void @ashr_vi_v4i32(ptr %x) {5064; CHECK-LABEL: ashr_vi_v4i32:5065; CHECK: # %bb.0:5066; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5067; CHECK-NEXT: vle32.v v8, (a0)5068; CHECK-NEXT: vsra.vi v8, v8, 315069; CHECK-NEXT: vse32.v v8, (a0)5070; CHECK-NEXT: ret5071 %a = load <4 x i32>, ptr %x5072 %d = ashr <4 x i32> %a, splat (i32 31)5073 store <4 x i32> %d, ptr %x5074 ret void5075}5076 5077define void @ashr_vi_v2i64(ptr %x) {5078; CHECK-LABEL: ashr_vi_v2i64:5079; CHECK: # %bb.0:5080; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma5081; CHECK-NEXT: vle64.v v8, (a0)5082; CHECK-NEXT: vsra.vi v8, v8, 315083; CHECK-NEXT: vse64.v v8, (a0)5084; CHECK-NEXT: ret5085 %a = load <2 x i64>, ptr %x5086 %d = ashr <2 x i64> %a, splat (i64 31)5087 store <2 x i64> %d, ptr %x5088 ret void5089}5090 5091define void @ashr_vx_v16i8(ptr %x, i8 %y) {5092; CHECK-LABEL: ashr_vx_v16i8:5093; CHECK: # %bb.0:5094; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma5095; CHECK-NEXT: vle8.v v8, (a0)5096; CHECK-NEXT: vsra.vx v8, v8, a15097; CHECK-NEXT: vse8.v v8, (a0)5098; CHECK-NEXT: ret5099 %a = load <16 x i8>, ptr %x5100 %b = insertelement <16 x i8> poison, i8 %y, i32 05101 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer5102 %d = ashr <16 x i8> %a, %c5103 store <16 x i8> %d, ptr %x5104 ret void5105}5106 5107define void @ashr_vx_v8i16(ptr %x, i16 %y) {5108; CHECK-LABEL: ashr_vx_v8i16:5109; CHECK: # %bb.0:5110; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5111; CHECK-NEXT: vle16.v v8, (a0)5112; CHECK-NEXT: vsra.vx v8, v8, a15113; CHECK-NEXT: vse16.v v8, (a0)5114; CHECK-NEXT: ret5115 %a = load <8 x i16>, ptr %x5116 %b = insertelement <8 x i16> poison, i16 %y, i32 05117 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer5118 %d = ashr <8 x i16> %a, %c5119 store <8 x i16> %d, ptr %x5120 ret void5121}5122 5123define void @ashr_vx_v4i32(ptr %x, i32 %y) {5124; CHECK-LABEL: ashr_vx_v4i32:5125; CHECK: # %bb.0:5126; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5127; CHECK-NEXT: vle32.v v8, (a0)5128; CHECK-NEXT: vsra.vx v8, v8, a15129; CHECK-NEXT: vse32.v v8, (a0)5130; CHECK-NEXT: ret5131 %a = load <4 x i32>, ptr %x5132 %b = insertelement <4 x i32> poison, i32 %y, i32 05133 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer5134 %d = ashr <4 x i32> %a, %c5135 store <4 x i32> %d, ptr %x5136 ret void5137}5138 5139define void @shl_vi_v16i8(ptr %x) {5140; CHECK-LABEL: shl_vi_v16i8:5141; CHECK: # %bb.0:5142; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma5143; CHECK-NEXT: vle8.v v8, (a0)5144; CHECK-NEXT: vsll.vi v8, v8, 75145; CHECK-NEXT: vse8.v v8, (a0)5146; CHECK-NEXT: ret5147 %a = load <16 x i8>, ptr %x5148 %d = shl <16 x i8> %a, splat (i8 7)5149 store <16 x i8> %d, ptr %x5150 ret void5151}5152 5153define void @shl_vi_v8i16(ptr %x) {5154; CHECK-LABEL: shl_vi_v8i16:5155; CHECK: # %bb.0:5156; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5157; CHECK-NEXT: vle16.v v8, (a0)5158; CHECK-NEXT: vsll.vi v8, v8, 155159; CHECK-NEXT: vse16.v v8, (a0)5160; CHECK-NEXT: ret5161 %a = load <8 x i16>, ptr %x5162 %d = shl <8 x i16> %a, splat (i16 15)5163 store <8 x i16> %d, ptr %x5164 ret void5165}5166 5167define void @shl_vi_v4i32(ptr %x) {5168; CHECK-LABEL: shl_vi_v4i32:5169; CHECK: # %bb.0:5170; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5171; CHECK-NEXT: vle32.v v8, (a0)5172; CHECK-NEXT: vsll.vi v8, v8, 315173; CHECK-NEXT: vse32.v v8, (a0)5174; CHECK-NEXT: ret5175 %a = load <4 x i32>, ptr %x5176 %d = shl <4 x i32> %a, splat (i32 31)5177 store <4 x i32> %d, ptr %x5178 ret void5179}5180 5181define void @shl_vi_v2i64(ptr %x) {5182; CHECK-LABEL: shl_vi_v2i64:5183; CHECK: # %bb.0:5184; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma5185; CHECK-NEXT: vle64.v v8, (a0)5186; CHECK-NEXT: vsll.vi v8, v8, 315187; CHECK-NEXT: vse64.v v8, (a0)5188; CHECK-NEXT: ret5189 %a = load <2 x i64>, ptr %x5190 %d = shl <2 x i64> %a, splat (i64 31)5191 store <2 x i64> %d, ptr %x5192 ret void5193}5194 5195define void @shl_vx_v16i8(ptr %x, i8 %y) {5196; CHECK-LABEL: shl_vx_v16i8:5197; CHECK: # %bb.0:5198; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma5199; CHECK-NEXT: vle8.v v8, (a0)5200; CHECK-NEXT: vsll.vx v8, v8, a15201; CHECK-NEXT: vse8.v v8, (a0)5202; CHECK-NEXT: ret5203 %a = load <16 x i8>, ptr %x5204 %b = insertelement <16 x i8> poison, i8 %y, i32 05205 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer5206 %d = shl <16 x i8> %a, %c5207 store <16 x i8> %d, ptr %x5208 ret void5209}5210 5211define void @shl_vx_v8i16(ptr %x, i16 %y) {5212; CHECK-LABEL: shl_vx_v8i16:5213; CHECK: # %bb.0:5214; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5215; CHECK-NEXT: vle16.v v8, (a0)5216; CHECK-NEXT: vsll.vx v8, v8, a15217; CHECK-NEXT: vse16.v v8, (a0)5218; CHECK-NEXT: ret5219 %a = load <8 x i16>, ptr %x5220 %b = insertelement <8 x i16> poison, i16 %y, i32 05221 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer5222 %d = shl <8 x i16> %a, %c5223 store <8 x i16> %d, ptr %x5224 ret void5225}5226 5227define void @shl_vx_v4i32(ptr %x, i32 %y) {5228; CHECK-LABEL: shl_vx_v4i32:5229; CHECK: # %bb.0:5230; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5231; CHECK-NEXT: vle32.v v8, (a0)5232; CHECK-NEXT: vsll.vx v8, v8, a15233; CHECK-NEXT: vse32.v v8, (a0)5234; CHECK-NEXT: ret5235 %a = load <4 x i32>, ptr %x5236 %b = insertelement <4 x i32> poison, i32 %y, i32 05237 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer5238 %d = shl <4 x i32> %a, %c5239 store <4 x i32> %d, ptr %x5240 ret void5241}5242 5243define void @sdiv_vx_v16i8(ptr %x, i8 %y) {5244; CHECK-LABEL: sdiv_vx_v16i8:5245; CHECK: # %bb.0:5246; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma5247; CHECK-NEXT: vle8.v v8, (a0)5248; CHECK-NEXT: vdiv.vx v8, v8, a15249; CHECK-NEXT: vse8.v v8, (a0)5250; CHECK-NEXT: ret5251 %a = load <16 x i8>, ptr %x5252 %b = insertelement <16 x i8> poison, i8 %y, i32 05253 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer5254 %d = sdiv <16 x i8> %a, %c5255 store <16 x i8> %d, ptr %x5256 ret void5257}5258 5259define void @sdiv_vx_v8i16(ptr %x, i16 %y) {5260; CHECK-LABEL: sdiv_vx_v8i16:5261; CHECK: # %bb.0:5262; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5263; CHECK-NEXT: vle16.v v8, (a0)5264; CHECK-NEXT: vdiv.vx v8, v8, a15265; CHECK-NEXT: vse16.v v8, (a0)5266; CHECK-NEXT: ret5267 %a = load <8 x i16>, ptr %x5268 %b = insertelement <8 x i16> poison, i16 %y, i32 05269 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer5270 %d = sdiv <8 x i16> %a, %c5271 store <8 x i16> %d, ptr %x5272 ret void5273}5274 5275define void @sdiv_vx_v4i32(ptr %x, i32 %y) {5276; CHECK-LABEL: sdiv_vx_v4i32:5277; CHECK: # %bb.0:5278; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5279; CHECK-NEXT: vle32.v v8, (a0)5280; CHECK-NEXT: vdiv.vx v8, v8, a15281; CHECK-NEXT: vse32.v v8, (a0)5282; CHECK-NEXT: ret5283 %a = load <4 x i32>, ptr %x5284 %b = insertelement <4 x i32> poison, i32 %y, i32 05285 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer5286 %d = sdiv <4 x i32> %a, %c5287 store <4 x i32> %d, ptr %x5288 ret void5289}5290 5291define void @srem_vx_v16i8(ptr %x, i8 %y) {5292; CHECK-LABEL: srem_vx_v16i8:5293; CHECK: # %bb.0:5294; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma5295; CHECK-NEXT: vle8.v v8, (a0)5296; CHECK-NEXT: vrem.vx v8, v8, a15297; CHECK-NEXT: vse8.v v8, (a0)5298; CHECK-NEXT: ret5299 %a = load <16 x i8>, ptr %x5300 %b = insertelement <16 x i8> poison, i8 %y, i32 05301 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer5302 %d = srem <16 x i8> %a, %c5303 store <16 x i8> %d, ptr %x5304 ret void5305}5306 5307define void @srem_vx_v8i16(ptr %x, i16 %y) {5308; CHECK-LABEL: srem_vx_v8i16:5309; CHECK: # %bb.0:5310; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5311; CHECK-NEXT: vle16.v v8, (a0)5312; CHECK-NEXT: vrem.vx v8, v8, a15313; CHECK-NEXT: vse16.v v8, (a0)5314; CHECK-NEXT: ret5315 %a = load <8 x i16>, ptr %x5316 %b = insertelement <8 x i16> poison, i16 %y, i32 05317 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer5318 %d = srem <8 x i16> %a, %c5319 store <8 x i16> %d, ptr %x5320 ret void5321}5322 5323define void @srem_vx_v4i32(ptr %x, i32 %y) {5324; CHECK-LABEL: srem_vx_v4i32:5325; CHECK: # %bb.0:5326; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5327; CHECK-NEXT: vle32.v v8, (a0)5328; CHECK-NEXT: vrem.vx v8, v8, a15329; CHECK-NEXT: vse32.v v8, (a0)5330; CHECK-NEXT: ret5331 %a = load <4 x i32>, ptr %x5332 %b = insertelement <4 x i32> poison, i32 %y, i32 05333 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer5334 %d = srem <4 x i32> %a, %c5335 store <4 x i32> %d, ptr %x5336 ret void5337}5338 5339define void @udiv_vx_v16i8(ptr %x, i8 %y) {5340; CHECK-LABEL: udiv_vx_v16i8:5341; CHECK: # %bb.0:5342; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma5343; CHECK-NEXT: vle8.v v8, (a0)5344; CHECK-NEXT: vdivu.vx v8, v8, a15345; CHECK-NEXT: vse8.v v8, (a0)5346; CHECK-NEXT: ret5347 %a = load <16 x i8>, ptr %x5348 %b = insertelement <16 x i8> poison, i8 %y, i32 05349 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer5350 %d = udiv <16 x i8> %a, %c5351 store <16 x i8> %d, ptr %x5352 ret void5353}5354 5355define void @udiv_vx_v8i16(ptr %x, i16 %y) {5356; CHECK-LABEL: udiv_vx_v8i16:5357; CHECK: # %bb.0:5358; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5359; CHECK-NEXT: vle16.v v8, (a0)5360; CHECK-NEXT: vdivu.vx v8, v8, a15361; CHECK-NEXT: vse16.v v8, (a0)5362; CHECK-NEXT: ret5363 %a = load <8 x i16>, ptr %x5364 %b = insertelement <8 x i16> poison, i16 %y, i32 05365 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer5366 %d = udiv <8 x i16> %a, %c5367 store <8 x i16> %d, ptr %x5368 ret void5369}5370 5371define void @udiv_vx_v4i32(ptr %x, i32 %y) {5372; CHECK-LABEL: udiv_vx_v4i32:5373; CHECK: # %bb.0:5374; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5375; CHECK-NEXT: vle32.v v8, (a0)5376; CHECK-NEXT: vdivu.vx v8, v8, a15377; CHECK-NEXT: vse32.v v8, (a0)5378; CHECK-NEXT: ret5379 %a = load <4 x i32>, ptr %x5380 %b = insertelement <4 x i32> poison, i32 %y, i32 05381 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer5382 %d = udiv <4 x i32> %a, %c5383 store <4 x i32> %d, ptr %x5384 ret void5385}5386 5387define void @urem_vx_v16i8(ptr %x, i8 %y) {5388; CHECK-LABEL: urem_vx_v16i8:5389; CHECK: # %bb.0:5390; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma5391; CHECK-NEXT: vle8.v v8, (a0)5392; CHECK-NEXT: vremu.vx v8, v8, a15393; CHECK-NEXT: vse8.v v8, (a0)5394; CHECK-NEXT: ret5395 %a = load <16 x i8>, ptr %x5396 %b = insertelement <16 x i8> poison, i8 %y, i32 05397 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer5398 %d = urem <16 x i8> %a, %c5399 store <16 x i8> %d, ptr %x5400 ret void5401}5402 5403define void @urem_vx_v8i16(ptr %x, i16 %y) {5404; CHECK-LABEL: urem_vx_v8i16:5405; CHECK: # %bb.0:5406; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5407; CHECK-NEXT: vle16.v v8, (a0)5408; CHECK-NEXT: vremu.vx v8, v8, a15409; CHECK-NEXT: vse16.v v8, (a0)5410; CHECK-NEXT: ret5411 %a = load <8 x i16>, ptr %x5412 %b = insertelement <8 x i16> poison, i16 %y, i32 05413 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer5414 %d = urem <8 x i16> %a, %c5415 store <8 x i16> %d, ptr %x5416 ret void5417}5418 5419define void @urem_vx_v4i32(ptr %x, i32 %y) {5420; CHECK-LABEL: urem_vx_v4i32:5421; CHECK: # %bb.0:5422; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5423; CHECK-NEXT: vle32.v v8, (a0)5424; CHECK-NEXT: vremu.vx v8, v8, a15425; CHECK-NEXT: vse32.v v8, (a0)5426; CHECK-NEXT: ret5427 %a = load <4 x i32>, ptr %x5428 %b = insertelement <4 x i32> poison, i32 %y, i32 05429 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer5430 %d = urem <4 x i32> %a, %c5431 store <4 x i32> %d, ptr %x5432 ret void5433}5434 5435define void @mulhu_vx_v16i8(ptr %x) {5436; CHECK-LABEL: mulhu_vx_v16i8:5437; CHECK: # %bb.0:5438; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma5439; CHECK-NEXT: vle8.v v8, (a0)5440; CHECK-NEXT: li a1, 575441; CHECK-NEXT: vmulhu.vx v8, v8, a15442; CHECK-NEXT: vsrl.vi v8, v8, 15443; CHECK-NEXT: vse8.v v8, (a0)5444; CHECK-NEXT: ret5445 %a = load <16 x i8>, ptr %x5446 %b = udiv <16 x i8> %a, <i8 9, i8 9, i8 9, i8 9, i8 9, i8 9, i8 9, i8 9, i8 9, i8 9, i8 9, i8 9, i8 9, i8 9, i8 9, i8 9>5447 store <16 x i8> %b, ptr %x5448 ret void5449}5450 5451define void @mulhu_vx_v8i16(ptr %x) {5452; CHECK-LABEL: mulhu_vx_v8i16:5453; CHECK: # %bb.0:5454; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5455; CHECK-NEXT: vle16.v v8, (a0)5456; CHECK-NEXT: lui a1, 25457; CHECK-NEXT: addi a1, a1, 11715458; CHECK-NEXT: vmulhu.vx v9, v8, a15459; CHECK-NEXT: vsub.vv v8, v8, v95460; CHECK-NEXT: vsrl.vi v8, v8, 15461; CHECK-NEXT: vadd.vv v8, v8, v95462; CHECK-NEXT: vsrl.vi v8, v8, 25463; CHECK-NEXT: vse16.v v8, (a0)5464; CHECK-NEXT: ret5465 %a = load <8 x i16>, ptr %x5466 %b = udiv <8 x i16> %a, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>5467 store <8 x i16> %b, ptr %x5468 ret void5469}5470 5471define void @mulhu_vx_v4i32(ptr %x) {5472; CHECK-LABEL: mulhu_vx_v4i32:5473; CHECK: # %bb.0:5474; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5475; CHECK-NEXT: vle32.v v8, (a0)5476; CHECK-NEXT: lui a1, 8388615477; CHECK-NEXT: addi a1, a1, -8195478; CHECK-NEXT: vmulhu.vx v8, v8, a15479; CHECK-NEXT: vsrl.vi v8, v8, 25480; CHECK-NEXT: vse32.v v8, (a0)5481; CHECK-NEXT: ret5482 %a = load <4 x i32>, ptr %x5483 %b = udiv <4 x i32> %a, <i32 5, i32 5, i32 5, i32 5>5484 store <4 x i32> %b, ptr %x5485 ret void5486}5487 5488define void @mulhu_vx_v2i64(ptr %x) {5489; RV32-LABEL: mulhu_vx_v2i64:5490; RV32: # %bb.0:5491; RV32-NEXT: addi sp, sp, -165492; RV32-NEXT: .cfi_def_cfa_offset 165493; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma5494; RV32-NEXT: vle64.v v8, (a0)5495; RV32-NEXT: lui a1, 6990515496; RV32-NEXT: addi a2, a1, -13665497; RV32-NEXT: addi a1, a1, -13655498; RV32-NEXT: sw a1, 8(sp)5499; RV32-NEXT: sw a2, 12(sp)5500; RV32-NEXT: addi a1, sp, 85501; RV32-NEXT: vlse64.v v9, (a1), zero5502; RV32-NEXT: vmulhu.vv v8, v8, v95503; RV32-NEXT: vsrl.vi v8, v8, 15504; RV32-NEXT: vse64.v v8, (a0)5505; RV32-NEXT: addi sp, sp, 165506; RV32-NEXT: .cfi_def_cfa_offset 05507; RV32-NEXT: ret5508;5509; RV64-LABEL: mulhu_vx_v2i64:5510; RV64: # %bb.0:5511; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma5512; RV64-NEXT: vle64.v v8, (a0)5513; RV64-NEXT: lui a1, 6990515514; RV64-NEXT: addi a1, a1, -13655515; RV64-NEXT: slli a2, a1, 325516; RV64-NEXT: add a1, a1, a25517; RV64-NEXT: vmulhu.vx v8, v8, a15518; RV64-NEXT: vsrl.vi v8, v8, 15519; RV64-NEXT: vse64.v v8, (a0)5520; RV64-NEXT: ret5521 %a = load <2 x i64>, ptr %x5522 %b = udiv <2 x i64> %a, <i64 3, i64 3>5523 store <2 x i64> %b, ptr %x5524 ret void5525}5526 5527define void @mulhs_vx_v16i8(ptr %x) {5528; CHECK-LABEL: mulhs_vx_v16i8:5529; CHECK: # %bb.0:5530; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma5531; CHECK-NEXT: vle8.v v8, (a0)5532; CHECK-NEXT: li a1, -1235533; CHECK-NEXT: vmulhu.vx v8, v8, a15534; CHECK-NEXT: vsrl.vi v8, v8, 75535; CHECK-NEXT: vse8.v v8, (a0)5536; CHECK-NEXT: ret5537 %a = load <16 x i8>, ptr %x5538 %b = udiv <16 x i8> %a, <i8 -9, i8 -9, i8 -9, i8 -9, i8 -9, i8 -9, i8 -9, i8 -9, i8 -9, i8 -9, i8 -9, i8 -9, i8 -9, i8 -9, i8 -9, i8 -9>5539 store <16 x i8> %b, ptr %x5540 ret void5541}5542 5543define void @mulhs_vx_v8i16(ptr %x) {5544; CHECK-LABEL: mulhs_vx_v8i16:5545; CHECK: # %bb.0:5546; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5547; CHECK-NEXT: vle16.v v8, (a0)5548; CHECK-NEXT: lui a1, 55549; CHECK-NEXT: addi a1, a1, -17555550; CHECK-NEXT: vmulh.vx v8, v8, a15551; CHECK-NEXT: vsra.vi v8, v8, 15552; CHECK-NEXT: vsrl.vi v9, v8, 155553; CHECK-NEXT: vadd.vv v8, v8, v95554; CHECK-NEXT: vse16.v v8, (a0)5555; CHECK-NEXT: ret5556 %a = load <8 x i16>, ptr %x5557 %b = sdiv <8 x i16> %a, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>5558 store <8 x i16> %b, ptr %x5559 ret void5560}5561 5562define void @mulhs_vx_v4i32(ptr %x) {5563; RV32-LABEL: mulhs_vx_v4i32:5564; RV32: # %bb.0:5565; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma5566; RV32-NEXT: vle32.v v8, (a0)5567; RV32-NEXT: lui a1, 6291465568; RV32-NEXT: addi a1, a1, -16395569; RV32-NEXT: vmulh.vx v8, v8, a15570; RV32-NEXT: vsrl.vi v9, v8, 315571; RV32-NEXT: vsra.vi v8, v8, 15572; RV32-NEXT: vadd.vv v8, v8, v95573; RV32-NEXT: vse32.v v8, (a0)5574; RV32-NEXT: ret5575;5576; RV64-LABEL: mulhs_vx_v4i32:5577; RV64: # %bb.0:5578; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma5579; RV64-NEXT: vle32.v v8, (a0)5580; RV64-NEXT: lui a1, 6291465581; RV64-NEXT: addi a1, a1, -16395582; RV64-NEXT: vmulh.vx v8, v8, a15583; RV64-NEXT: vsra.vi v8, v8, 15584; RV64-NEXT: vsrl.vi v9, v8, 315585; RV64-NEXT: vadd.vv v8, v8, v95586; RV64-NEXT: vse32.v v8, (a0)5587; RV64-NEXT: ret5588 %a = load <4 x i32>, ptr %x5589 %b = sdiv <4 x i32> %a, <i32 -5, i32 -5, i32 -5, i32 -5>5590 store <4 x i32> %b, ptr %x5591 ret void5592}5593 5594define void @mulhs_vx_v2i64(ptr %x) {5595; RV32-LABEL: mulhs_vx_v2i64:5596; RV32: # %bb.0:5597; RV32-NEXT: addi sp, sp, -165598; RV32-NEXT: .cfi_def_cfa_offset 165599; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma5600; RV32-NEXT: vle64.v v8, (a0)5601; RV32-NEXT: lui a1, 3495255602; RV32-NEXT: addi a2, sp, 85603; RV32-NEXT: addi a3, a1, 13655604; RV32-NEXT: addi a1, a1, 13665605; RV32-NEXT: sw a1, 8(sp)5606; RV32-NEXT: sw a3, 12(sp)5607; RV32-NEXT: vlse64.v v9, (a2), zero5608; RV32-NEXT: vmulh.vv v8, v8, v95609; RV32-NEXT: li a1, 635610; RV32-NEXT: vsrl.vx v9, v8, a15611; RV32-NEXT: vadd.vv v8, v8, v95612; RV32-NEXT: vse64.v v8, (a0)5613; RV32-NEXT: addi sp, sp, 165614; RV32-NEXT: .cfi_def_cfa_offset 05615; RV32-NEXT: ret5616;5617; RV64-LABEL: mulhs_vx_v2i64:5618; RV64: # %bb.0:5619; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma5620; RV64-NEXT: vle64.v v8, (a0)5621; RV64-NEXT: lui a1, %hi(.LCPI321_0)5622; RV64-NEXT: ld a1, %lo(.LCPI321_0)(a1)5623; RV64-NEXT: vmulh.vx v8, v8, a15624; RV64-NEXT: li a1, 635625; RV64-NEXT: vsrl.vx v9, v8, a15626; RV64-NEXT: vadd.vv v8, v8, v95627; RV64-NEXT: vse64.v v8, (a0)5628; RV64-NEXT: ret5629 %a = load <2 x i64>, ptr %x5630 %b = sdiv <2 x i64> %a, <i64 3, i64 3>5631 store <2 x i64> %b, ptr %x5632 ret void5633}5634 5635define void @madd_vv_v2i64(ptr %x, <2 x i64> %y) {5636; CHECK-LABEL: madd_vv_v2i64:5637; CHECK: # %bb.0:5638; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma5639; CHECK-NEXT: vle64.v v9, (a0)5640; CHECK-NEXT: vmadd.vv v9, v8, v85641; CHECK-NEXT: vse64.v v9, (a0)5642; CHECK-NEXT: ret5643 %a = load <2 x i64>, ptr %x5644 %b = add <2 x i64> %a, <i64 1, i64 1>5645 %c = mul <2 x i64> %b, %y5646 store <2 x i64> %c, ptr %x5647 ret void5648}5649 5650define void @madd_vv_v2i64_2(ptr %x, <2 x i64> %y) {5651; CHECK-LABEL: madd_vv_v2i64_2:5652; CHECK: # %bb.0:5653; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma5654; CHECK-NEXT: vle64.v v9, (a0)5655; CHECK-NEXT: vmadd.vv v9, v8, v85656; CHECK-NEXT: vse64.v v9, (a0)5657; CHECK-NEXT: ret5658 %a = load <2 x i64>, ptr %x5659 %b = add <2 x i64> %a, <i64 1, i64 1>5660 %c = mul <2 x i64> %y, %b5661 store <2 x i64> %c, ptr %x5662 ret void5663}5664 5665define void @msub_vv_v2i64(ptr %x, <2 x i64> %y) {5666; CHECK-LABEL: msub_vv_v2i64:5667; CHECK: # %bb.0:5668; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma5669; CHECK-NEXT: vle64.v v9, (a0)5670; CHECK-NEXT: vnmsub.vv v9, v8, v85671; CHECK-NEXT: vse64.v v9, (a0)5672; CHECK-NEXT: ret5673 %a = load <2 x i64>, ptr %x5674 %b = sub <2 x i64> <i64 1, i64 1>, %a5675 %c = mul <2 x i64> %b, %y5676 store <2 x i64> %c, ptr %x5677 ret void5678}5679 5680define void @msub_vv_v2i64_2(ptr %x, <2 x i64> %y) {5681; CHECK-LABEL: msub_vv_v2i64_2:5682; CHECK: # %bb.0:5683; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma5684; CHECK-NEXT: vle64.v v9, (a0)5685; CHECK-NEXT: vnmsub.vv v9, v8, v85686; CHECK-NEXT: vse64.v v9, (a0)5687; CHECK-NEXT: ret5688 %a = load <2 x i64>, ptr %x5689 %b = sub <2 x i64> <i64 1, i64 1>, %a5690 %c = mul <2 x i64> %y, %b5691 store <2 x i64> %c, ptr %x5692 ret void5693}5694 5695define <8 x i8> @vsub_if_uge_v8i8(<8 x i8> %va, <8 x i8> %vb) {5696; CHECK-LABEL: vsub_if_uge_v8i8:5697; CHECK: # %bb.0:5698; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma5699; CHECK-NEXT: vsub.vv v9, v8, v95700; CHECK-NEXT: vminu.vv v8, v8, v95701; CHECK-NEXT: ret5702 %cmp = icmp ult <8 x i8> %va, %vb5703 %select = select <8 x i1> %cmp, <8 x i8> zeroinitializer, <8 x i8> %vb5704 %sub = sub nuw <8 x i8> %va, %select5705 ret <8 x i8> %sub5706}5707 5708define <8 x i8> @vsub_if_uge_swapped_v8i8(<8 x i8> %va, <8 x i8> %vb) {5709; CHECK-LABEL: vsub_if_uge_swapped_v8i8:5710; CHECK: # %bb.0:5711; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma5712; CHECK-NEXT: vsub.vv v9, v8, v95713; CHECK-NEXT: vminu.vv v8, v8, v95714; CHECK-NEXT: ret5715 %cmp = icmp uge <8 x i8> %va, %vb5716 %select = select <8 x i1> %cmp, <8 x i8> %vb, <8 x i8> zeroinitializer5717 %sub = sub nuw <8 x i8> %va, %select5718 ret <8 x i8> %sub5719}5720 5721define <8 x i16> @vsub_if_uge_v8i16(<8 x i16> %va, <8 x i16> %vb) {5722; CHECK-LABEL: vsub_if_uge_v8i16:5723; CHECK: # %bb.0:5724; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5725; CHECK-NEXT: vsub.vv v9, v8, v95726; CHECK-NEXT: vminu.vv v8, v8, v95727; CHECK-NEXT: ret5728 %cmp = icmp ult <8 x i16> %va, %vb5729 %select = select <8 x i1> %cmp, <8 x i16> zeroinitializer, <8 x i16> %vb5730 %sub = sub nuw <8 x i16> %va, %select5731 ret <8 x i16> %sub5732}5733 5734define <8 x i16> @vsub_if_uge_swapped_v8i16(<8 x i16> %va, <8 x i16> %vb) {5735; CHECK-LABEL: vsub_if_uge_swapped_v8i16:5736; CHECK: # %bb.0:5737; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5738; CHECK-NEXT: vsub.vv v9, v8, v95739; CHECK-NEXT: vminu.vv v8, v8, v95740; CHECK-NEXT: ret5741 %cmp = icmp uge <8 x i16> %va, %vb5742 %select = select <8 x i1> %cmp, <8 x i16> %vb, <8 x i16> zeroinitializer5743 %sub = sub nuw <8 x i16> %va, %select5744 ret <8 x i16> %sub5745}5746 5747define <4 x i32> @vsub_if_uge_v4i32(<4 x i32> %va, <4 x i32> %vb) {5748; CHECK-LABEL: vsub_if_uge_v4i32:5749; CHECK: # %bb.0:5750; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5751; CHECK-NEXT: vsub.vv v9, v8, v95752; CHECK-NEXT: vminu.vv v8, v8, v95753; CHECK-NEXT: ret5754 %cmp = icmp ult <4 x i32> %va, %vb5755 %select = select <4 x i1> %cmp, <4 x i32> zeroinitializer, <4 x i32> %vb5756 %sub = sub nuw <4 x i32> %va, %select5757 ret <4 x i32> %sub5758}5759 5760define <4 x i32> @vsub_if_uge_swapped_v4i32(<4 x i32> %va, <4 x i32> %vb) {5761; CHECK-LABEL: vsub_if_uge_swapped_v4i32:5762; CHECK: # %bb.0:5763; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5764; CHECK-NEXT: vsub.vv v9, v8, v95765; CHECK-NEXT: vminu.vv v8, v8, v95766; CHECK-NEXT: ret5767 %cmp = icmp uge <4 x i32> %va, %vb5768 %select = select <4 x i1> %cmp, <4 x i32> %vb, <4 x i32> zeroinitializer5769 %sub = sub nuw <4 x i32> %va, %select5770 ret <4 x i32> %sub5771}5772 5773define <2 x i64> @vsub_if_uge_v2i64(<2 x i64> %va, <2 x i64> %vb) {5774; CHECK-LABEL: vsub_if_uge_v2i64:5775; CHECK: # %bb.0:5776; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma5777; CHECK-NEXT: vsub.vv v9, v8, v95778; CHECK-NEXT: vminu.vv v8, v8, v95779; CHECK-NEXT: ret5780 %cmp = icmp ult <2 x i64> %va, %vb5781 %select = select <2 x i1> %cmp, <2 x i64> zeroinitializer, <2 x i64> %vb5782 %sub = sub nuw <2 x i64> %va, %select5783 ret <2 x i64> %sub5784}5785 5786define <2 x i64> @vsub_if_uge_swapped_v2i64(<2 x i64> %va, <2 x i64> %vb) {5787; CHECK-LABEL: vsub_if_uge_swapped_v2i64:5788; CHECK: # %bb.0:5789; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma5790; CHECK-NEXT: vsub.vv v9, v8, v95791; CHECK-NEXT: vminu.vv v8, v8, v95792; CHECK-NEXT: ret5793 %cmp = icmp uge <2 x i64> %va, %vb5794 %select = select <2 x i1> %cmp, <2 x i64> %vb, <2 x i64> zeroinitializer5795 %sub = sub nuw <2 x i64> %va, %select5796 ret <2 x i64> %sub5797}5798 5799define <8 x i8> @sub_if_uge_C_v8i8(<8 x i8> %x) {5800; CHECK-LABEL: sub_if_uge_C_v8i8:5801; CHECK: # %bb.0:5802; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma5803; CHECK-NEXT: vadd.vi v9, v8, -135804; CHECK-NEXT: vminu.vv v8, v9, v85805; CHECK-NEXT: ret5806 %cmp = icmp ugt <8 x i8> %x, splat (i8 12)5807 %sub = add <8 x i8> %x, splat (i8 -13)5808 %select = select <8 x i1> %cmp, <8 x i8> %sub, <8 x i8> %x5809 ret <8 x i8> %select5810}5811 5812define <8 x i16> @sub_if_uge_C_v8i16(<8 x i16> %x) {5813; CHECK-LABEL: sub_if_uge_C_v8i16:5814; CHECK: # %bb.0:5815; CHECK-NEXT: li a0, -20015816; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma5817; CHECK-NEXT: vadd.vx v9, v8, a05818; CHECK-NEXT: vminu.vv v8, v9, v85819; CHECK-NEXT: ret5820 %cmp = icmp ugt <8 x i16> %x, splat (i16 2000)5821 %sub = add <8 x i16> %x, splat (i16 -2001)5822 %select = select <8 x i1> %cmp, <8 x i16> %sub, <8 x i16> %x5823 ret <8 x i16> %select5824}5825 5826define <4 x i32> @sub_if_uge_C_v4i32(<4 x i32> %x) {5827; CHECK-LABEL: sub_if_uge_C_v4i32:5828; CHECK: # %bb.0:5829; CHECK-NEXT: lui a0, 10485605830; CHECK-NEXT: addi a0, a0, 155831; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5832; CHECK-NEXT: vadd.vx v9, v8, a05833; CHECK-NEXT: vminu.vv v8, v9, v85834; CHECK-NEXT: ret5835 %cmp = icmp ugt <4 x i32> %x, splat (i32 65520)5836 %sub = add <4 x i32> %x, splat (i32 -65521)5837 %select = select <4 x i1> %cmp, <4 x i32> %sub, <4 x i32> %x5838 ret <4 x i32> %select5839}5840 5841define <4 x i32> @sub_if_uge_C_swapped_v4i32(<4 x i32> %x) {5842; CHECK-LABEL: sub_if_uge_C_swapped_v4i32:5843; CHECK: # %bb.0:5844; CHECK-NEXT: lui a0, 10485605845; CHECK-NEXT: addi a0, a0, 155846; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma5847; CHECK-NEXT: vadd.vx v9, v8, a05848; CHECK-NEXT: vminu.vv v8, v8, v95849; CHECK-NEXT: ret5850 %cmp = icmp ult <4 x i32> %x, splat (i32 65521)5851 %sub = add <4 x i32> %x, splat (i32 -65521)5852 %select = select <4 x i1> %cmp, <4 x i32> %x, <4 x i32> %sub5853 ret <4 x i32> %select5854}5855 5856define <2 x i64> @sub_if_uge_C_v2i64(<2 x i64> %x) nounwind {5857; RV32-LABEL: sub_if_uge_C_v2i64:5858; RV32: # %bb.0:5859; RV32-NEXT: addi sp, sp, -165860; RV32-NEXT: li a0, -25861; RV32-NEXT: lui a1, 8764495862; RV32-NEXT: addi a1, a1, -5135863; RV32-NEXT: sw a1, 8(sp)5864; RV32-NEXT: sw a0, 12(sp)5865; RV32-NEXT: addi a0, sp, 85866; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma5867; RV32-NEXT: vlse64.v v9, (a0), zero5868; RV32-NEXT: vadd.vv v9, v8, v95869; RV32-NEXT: vminu.vv v8, v9, v85870; RV32-NEXT: addi sp, sp, 165871; RV32-NEXT: ret5872;5873; RV64-LABEL: sub_if_uge_C_v2i64:5874; RV64: # %bb.0:5875; RV64-NEXT: lui a0, 10482785876; RV64-NEXT: addi a0, a0, -955877; RV64-NEXT: slli a0, a0, 125878; RV64-NEXT: addi a0, a0, -5135879; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma5880; RV64-NEXT: vadd.vx v9, v8, a05881; RV64-NEXT: vminu.vv v8, v9, v85882; RV64-NEXT: ret5883 %cmp = icmp ugt <2 x i64> %x, splat (i64 5000000000)5884 %sub = add <2 x i64> %x, splat (i64 -5000000001)5885 %select = select <2 x i1> %cmp, <2 x i64> %sub, <2 x i64> %x5886 ret <2 x i64> %select5887}5888