brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.0 KiB · 5ed49d9 Raw
482 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s --check-prefixes=CHECK,LA323; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s --check-prefixes=CHECK,LA644 5define void @and_not_combine_v32i8(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {6; CHECK-LABEL: and_not_combine_v32i8:7; CHECK:       # %bb.0: # %entry8; CHECK-NEXT:    xvld $xr0, $a2, 09; CHECK-NEXT:    xvld $xr1, $a3, 010; CHECK-NEXT:    xvld $xr2, $a1, 011; CHECK-NEXT:    xvsub.b $xr0, $xr0, $xr112; CHECK-NEXT:    xvandn.v $xr0, $xr0, $xr213; CHECK-NEXT:    xvst $xr0, $a0, 014; CHECK-NEXT:    ret15entry:16  %v0 = load <32 x i8>, ptr %a017  %v1 = load <32 x i8>, ptr %a118  %v2 = load <32 x i8>, ptr %a219  %not = xor <32 x i8> %v1, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>20  %add = add <32 x i8> %not, %v221  %and = and <32 x i8> %v0, %add22  store <32 x i8> %and, ptr %res23  ret void24}25 26define void @and_not_combine_v16i16(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {27; CHECK-LABEL: and_not_combine_v16i16:28; CHECK:       # %bb.0: # %entry29; CHECK-NEXT:    xvld $xr0, $a2, 030; CHECK-NEXT:    xvld $xr1, $a3, 031; CHECK-NEXT:    xvld $xr2, $a1, 032; CHECK-NEXT:    xvsub.h $xr0, $xr0, $xr133; CHECK-NEXT:    xvandn.v $xr0, $xr0, $xr234; CHECK-NEXT:    xvst $xr0, $a0, 035; CHECK-NEXT:    ret36entry:37  %v0 = load <16 x i16>, ptr %a038  %v1 = load <16 x i16>, ptr %a139  %v2 = load <16 x i16>, ptr %a240  %not = xor <16 x i16> %v1, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>41  %add = add <16 x i16> %not, %v242  %and = and <16 x i16> %v0, %add43  store <16 x i16> %and, ptr %res44  ret void45}46 47define void @and_not_combine_v8i32(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {48; CHECK-LABEL: and_not_combine_v8i32:49; CHECK:       # %bb.0: # %entry50; CHECK-NEXT:    xvld $xr0, $a2, 051; CHECK-NEXT:    xvld $xr1, $a3, 052; CHECK-NEXT:    xvld $xr2, $a1, 053; CHECK-NEXT:    xvsub.w $xr0, $xr0, $xr154; CHECK-NEXT:    xvandn.v $xr0, $xr0, $xr255; CHECK-NEXT:    xvst $xr0, $a0, 056; CHECK-NEXT:    ret57entry:58  %v0 = load <8 x i32>, ptr %a059  %v1 = load <8 x i32>, ptr %a160  %v2 = load <8 x i32>, ptr %a261  %not = xor <8 x i32> %v1, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>62  %add = add <8 x i32> %not, %v263  %and = and <8 x i32> %v0, %add64  store <8 x i32> %and, ptr %res65  ret void66}67 68define void @and_not_combine_v4i64(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {69; CHECK-LABEL: and_not_combine_v4i64:70; CHECK:       # %bb.0: # %entry71; CHECK-NEXT:    xvld $xr0, $a2, 072; CHECK-NEXT:    xvld $xr1, $a3, 073; CHECK-NEXT:    xvld $xr2, $a1, 074; CHECK-NEXT:    xvsub.d $xr0, $xr0, $xr175; CHECK-NEXT:    xvandn.v $xr0, $xr0, $xr276; CHECK-NEXT:    xvst $xr0, $a0, 077; CHECK-NEXT:    ret78entry:79  %v0 = load <4 x i64>, ptr %a080  %v1 = load <4 x i64>, ptr %a181  %v2 = load <4 x i64>, ptr %a282  %not = xor <4 x i64> %v1, <i64 -1, i64 -1, i64 -1, i64 -1>83  %add = add <4 x i64> %not, %v284  %and = and <4 x i64> %v0, %add85  store <4 x i64> %and, ptr %res86  ret void87}88 89define void @pre_not_and_not_combine_v32i8(ptr %res, ptr %a, i8 %b) nounwind {90; CHECK-LABEL: pre_not_and_not_combine_v32i8:91; CHECK:       # %bb.0:92; CHECK-NEXT:    xvld $xr0, $a1, 093; CHECK-NEXT:    xvreplgr2vr.b $xr1, $a294; CHECK-NEXT:    xvnor.v $xr0, $xr0, $xr195; CHECK-NEXT:    xvst $xr0, $a0, 096; CHECK-NEXT:    ret97  %v0 = load <32 x i8>, ptr %a98  %b.not = xor i8 %b, -199  %b.not.ele = insertelement <32 x i8> poison, i8 %b.not, i64 0100  %v1.not = shufflevector <32 x i8> %b.not.ele, <32 x i8> poison, <32 x i32> zeroinitializer101  %v0.not = xor <32 x i8> %v0, splat (i8 -1)102  %and = and <32 x i8> %v0.not, %v1.not103  store <32 x i8> %and, ptr %res104  ret void105}106 107define void @post_not_and_not_combine_v32i8(ptr %res, ptr %a, i8 %b) nounwind {108; CHECK-LABEL: post_not_and_not_combine_v32i8:109; CHECK:       # %bb.0:110; CHECK-NEXT:    xvld $xr0, $a1, 0111; CHECK-NEXT:    xvreplgr2vr.b $xr1, $a2112; CHECK-NEXT:    xvnor.v $xr0, $xr0, $xr1113; CHECK-NEXT:    xvst $xr0, $a0, 0114; CHECK-NEXT:    ret115  %v0 = load <32 x i8>, ptr %a116  %b.ele = insertelement <32 x i8> poison, i8 %b, i64 0117  %v1 = shufflevector <32 x i8> %b.ele, <32 x i8> poison, <32 x i32> zeroinitializer118  %v0.not = xor <32 x i8> %v0, splat (i8 -1)119  %v1.not = xor <32 x i8> %v1, splat (i8 -1)120  %and = and <32 x i8> %v0.not, %v1.not121  store <32 x i8> %and, ptr %res122  ret void123}124 125define void @pre_not_and_not_combine_v16i16(ptr %res, ptr %a, i16 %b) nounwind {126; CHECK-LABEL: pre_not_and_not_combine_v16i16:127; CHECK:       # %bb.0:128; CHECK-NEXT:    xvld $xr0, $a1, 0129; CHECK-NEXT:    xvreplgr2vr.h $xr1, $a2130; CHECK-NEXT:    xvnor.v $xr0, $xr0, $xr1131; CHECK-NEXT:    xvst $xr0, $a0, 0132; CHECK-NEXT:    ret133  %v0 = load <16 x i16>, ptr %a134  %b.not = xor i16 %b, -1135  %b.not.ele = insertelement <16 x i16> poison, i16 %b.not, i64 0136  %v1.not = shufflevector <16 x i16> %b.not.ele, <16 x i16> poison, <16 x i32> zeroinitializer137  %v0.not = xor <16 x i16> %v0, splat (i16 -1)138  %and = and <16 x i16> %v0.not, %v1.not139  store <16 x i16> %and, ptr %res140  ret void141}142 143define void @post_not_and_not_combine_v16i16(ptr %res, ptr %a, i16 %b) nounwind {144; CHECK-LABEL: post_not_and_not_combine_v16i16:145; CHECK:       # %bb.0:146; CHECK-NEXT:    xvld $xr0, $a1, 0147; CHECK-NEXT:    xvreplgr2vr.h $xr1, $a2148; CHECK-NEXT:    xvnor.v $xr0, $xr0, $xr1149; CHECK-NEXT:    xvst $xr0, $a0, 0150; CHECK-NEXT:    ret151  %v0 = load <16 x i16>, ptr %a152  %b.ele = insertelement <16 x i16> poison, i16 %b, i64 0153  %v1 = shufflevector <16 x i16> %b.ele, <16 x i16> poison, <16 x i32> zeroinitializer154  %v0.not = xor <16 x i16> %v0, splat (i16 -1)155  %v1.not = xor <16 x i16> %v1, splat (i16 -1)156  %and = and <16 x i16> %v0.not, %v1.not157  store <16 x i16> %and, ptr %res158  ret void159}160 161define void @pre_not_and_not_combine_v8i32(ptr %res, ptr %a, i32 %b) nounwind {162; CHECK-LABEL: pre_not_and_not_combine_v8i32:163; CHECK:       # %bb.0:164; CHECK-NEXT:    xvld $xr0, $a1, 0165; CHECK-NEXT:    xvreplgr2vr.w $xr1, $a2166; CHECK-NEXT:    xvnor.v $xr0, $xr0, $xr1167; CHECK-NEXT:    xvst $xr0, $a0, 0168; CHECK-NEXT:    ret169  %v0 = load <8 x i32>, ptr %a170  %b.not = xor i32 %b, -1171  %b.not.ele = insertelement <8 x i32> poison, i32 %b.not, i64 0172  %v1.not = shufflevector <8 x i32> %b.not.ele, <8 x i32> poison, <8 x i32> zeroinitializer173  %v0.not = xor <8 x i32> %v0, splat (i32 -1)174  %and = and <8 x i32> %v0.not, %v1.not175  store <8 x i32> %and, ptr %res176  ret void177}178 179define void @post_not_and_not_combine_v8i32(ptr %res, ptr %a, i32 %b) nounwind {180; CHECK-LABEL: post_not_and_not_combine_v8i32:181; CHECK:       # %bb.0:182; CHECK-NEXT:    xvld $xr0, $a1, 0183; CHECK-NEXT:    xvreplgr2vr.w $xr1, $a2184; CHECK-NEXT:    xvnor.v $xr0, $xr0, $xr1185; CHECK-NEXT:    xvst $xr0, $a0, 0186; CHECK-NEXT:    ret187  %v0 = load <8 x i32>, ptr %a188  %b.ele = insertelement <8 x i32> poison, i32 %b, i64 0189  %v1 = shufflevector <8 x i32> %b.ele, <8 x i32> poison, <8 x i32> zeroinitializer190  %v0.not = xor <8 x i32> %v0, splat (i32 -1)191  %v1.not = xor <8 x i32> %v1, splat (i32 -1)192  %and = and <8 x i32> %v0.not, %v1.not193  store <8 x i32> %and, ptr %res194  ret void195}196 197define void @pre_not_and_not_combine_v4i64(ptr %res, ptr %a, i64 %b) nounwind {198; LA32-LABEL: pre_not_and_not_combine_v4i64:199; LA32:       # %bb.0:200; LA32-NEXT:    xvld $xr0, $a1, 0201; LA32-NEXT:    nor $a1, $a3, $zero202; LA32-NEXT:    nor $a2, $a2, $zero203; LA32-NEXT:    vinsgr2vr.w $vr1, $a2, 0204; LA32-NEXT:    vinsgr2vr.w $vr1, $a1, 1205; LA32-NEXT:    xvreplve0.d $xr1, $xr1206; LA32-NEXT:    xvandn.v $xr0, $xr0, $xr1207; LA32-NEXT:    xvst $xr0, $a0, 0208; LA32-NEXT:    ret209;210; LA64-LABEL: pre_not_and_not_combine_v4i64:211; LA64:       # %bb.0:212; LA64-NEXT:    xvld $xr0, $a1, 0213; LA64-NEXT:    xvreplgr2vr.d $xr1, $a2214; LA64-NEXT:    xvnor.v $xr0, $xr0, $xr1215; LA64-NEXT:    xvst $xr0, $a0, 0216; LA64-NEXT:    ret217  %v0 = load <4 x i64>, ptr %a218  %b.not = xor i64 %b, -1219  %b.not.ele = insertelement <4 x i64> poison, i64 %b.not, i64 0220  %v1.not = shufflevector <4 x i64> %b.not.ele, <4 x i64> poison, <4 x i32> zeroinitializer221  %v0.not = xor <4 x i64> %v0, splat (i64 -1)222  %and = and <4 x i64> %v0.not, %v1.not223  store <4 x i64> %and, ptr %res224  ret void225}226 227define void @post_not_and_not_combine_v4i64(ptr %res, ptr %a, i64 %b) nounwind {228; LA32-LABEL: post_not_and_not_combine_v4i64:229; LA32:       # %bb.0:230; LA32-NEXT:    xvld $xr0, $a1, 0231; LA32-NEXT:    vinsgr2vr.w $vr1, $a2, 0232; LA32-NEXT:    vinsgr2vr.w $vr1, $a3, 1233; LA32-NEXT:    xvreplve0.d $xr1, $xr1234; LA32-NEXT:    xvnor.v $xr0, $xr0, $xr1235; LA32-NEXT:    xvst $xr0, $a0, 0236; LA32-NEXT:    ret237;238; LA64-LABEL: post_not_and_not_combine_v4i64:239; LA64:       # %bb.0:240; LA64-NEXT:    xvld $xr0, $a1, 0241; LA64-NEXT:    xvreplgr2vr.d $xr1, $a2242; LA64-NEXT:    xvnor.v $xr0, $xr0, $xr1243; LA64-NEXT:    xvst $xr0, $a0, 0244; LA64-NEXT:    ret245  %v0 = load <4 x i64>, ptr %a246  %b.ele = insertelement <4 x i64> poison, i64 %b, i64 0247  %v1 = shufflevector <4 x i64> %b.ele, <4 x i64> poison, <4 x i32> zeroinitializer248  %v0.not = xor <4 x i64> %v0, splat (i64 -1)249  %v1.not = xor <4 x i64> %v1, splat (i64 -1)250  %and = and <4 x i64> %v0.not, %v1.not251  store <4 x i64> %and, ptr %res252  ret void253}254 255define void @and_not_combine_splatimm_v32i8(ptr %res, ptr %a0) nounwind {256; CHECK-LABEL: and_not_combine_splatimm_v32i8:257; CHECK:       # %bb.0:258; CHECK-NEXT:    xvld $xr0, $a1, 0259; CHECK-NEXT:    xvnori.b $xr0, $xr0, 3260; CHECK-NEXT:    xvst $xr0, $a0, 0261; CHECK-NEXT:    ret262  %v0 = load <32 x i8>, ptr %a0263  %and = and <32 x i8> %v0, splat (i8 -4)264  %xor = xor <32 x i8> %and, splat (i8 -4)265  store <32 x i8> %xor, ptr %res266  ret void267}268 269define void @and_not_combine_splatimm_v16i16(ptr %res, ptr %a0) nounwind {270; CHECK-LABEL: and_not_combine_splatimm_v16i16:271; CHECK:       # %bb.0:272; CHECK-NEXT:    xvld $xr0, $a1, 0273; CHECK-NEXT:    xvrepli.h $xr1, -4274; CHECK-NEXT:    xvandn.v $xr0, $xr0, $xr1275; CHECK-NEXT:    xvst $xr0, $a0, 0276; CHECK-NEXT:    ret277  %v0 = load <16 x i16>, ptr %a0278  %and = and <16 x i16> %v0, splat (i16 -4)279  %xor = xor <16 x i16> %and, splat (i16 -4)280  store <16 x i16> %xor, ptr %res281  ret void282}283 284define void @and_not_combine_splatimm_v8i32(ptr %res, ptr %a0) nounwind {285; CHECK-LABEL: and_not_combine_splatimm_v8i32:286; CHECK:       # %bb.0:287; CHECK-NEXT:    xvld $xr0, $a1, 0288; CHECK-NEXT:    xvrepli.w $xr1, -4289; CHECK-NEXT:    xvandn.v $xr0, $xr0, $xr1290; CHECK-NEXT:    xvst $xr0, $a0, 0291; CHECK-NEXT:    ret292  %v0 = load <8 x i32>, ptr %a0293  %and = and <8 x i32> %v0, splat (i32 -4)294  %xor = xor <8 x i32> %and, splat (i32 -4)295  store <8 x i32> %xor, ptr %res296  ret void297}298 299define void @and_not_combine_splatimm_v4i64(ptr %res, ptr %a0) nounwind {300; CHECK-LABEL: and_not_combine_splatimm_v4i64:301; CHECK:       # %bb.0:302; CHECK-NEXT:    xvld $xr0, $a1, 0303; CHECK-NEXT:    xvrepli.d $xr1, -4304; CHECK-NEXT:    xvandn.v $xr0, $xr0, $xr1305; CHECK-NEXT:    xvst $xr0, $a0, 0306; CHECK-NEXT:    ret307  %v0 = load <4 x i64>, ptr %a0308  %and = and <4 x i64> %v0, splat (i64 -4)309  %xor = xor <4 x i64> %and, splat (i64 -4)310  store <4 x i64> %xor, ptr %res311  ret void312}313 314define void @and_or_not_combine_v32i8(ptr %pa, ptr %pb, ptr %pv, ptr %dst) nounwind {315; CHECK-LABEL: and_or_not_combine_v32i8:316; CHECK:       # %bb.0:317; CHECK-NEXT:    xvld $xr0, $a0, 0318; CHECK-NEXT:    xvld $xr1, $a2, 0319; CHECK-NEXT:    xvld $xr2, $a1, 0320; CHECK-NEXT:    xvseq.b $xr0, $xr1, $xr0321; CHECK-NEXT:    xvseq.b $xr1, $xr1, $xr2322; CHECK-NEXT:    xvand.v $xr0, $xr0, $xr1323; CHECK-NEXT:    xvnori.b $xr0, $xr0, 251324; CHECK-NEXT:    xvst $xr0, $a3, 0325; CHECK-NEXT:    ret326  %a = load <32 x i8>, ptr %pa327  %b = load <32 x i8>, ptr %pb328  %v = load <32 x i8>, ptr %pv329  %ca = icmp ne <32 x i8> %v, %a330  %cb = icmp ne <32 x i8> %v, %b331  %or = or <32 x i1> %ca, %cb332  %ext = sext <32 x i1> %or to <32 x i8>333  %and = and <32 x i8> %ext, splat (i8 4)334  store <32 x i8> %and, ptr %dst335  ret void336}337 338define void @and_or_not_combine_v16i16(ptr %pa, ptr %pb, ptr %pv, ptr %dst) nounwind {339; CHECK-LABEL: and_or_not_combine_v16i16:340; CHECK:       # %bb.0:341; CHECK-NEXT:    xvld $xr0, $a0, 0342; CHECK-NEXT:    xvld $xr1, $a2, 0343; CHECK-NEXT:    xvld $xr2, $a1, 0344; CHECK-NEXT:    xvseq.h $xr0, $xr1, $xr0345; CHECK-NEXT:    xvseq.h $xr1, $xr1, $xr2346; CHECK-NEXT:    xvand.v $xr0, $xr0, $xr1347; CHECK-NEXT:    xvrepli.h $xr1, 4348; CHECK-NEXT:    xvandn.v $xr0, $xr0, $xr1349; CHECK-NEXT:    xvst $xr0, $a3, 0350; CHECK-NEXT:    ret351  %a = load <16 x i16>, ptr %pa352  %b = load <16 x i16>, ptr %pb353  %v = load <16 x i16>, ptr %pv354  %ca = icmp ne <16 x i16> %v, %a355  %cb = icmp ne <16 x i16> %v, %b356  %or = or <16 x i1> %ca, %cb357  %ext = sext <16 x i1> %or to <16 x i16>358  %and = and <16 x i16> %ext, splat (i16 4)359  store <16 x i16> %and, ptr %dst360  ret void361}362 363define void @and_or_not_combine_v8i32(ptr %pa, ptr %pb, ptr %pv, ptr %dst) nounwind {364; CHECK-LABEL: and_or_not_combine_v8i32:365; CHECK:       # %bb.0:366; CHECK-NEXT:    xvld $xr0, $a0, 0367; CHECK-NEXT:    xvld $xr1, $a2, 0368; CHECK-NEXT:    xvld $xr2, $a1, 0369; CHECK-NEXT:    xvseq.w $xr0, $xr1, $xr0370; CHECK-NEXT:    xvseq.w $xr1, $xr1, $xr2371; CHECK-NEXT:    xvand.v $xr0, $xr0, $xr1372; CHECK-NEXT:    xvrepli.w $xr1, 4373; CHECK-NEXT:    xvandn.v $xr0, $xr0, $xr1374; CHECK-NEXT:    xvst $xr0, $a3, 0375; CHECK-NEXT:    ret376  %a = load <8 x i32>, ptr %pa377  %b = load <8 x i32>, ptr %pb378  %v = load <8 x i32>, ptr %pv379  %ca = icmp ne <8 x i32> %v, %a380  %cb = icmp ne <8 x i32> %v, %b381  %or = or <8 x i1> %ca, %cb382  %ext = sext <8 x i1> %or to <8 x i32>383  %and = and <8 x i32> %ext, splat (i32 4)384  store <8 x i32> %and, ptr %dst385  ret void386}387 388define void @and_or_not_combine_v4i64(ptr %pa, ptr %pb, ptr %pv, ptr %dst) nounwind {389; CHECK-LABEL: and_or_not_combine_v4i64:390; CHECK:       # %bb.0:391; CHECK-NEXT:    xvld $xr0, $a0, 0392; CHECK-NEXT:    xvld $xr1, $a2, 0393; CHECK-NEXT:    xvld $xr2, $a1, 0394; CHECK-NEXT:    xvseq.d $xr0, $xr1, $xr0395; CHECK-NEXT:    xvseq.d $xr1, $xr1, $xr2396; CHECK-NEXT:    xvand.v $xr0, $xr0, $xr1397; CHECK-NEXT:    xvrepli.d $xr1, 4398; CHECK-NEXT:    xvandn.v $xr0, $xr0, $xr1399; CHECK-NEXT:    xvst $xr0, $a3, 0400; CHECK-NEXT:    ret401  %a = load <4 x i64>, ptr %pa402  %b = load <4 x i64>, ptr %pb403  %v = load <4 x i64>, ptr %pv404  %ca = icmp ne <4 x i64> %v, %a405  %cb = icmp ne <4 x i64> %v, %b406  %or = or <4 x i1> %ca, %cb407  %ext = sext <4 x i1> %or to <4 x i64>408  %and = and <4 x i64> %ext, splat (i64 4)409  store <4 x i64> %and, ptr %dst410  ret void411}412 413define void @and_extract_subvector_not_combine_v32i8(ptr %pa, ptr %dst) nounwind {414; CHECK-LABEL: and_extract_subvector_not_combine_v32i8:415; CHECK:       # %bb.0:416; CHECK-NEXT:    xvld $xr0, $a0, 0417; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1418; CHECK-NEXT:    vnori.b $vr0, $vr0, 251419; CHECK-NEXT:    vst $vr0, $a1, 0420; CHECK-NEXT:    ret421  %a = load volatile <32 x i8>, ptr %pa422  %a.not = xor <32 x i8> %a, splat (i8 -1)423  %subv = shufflevector <32 x i8> %a.not, <32 x i8> poison,424                        <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23,425                                    i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>426  %and = and <16 x i8> %subv, splat (i8 4)427  store <16 x i8> %and, ptr %dst428  ret void429}430 431define void @and_extract_subvector_not_combine_v16i16(ptr %pa, ptr %dst) nounwind {432; CHECK-LABEL: and_extract_subvector_not_combine_v16i16:433; CHECK:       # %bb.0:434; CHECK-NEXT:    xvld $xr0, $a0, 0435; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1436; CHECK-NEXT:    vrepli.h $vr1, 4437; CHECK-NEXT:    vandn.v $vr0, $vr0, $vr1438; CHECK-NEXT:    vst $vr0, $a1, 0439; CHECK-NEXT:    ret440  %a = load volatile <16 x i16>, ptr %pa441  %a.not = xor <16 x i16> %a, splat (i16 -1)442  %subv = shufflevector <16 x i16> %a.not, <16 x i16> poison,443                        <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>444  %and = and <8 x i16> %subv, splat (i16 4)445  store <8 x i16> %and, ptr %dst446  ret void447}448 449define void @and_extract_subvector_not_combine_v8i32(ptr %pa, ptr %dst) nounwind {450; CHECK-LABEL: and_extract_subvector_not_combine_v8i32:451; CHECK:       # %bb.0:452; CHECK-NEXT:    xvld $xr0, $a0, 0453; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1454; CHECK-NEXT:    vrepli.w $vr1, 4455; CHECK-NEXT:    vandn.v $vr0, $vr0, $vr1456; CHECK-NEXT:    vst $vr0, $a1, 0457; CHECK-NEXT:    ret458  %a = load volatile <8 x i32>, ptr %pa459  %a.not = xor <8 x i32> %a, splat (i32 -1)460  %subv = shufflevector <8 x i32> %a.not, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>461  %and = and <4 x i32> %subv, splat (i32 4)462  store <4 x i32> %and, ptr %dst463  ret void464}465 466define void @and_extract_subvector_not_combine_v4i64(ptr %pa, ptr %dst) nounwind {467; CHECK-LABEL: and_extract_subvector_not_combine_v4i64:468; CHECK:       # %bb.0:469; CHECK-NEXT:    xvld $xr0, $a0, 0470; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1471; CHECK-NEXT:    vrepli.d $vr1, 4472; CHECK-NEXT:    vandn.v $vr0, $vr0, $vr1473; CHECK-NEXT:    vst $vr0, $a1, 0474; CHECK-NEXT:    ret475  %a = load volatile <4 x i64>, ptr %pa476  %a.not = xor <4 x i64> %a, splat (i64 -1)477  %subv = shufflevector <4 x i64> %a.not, <4 x i64> poison, <2 x i32> <i32 2, i32 3>478  %and = and <2 x i64> %subv, splat (i64 4)479  store <2 x i64> %and, ptr %dst480  ret void481}482