3897 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; Test use of VECTOR EVALUATE for combined boolean operations.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z17 | FileCheck %s5 6define <16 x i8> @eval0(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {7; CHECK-LABEL: eval0:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: vgbm %v24, 010; CHECK-NEXT: br %r1411entry:12 ret <16 x i8> zeroinitializer13}14 15define <16 x i8> @eval1(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {16; CHECK-LABEL: eval1:17; CHECK: # %bb.0: # %entry18; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 119; CHECK-NEXT: br %r1420entry:21 %and = and <16 x i8> %src2, %src122 %and1 = and <16 x i8> %and, %src323 ret <16 x i8> %and124}25 26define <16 x i8> @eval2(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {27; CHECK-LABEL: eval2:28; CHECK: # %bb.0: # %entry29; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 230; CHECK-NEXT: br %r1431entry:32 %and = and <16 x i8> %src2, %src133 %not = xor <16 x i8> %src3, splat(i8 -1)34 %and1 = and <16 x i8> %and, %not35 ret <16 x i8> %and136}37 38define <16 x i8> @eval3(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {39; CHECK-LABEL: eval3:40; CHECK: # %bb.0: # %entry41; CHECK-NEXT: vn %v24, %v26, %v2442; CHECK-NEXT: br %r1443entry:44 %and = and <16 x i8> %src2, %src145 ret <16 x i8> %and46}47 48define <16 x i8> @eval4(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {49; CHECK-LABEL: eval4:50; CHECK: # %bb.0: # %entry51; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 252; CHECK-NEXT: br %r1453entry:54 %not = xor <16 x i8> %src2, splat(i8 -1)55 %and = and <16 x i8> %not, %src156 %and1 = and <16 x i8> %and, %src357 ret <16 x i8> %and158}59 60define <16 x i8> @eval5(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {61; CHECK-LABEL: eval5:62; CHECK: # %bb.0: # %entry63; CHECK-NEXT: vn %v24, %v28, %v2464; CHECK-NEXT: br %r1465entry:66 %or4 = and <16 x i8> %src3, %src167 ret <16 x i8> %or468}69 70define <16 x i8> @eval6(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {71; CHECK-LABEL: eval6:72; CHECK: # %bb.0: # %entry73; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 674; CHECK-NEXT: br %r1475entry:76 %0 = xor <16 x i8> %src3, %src277 %or5 = and <16 x i8> %0, %src178 ret <16 x i8> %or579}80 81define <16 x i8> @eval7(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {82; CHECK-LABEL: eval7:83; CHECK: # %bb.0: # %entry84; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 785; CHECK-NEXT: br %r1486entry:87 %and118 = or <16 x i8> %src3, %src288 %or8 = and <16 x i8> %and118, %src189 ret <16 x i8> %or890}91 92define <16 x i8> @eval8(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {93; CHECK-LABEL: eval8:94; CHECK: # %bb.0: # %entry95; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 896; CHECK-NEXT: br %r1497entry:98 %0 = or <16 x i8> %src3, %src299 %1 = xor <16 x i8> %0, splat(i8 -1)100 %and2 = and <16 x i8> %1, %src1101 ret <16 x i8> %and2102}103 104define <16 x i8> @eval9(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {105; CHECK-LABEL: eval9:106; CHECK: # %bb.0: # %entry107; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 9108; CHECK-NEXT: br %r14109entry:110 %0 = xor <16 x i8> %src2, %src3111 %1 = xor <16 x i8> %0, splat(i8 -1)112 %or5 = and <16 x i8> %1, %src1113 ret <16 x i8> %or5114}115 116define <16 x i8> @eval10(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {117; CHECK-LABEL: eval10:118; CHECK: # %bb.0: # %entry119; CHECK-NEXT: vnc %v24, %v24, %v28120; CHECK-NEXT: br %r14121entry:122 %not1 = xor <16 x i8> %src3, splat(i8 -1)123 %or6 = and <16 x i8> %not1, %src1124 ret <16 x i8> %or6125}126 127define <16 x i8> @eval11(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {128; CHECK-LABEL: eval11:129; CHECK: # %bb.0: # %entry130; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 11131; CHECK-NEXT: br %r14132entry:133 %src3.not = xor <16 x i8> %src3, splat(i8 -1)134 %and219 = or <16 x i8> %src3.not, %src2135 %or9 = and <16 x i8> %and219, %src1136 ret <16 x i8> %or9137}138 139define <16 x i8> @eval12(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {140; CHECK-LABEL: eval12:141; CHECK: # %bb.0: # %entry142; CHECK-NEXT: vnc %v24, %v24, %v26143; CHECK-NEXT: br %r14144entry:145 %not = xor <16 x i8> %src2, splat(i8 -1)146 %and = and <16 x i8> %not, %src1147 ret <16 x i8> %and148}149 150define <16 x i8> @eval13(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {151; CHECK-LABEL: eval13:152; CHECK: # %bb.0: # %entry153; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 11154; CHECK-NEXT: br %r14155entry:156 %not = xor <16 x i8> %src2, splat(i8 -1)157 %and19 = or <16 x i8> %not, %src3158 %or9 = and <16 x i8> %and19, %src1159 ret <16 x i8> %or9160}161 162define <16 x i8> @eval14(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {163; CHECK-LABEL: eval14:164; CHECK: # %bb.0: # %entry165; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 14166; CHECK-NEXT: br %r14167entry:168 %and20.demorgan = and <16 x i8> %src3, %src2169 %and20 = xor <16 x i8> %and20.demorgan, splat(i8 -1)170 %or10 = and <16 x i8> %and20, %src1171 ret <16 x i8> %or10172}173 174define <16 x i8> @eval15(<16 x i8> returned %src1, <16 x i8> %src2, <16 x i8> %src3) {175; CHECK-LABEL: eval15:176; CHECK: # %bb.0: # %entry177; CHECK-NEXT: br %r14178entry:179 ret <16 x i8> %src1180}181 182define <16 x i8> @eval16(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {183; CHECK-LABEL: eval16:184; CHECK: # %bb.0: # %entry185; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 2186; CHECK-NEXT: br %r14187entry:188 %not = xor <16 x i8> %src1, splat(i8 -1)189 %and = and <16 x i8> %not, %src2190 %and1 = and <16 x i8> %and, %src3191 ret <16 x i8> %and1192}193 194define <16 x i8> @eval17(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {195; CHECK-LABEL: eval17:196; CHECK: # %bb.0: # %entry197; CHECK-NEXT: vn %v24, %v28, %v26198; CHECK-NEXT: br %r14199entry:200 %or4 = and <16 x i8> %src3, %src2201 ret <16 x i8> %or4202}203 204define <16 x i8> @eval18(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {205; CHECK-LABEL: eval18:206; CHECK: # %bb.0: # %entry207; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 6208; CHECK-NEXT: br %r14209entry:210 %0 = xor <16 x i8> %src3, %src1211 %or5 = and <16 x i8> %0, %src2212 ret <16 x i8> %or5213}214 215define <16 x i8> @eval19(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {216; CHECK-LABEL: eval19:217; CHECK: # %bb.0: # %entry218; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 7219; CHECK-NEXT: br %r14220entry:221 %and118 = or <16 x i8> %src3, %src1222 %or8 = and <16 x i8> %and118, %src2223 ret <16 x i8> %or8224}225 226define <16 x i8> @eval20(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {227; CHECK-LABEL: eval20:228; CHECK: # %bb.0: # %entry229; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 6230; CHECK-NEXT: br %r14231entry:232 %0 = xor <16 x i8> %src2, %src1233 %or5 = and <16 x i8> %0, %src3234 ret <16 x i8> %or5235}236 237define <16 x i8> @eval21(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {238; CHECK-LABEL: eval21:239; CHECK: # %bb.0: # %entry240; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 7241; CHECK-NEXT: br %r14242entry:243 %or518 = or <16 x i8> %src2, %src1244 %or8 = and <16 x i8> %or518, %src3245 ret <16 x i8> %or8246}247 248define <16 x i8> @eval22(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {249; CHECK-LABEL: eval22:250; CHECK: # %bb.0: # %entry251; CHECK-NEXT: vx %v0, %v26, %v24252; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2253; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31254; CHECK-NEXT: br %r14255entry:256 %0 = xor <16 x i8> %src2, %src1257 %or5 = and <16 x i8> %0, %src3258 %not7 = xor <16 x i8> %src3, splat(i8 -1)259 %1 = and <16 x i8> %not7, %src1260 %and8 = and <16 x i8> %1, %src2261 %or9 = or <16 x i8> %and8, %or5262 ret <16 x i8> %or9263}264 265define <16 x i8> @eval23(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {266; CHECK-LABEL: eval23:267; CHECK: # %bb.0: # %entry268; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 6269; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 31270; CHECK-NEXT: br %r14271entry:272 %0 = xor <16 x i8> %src2, %src1273 %or5 = and <16 x i8> %0, %src3274 %and6 = and <16 x i8> %src2, %src1275 %or12 = or <16 x i8> %or5, %and6276 ret <16 x i8> %or12277}278 279define <16 x i8> @eval24(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {280; CHECK-LABEL: eval24:281; CHECK: # %bb.0: # %entry282; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 2283; CHECK-NEXT: vo %v1, %v28, %v26284; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47285; CHECK-NEXT: br %r14286entry:287 %not = xor <16 x i8> %src1, splat(i8 -1)288 %and = and <16 x i8> %not, %src2289 %and1 = and <16 x i8> %and, %src3290 %0 = or <16 x i8> %src3, %src2291 %1 = xor <16 x i8> %0, splat(i8 -1)292 %and5 = and <16 x i8> %1, %src1293 %or6 = or <16 x i8> %and5, %and1294 ret <16 x i8> %or6295}296 297define <16 x i8> @eval25(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {298; CHECK-LABEL: eval25:299; CHECK: # %bb.0: # %entry300; CHECK-NEXT: vo %v0, %v28, %v26301; CHECK-NEXT: vn %v1, %v28, %v26302; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 47303; CHECK-NEXT: br %r14304entry:305 %0 = or <16 x i8> %src3, %src2306 %1 = xor <16 x i8> %0, splat(i8 -1)307 %and5 = and <16 x i8> %1, %src1308 %2 = and <16 x i8> %src3, %src2309 %or9 = or <16 x i8> %and5, %2310 ret <16 x i8> %or9311}312 313define <16 x i8> @eval26(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {314; CHECK-LABEL: eval26:315; CHECK: # %bb.0: # %entry316; CHECK-NEXT: vnc %v0, %v26, %v24317; CHECK-NEXT: vsel %v24, %v0, %v24, %v28318; CHECK-NEXT: br %r14319entry:320 %not = xor <16 x i8> %src1, splat(i8 -1)321 %and = and <16 x i8> %not, %src2322 %and1 = and <16 x i8> %and, %src3323 %not4 = xor <16 x i8> %src3, splat(i8 -1)324 %0 = and <16 x i8> %not4, %src1325 %or10 = or <16 x i8> %and1, %0326 ret <16 x i8> %or10327}328 329define <16 x i8> @eval27(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {330; CHECK-LABEL: eval27:331; CHECK: # %bb.0: # %entry332; CHECK-NEXT: vnc %v0, %v26, %v24333; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 11334; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31335; CHECK-NEXT: br %r14336entry:337 %not = xor <16 x i8> %src1, splat(i8 -1)338 %and = and <16 x i8> %not, %src2339 %and1 = and <16 x i8> %and, %src3340 %src3.not = xor <16 x i8> %src3, splat(i8 -1)341 %and527 = or <16 x i8> %src3.not, %src2342 %0 = and <16 x i8> %and527, %src1343 %or13 = or <16 x i8> %0, %and1344 ret <16 x i8> %or13345}346 347define <16 x i8> @eval28(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {348; CHECK-LABEL: eval28:349; CHECK: # %bb.0: # %entry350; CHECK-NEXT: vnc %v0, %v28, %v24351; CHECK-NEXT: vsel %v24, %v0, %v24, %v26352; CHECK-NEXT: br %r14353entry:354 %not = xor <16 x i8> %src1, splat(i8 -1)355 %0 = and <16 x i8> %not, %src3356 %and1 = and <16 x i8> %0, %src2357 %not2 = xor <16 x i8> %src2, splat(i8 -1)358 %and3 = and <16 x i8> %not2, %src1359 %or10 = or <16 x i8> %and1, %and3360 ret <16 x i8> %or10361}362 363define <16 x i8> @eval29(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {364; CHECK-LABEL: eval29:365; CHECK: # %bb.0: # %entry366; CHECK-NEXT: vsel %v24, %v28, %v24, %v26367; CHECK-NEXT: br %r14368entry:369 %not2 = xor <16 x i8> %src2, splat(i8 -1)370 %and3 = and <16 x i8> %not2, %src1371 %0 = and <16 x i8> %src3, %src2372 %or13 = or <16 x i8> %0, %and3373 ret <16 x i8> %or13374}375 376define <16 x i8> @eval30(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {377; CHECK-LABEL: eval30:378; CHECK: # %bb.0: # %entry379; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 2380; CHECK-NEXT: vn %v1, %v28, %v26381; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47382; CHECK-NEXT: br %r14383entry:384 %not = xor <16 x i8> %src1, splat(i8 -1)385 %0 = and <16 x i8> %not, %src2386 %and1 = and <16 x i8> %0, %src3387 %and328.demorgan = and <16 x i8> %src3, %src2388 %and328 = xor <16 x i8> %and328.demorgan, splat(i8 -1)389 %1 = and <16 x i8> %and328, %src1390 %or14 = or <16 x i8> %1, %and1391 ret <16 x i8> %or14392}393 394define <16 x i8> @eval31(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {395; CHECK-LABEL: eval31:396; CHECK: # %bb.0: # %entry397; CHECK-NEXT: vnc %v0, %v26, %v24398; CHECK-NEXT: veval %v24, %v24, %v0, %v28, 31399; CHECK-NEXT: br %r14400entry:401 %not = xor <16 x i8> %src1, splat(i8 -1)402 %and = and <16 x i8> %not, %src2403 %and1 = and <16 x i8> %and, %src3404 %or17 = or <16 x i8> %and1, %src1405 ret <16 x i8> %or17406}407 408define <16 x i8> @eval32(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {409; CHECK-LABEL: eval32:410; CHECK: # %bb.0: # %entry411; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 8412; CHECK-NEXT: br %r14413entry:414 %0 = or <16 x i8> %src3, %src1415 %1 = xor <16 x i8> %0, splat(i8 -1)416 %and2 = and <16 x i8> %1, %src2417 ret <16 x i8> %and2418}419 420define <16 x i8> @eval33(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {421; CHECK-LABEL: eval33:422; CHECK: # %bb.0: # %entry423; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 9424; CHECK-NEXT: br %r14425entry:426 %0 = xor <16 x i8> %src1, %src3427 %1 = xor <16 x i8> %0, splat(i8 -1)428 %or5 = and <16 x i8> %1, %src2429 ret <16 x i8> %or5430}431 432define <16 x i8> @eval34(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {433; CHECK-LABEL: eval34:434; CHECK: # %bb.0: # %entry435; CHECK-NEXT: vnc %v24, %v26, %v28436; CHECK-NEXT: br %r14437entry:438 %not1 = xor <16 x i8> %src3, splat(i8 -1)439 %or6 = and <16 x i8> %not1, %src2440 ret <16 x i8> %or6441}442 443define <16 x i8> @eval35(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {444; CHECK-LABEL: eval35:445; CHECK: # %bb.0: # %entry446; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 11447; CHECK-NEXT: br %r14448entry:449 %src3.not = xor <16 x i8> %src3, splat(i8 -1)450 %and219 = or <16 x i8> %src3.not, %src1451 %or9 = and <16 x i8> %and219, %src2452 ret <16 x i8> %or9453}454 455define <16 x i8> @eval36(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {456; CHECK-LABEL: eval36:457; CHECK: # %bb.0: # %entry458; CHECK-NEXT: vo %v0, %v28, %v24459; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2460; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47461; CHECK-NEXT: br %r14462entry:463 %0 = or <16 x i8> %src3, %src1464 %1 = xor <16 x i8> %0, splat(i8 -1)465 %and2 = and <16 x i8> %1, %src2466 %not3 = xor <16 x i8> %src2, splat(i8 -1)467 %and4 = and <16 x i8> %not3, %src1468 %and5 = and <16 x i8> %and4, %src3469 %or6 = or <16 x i8> %and2, %and5470 ret <16 x i8> %or6471}472 473define <16 x i8> @eval37(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {474; CHECK-LABEL: eval37:475; CHECK: # %bb.0: # %entry476; CHECK-NEXT: vo %v0, %v28, %v24477; CHECK-NEXT: vn %v1, %v28, %v24478; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47479; CHECK-NEXT: br %r14480entry:481 %0 = or <16 x i8> %src3, %src1482 %1 = xor <16 x i8> %0, splat(i8 -1)483 %and2 = and <16 x i8> %1, %src2484 %2 = and <16 x i8> %src3, %src1485 %or9 = or <16 x i8> %and2, %2486 ret <16 x i8> %or9487}488 489define <16 x i8> @eval38(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {490; CHECK-LABEL: eval38:491; CHECK: # %bb.0: # %entry492; CHECK-NEXT: vnc %v0, %v24, %v26493; CHECK-NEXT: vsel %v24, %v0, %v26, %v28494; CHECK-NEXT: br %r14495entry:496 %not1 = xor <16 x i8> %src3, splat(i8 -1)497 %not3 = xor <16 x i8> %src2, splat(i8 -1)498 %and4 = and <16 x i8> %not3, %src1499 %and5 = and <16 x i8> %and4, %src3500 %0 = and <16 x i8> %not1, %src2501 %or10 = or <16 x i8> %0, %and5502 ret <16 x i8> %or10503}504 505define <16 x i8> @eval39(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {506; CHECK-LABEL: eval39:507; CHECK: # %bb.0: # %entry508; CHECK-NEXT: vnc %v0, %v24, %v26509; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 11510; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31511; CHECK-NEXT: br %r14512entry:513 %not3 = xor <16 x i8> %src2, splat(i8 -1)514 %and4 = and <16 x i8> %not3, %src1515 %and5 = and <16 x i8> %and4, %src3516 %src3.not = xor <16 x i8> %src3, splat(i8 -1)517 %and227 = or <16 x i8> %src3.not, %src1518 %0 = and <16 x i8> %and227, %src2519 %or13 = or <16 x i8> %0, %and5520 ret <16 x i8> %or13521}522 523define <16 x i8> @eval40(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {524; CHECK-LABEL: eval40:525; CHECK: # %bb.0: # %entry526; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 40527; CHECK-NEXT: br %r14528entry:529 %0 = xor <16 x i8> %src2, %src1530 %1 = xor <16 x i8> %src3, splat(i8 -1)531 %or7 = and <16 x i8> %0, %1532 ret <16 x i8> %or7533}534 535define <16 x i8> @eval41(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {536; CHECK-LABEL: eval41:537; CHECK: # %bb.0: # %entry538; CHECK-NEXT: vx %v0, %v26, %v24539; CHECK-NEXT: vn %v1, %v26, %v24540; CHECK-NEXT: vsel %v24, %v1, %v0, %v28541; CHECK-NEXT: br %r14542entry:543 %0 = xor <16 x i8> %src2, %src1544 %1 = xor <16 x i8> %src3, splat(i8 -1)545 %or7 = and <16 x i8> %0, %1546 %and8 = and <16 x i8> %src2, %src1547 %and9 = and <16 x i8> %and8, %src3548 %or10 = or <16 x i8> %or7, %and9549 ret <16 x i8> %or10550}551 552define <16 x i8> @eval42(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {553; CHECK-LABEL: eval42:554; CHECK: # %bb.0: # %entry555; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 42556; CHECK-NEXT: br %r14557entry:558 %not1 = xor <16 x i8> %src3, splat(i8 -1)559 %and1021 = or <16 x i8> %src2, %src1560 %or11 = and <16 x i8> %and1021, %not1561 ret <16 x i8> %or11562}563 564define <16 x i8> @eval43(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {565; CHECK-LABEL: eval43:566; CHECK: # %bb.0: # %entry567; CHECK-NEXT: vx %v0, %v26, %v24568; CHECK-NEXT: vn %v1, %v26, %v24569; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 47570; CHECK-NEXT: br %r14571entry:572 %0 = xor <16 x i8> %src2, %src1573 %1 = xor <16 x i8> %src3, splat(i8 -1)574 %or7 = and <16 x i8> %0, %1575 %and8 = and <16 x i8> %src2, %src1576 %or14 = or <16 x i8> %or7, %and8577 ret <16 x i8> %or14578}579 580define <16 x i8> @eval44(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {581; CHECK-LABEL: eval44:582; CHECK: # %bb.0: # %entry583; CHECK-NEXT: vno %v0, %v28, %v24584; CHECK-NEXT: vsel %v24, %v0, %v24, %v26585; CHECK-NEXT: br %r14586entry:587 %0 = or <16 x i8> %src3, %src1588 %1 = xor <16 x i8> %0, splat(i8 -1)589 %and2 = and <16 x i8> %1, %src2590 %not3 = xor <16 x i8> %src2, splat(i8 -1)591 %and4 = and <16 x i8> %not3, %src1592 %or11 = or <16 x i8> %and2, %and4593 ret <16 x i8> %or11594}595 596define <16 x i8> @eval45(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {597; CHECK-LABEL: eval45:598; CHECK: # %bb.0: # %entry599; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1600; CHECK-NEXT: vo %v0, %v28, %v24601; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47602; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47603; CHECK-NEXT: br %r14604entry:605 %0 = or <16 x i8> %src3, %src1606 %1 = xor <16 x i8> %0, splat(i8 -1)607 %and2 = and <16 x i8> %1, %src2608 %not3 = xor <16 x i8> %src2, splat(i8 -1)609 %and4 = and <16 x i8> %not3, %src1610 %and12 = and <16 x i8> %src2, %src1611 %and13 = and <16 x i8> %and12, %src3612 %or11 = or <16 x i8> %and13, %and4613 %or14 = or <16 x i8> %or11, %and2614 ret <16 x i8> %or14615}616 617define <16 x i8> @eval46(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {618; CHECK-LABEL: eval46:619; CHECK: # %bb.0: # %entry620; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 8621; CHECK-NEXT: vn %v1, %v28, %v26622; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47623; CHECK-NEXT: br %r14624entry:625 %0 = or <16 x i8> %src3, %src1626 %1 = xor <16 x i8> %0, splat(i8 -1)627 %and2 = and <16 x i8> %1, %src2628 %and429.demorgan = and <16 x i8> %src3, %src2629 %and429 = xor <16 x i8> %and429.demorgan, splat(i8 -1)630 %2 = and <16 x i8> %and429, %src1631 %or15 = or <16 x i8> %and2, %2632 ret <16 x i8> %or15633}634 635define <16 x i8> @eval47(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {636; CHECK-LABEL: eval47:637; CHECK: # %bb.0: # %entry638; CHECK-NEXT: vo %v0, %v28, %v24639; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 47640; CHECK-NEXT: br %r14641entry:642 %0 = or <16 x i8> %src3, %src1643 %1 = xor <16 x i8> %0, splat(i8 -1)644 %and2 = and <16 x i8> %1, %src2645 %or18 = or <16 x i8> %and2, %src1646 ret <16 x i8> %or18647}648 649define <16 x i8> @eval48(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {650; CHECK-LABEL: eval48:651; CHECK: # %bb.0: # %entry652; CHECK-NEXT: vnc %v24, %v26, %v24653; CHECK-NEXT: br %r14654entry:655 %not = xor <16 x i8> %src1, splat(i8 -1)656 %and = and <16 x i8> %not, %src2657 ret <16 x i8> %and658}659 660define <16 x i8> @eval49(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {661; CHECK-LABEL: eval49:662; CHECK: # %bb.0: # %entry663; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 11664; CHECK-NEXT: br %r14665entry:666 %not = xor <16 x i8> %src1, splat(i8 -1)667 %and819 = or <16 x i8> %not, %src3668 %or9 = and <16 x i8> %and819, %src2669 ret <16 x i8> %or9670}671 672define <16 x i8> @eval50(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {673; CHECK-LABEL: eval50:674; CHECK: # %bb.0: # %entry675; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 14676; CHECK-NEXT: br %r14677entry:678 %and920.demorgan = and <16 x i8> %src3, %src1679 %and920 = xor <16 x i8> %and920.demorgan, splat(i8 -1)680 %or10 = and <16 x i8> %and920, %src2681 ret <16 x i8> %or10682}683 684define <16 x i8> @eval51(<16 x i8> %src1, <16 x i8> returned %src2, <16 x i8> %src3) {685; CHECK-LABEL: eval51:686; CHECK: # %bb.0: # %entry687; CHECK-NEXT: vlr %v24, %v26688; CHECK-NEXT: br %r14689entry:690 ret <16 x i8> %src2691}692 693define <16 x i8> @eval52(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {694; CHECK-LABEL: eval52:695; CHECK: # %bb.0: # %entry696; CHECK-NEXT: vnc %v0, %v28, %v26697; CHECK-NEXT: vsel %v24, %v0, %v26, %v24698; CHECK-NEXT: br %r14699entry:700 %not = xor <16 x i8> %src1, splat(i8 -1)701 %and = and <16 x i8> %not, %src2702 %not7 = xor <16 x i8> %src2, splat(i8 -1)703 %0 = and <16 x i8> %not7, %src3704 %and9 = and <16 x i8> %0, %src1705 %or10 = or <16 x i8> %and9, %and706 ret <16 x i8> %or10707}708 709define <16 x i8> @eval53(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {710; CHECK-LABEL: eval53:711; CHECK: # %bb.0: # %entry712; CHECK-NEXT: vsel %v24, %v28, %v26, %v24713; CHECK-NEXT: br %r14714entry:715 %not = xor <16 x i8> %src1, splat(i8 -1)716 %and = and <16 x i8> %not, %src2717 %0 = and <16 x i8> %src3, %src1718 %or13 = or <16 x i8> %0, %and719 ret <16 x i8> %or13720}721 722define <16 x i8> @eval54(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {723; CHECK-LABEL: eval54:724; CHECK: # %bb.0: # %entry725; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 2726; CHECK-NEXT: vn %v1, %v28, %v24727; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47728; CHECK-NEXT: br %r14729entry:730 %not7 = xor <16 x i8> %src2, splat(i8 -1)731 %and8 = and <16 x i8> %not7, %src1732 %and9 = and <16 x i8> %and8, %src3733 %and28.demorgan = and <16 x i8> %src3, %src1734 %and28 = xor <16 x i8> %and28.demorgan, splat(i8 -1)735 %0 = and <16 x i8> %and28, %src2736 %or14 = or <16 x i8> %and9, %0737 ret <16 x i8> %or14738}739 740define <16 x i8> @eval55(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {741; CHECK-LABEL: eval55:742; CHECK: # %bb.0: # %entry743; CHECK-NEXT: vnc %v0, %v24, %v26744; CHECK-NEXT: veval %v24, %v26, %v0, %v28, 31745; CHECK-NEXT: br %r14746entry:747 %not7 = xor <16 x i8> %src2, splat(i8 -1)748 %and8 = and <16 x i8> %not7, %src1749 %and9 = and <16 x i8> %and8, %src3750 %or17 = or <16 x i8> %and9, %src2751 ret <16 x i8> %or17752}753 754define <16 x i8> @eval56(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {755; CHECK-LABEL: eval56:756; CHECK: # %bb.0: # %entry757; CHECK-NEXT: vno %v0, %v28, %v26758; CHECK-NEXT: vsel %v24, %v0, %v26, %v24759; CHECK-NEXT: br %r14760entry:761 %not = xor <16 x i8> %src1, splat(i8 -1)762 %and = and <16 x i8> %not, %src2763 %0 = or <16 x i8> %src3, %src2764 %1 = xor <16 x i8> %0, splat(i8 -1)765 %and10 = and <16 x i8> %1, %src1766 %or11 = or <16 x i8> %and10, %and767 ret <16 x i8> %or11768}769 770define <16 x i8> @eval57(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {771; CHECK-LABEL: eval57:772; CHECK: # %bb.0: # %entry773; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1774; CHECK-NEXT: vo %v0, %v28, %v26775; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 47776; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 47777; CHECK-NEXT: br %r14778entry:779 %not = xor <16 x i8> %src1, splat(i8 -1)780 %and = and <16 x i8> %not, %src2781 %0 = or <16 x i8> %src3, %src2782 %1 = xor <16 x i8> %0, splat(i8 -1)783 %and10 = and <16 x i8> %1, %src1784 %and12 = and <16 x i8> %src2, %src1785 %and13 = and <16 x i8> %and12, %src3786 %or11 = or <16 x i8> %and13, %and787 %or14 = or <16 x i8> %or11, %and10788 ret <16 x i8> %or14789}790 791define <16 x i8> @eval58(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {792; CHECK-LABEL: eval58:793; CHECK: # %bb.0: # %entry794; CHECK-NEXT: vno %v0, %v28, %v28795; CHECK-NEXT: vsel %v24, %v0, %v26, %v24796; CHECK-NEXT: br %r14797entry:798 %not = xor <16 x i8> %src1, splat(i8 -1)799 %and = and <16 x i8> %not, %src2800 %not1 = xor <16 x i8> %src3, splat(i8 -1)801 %0 = and <16 x i8> %not1, %src1802 %or15 = or <16 x i8> %0, %and803 ret <16 x i8> %or15804}805 806define <16 x i8> @eval59(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {807; CHECK-LABEL: eval59:808; CHECK: # %bb.0: # %entry809; CHECK-NEXT: voc %v0, %v26, %v28810; CHECK-NEXT: vsel %v24, %v0, %v26, %v24811; CHECK-NEXT: br %r14812entry:813 %not = xor <16 x i8> %src1, splat(i8 -1)814 %and = and <16 x i8> %not, %src2815 %src3.not = xor <16 x i8> %src3, splat(i8 -1)816 %and1036 = or <16 x i8> %src3.not, %src2817 %0 = and <16 x i8> %and1036, %src1818 %or18 = or <16 x i8> %0, %and819 ret <16 x i8> %or18820}821 822define <16 x i8> @eval60(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {823; CHECK-LABEL: eval60:824; CHECK: # %bb.0: # %entry825; CHECK-NEXT: vx %v24, %v26, %v24826; CHECK-NEXT: br %r14827entry:828 %or15 = xor <16 x i8> %src2, %src1829 ret <16 x i8> %or15830}831 832define <16 x i8> @eval61(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {833; CHECK-LABEL: eval61:834; CHECK: # %bb.0: # %entry835; CHECK-NEXT: vn %v0, %v24, %v28836; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 61837; CHECK-NEXT: br %r14838entry:839 %or15 = xor <16 x i8> %src2, %src1840 %0 = and <16 x i8> %src1, %src3841 %and17 = and <16 x i8> %0, %src2842 %or18 = or <16 x i8> %and17, %or15843 ret <16 x i8> %or18844}845 846define <16 x i8> @eval62(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {847; CHECK-LABEL: eval62:848; CHECK: # %bb.0: # %entry849; CHECK-NEXT: vnc %v0, %v24, %v28850; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 61851; CHECK-NEXT: br %r14852entry:853 %not1 = xor <16 x i8> %src3, splat(i8 -1)854 %or15 = xor <16 x i8> %src2, %src1855 %0 = and <16 x i8> %not1, %src1856 %and18 = and <16 x i8> %0, %src2857 %or19 = or <16 x i8> %and18, %or15858 ret <16 x i8> %or19859}860 861define <16 x i8> @eval63(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {862; CHECK-LABEL: eval63:863; CHECK: # %bb.0: # %entry864; CHECK-NEXT: vo %v24, %v26, %v24865; CHECK-NEXT: br %r14866entry:867 %or22 = or <16 x i8> %src2, %src1868 ret <16 x i8> %or22869}870 871define <16 x i8> @eval64(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {872; CHECK-LABEL: eval64:873; CHECK: # %bb.0: # %entry874; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 8875; CHECK-NEXT: br %r14876entry:877 %and.demorgan = or <16 x i8> %src2, %src1878 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)879 %and2 = and <16 x i8> %and, %src3880 ret <16 x i8> %and2881}882 883define <16 x i8> @eval65(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {884; CHECK-LABEL: eval65:885; CHECK: # %bb.0: # %entry886; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 9887; CHECK-NEXT: br %r14888entry:889 %0 = xor <16 x i8> %src1, %src2890 %1 = xor <16 x i8> %0, splat(i8 -1)891 %or5 = and <16 x i8> %1, %src3892 ret <16 x i8> %or5893}894 895define <16 x i8> @eval66(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {896; CHECK-LABEL: eval66:897; CHECK: # %bb.0: # %entry898; CHECK-NEXT: vo %v0, %v26, %v24899; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2900; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47901; CHECK-NEXT: br %r14902entry:903 %and.demorgan = or <16 x i8> %src2, %src1904 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)905 %and2 = and <16 x i8> %and, %src3906 %not4 = xor <16 x i8> %src3, splat(i8 -1)907 %0 = and <16 x i8> %not4, %src1908 %and5 = and <16 x i8> %0, %src2909 %or6 = or <16 x i8> %and5, %and2910 ret <16 x i8> %or6911}912 913define <16 x i8> @eval67(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {914; CHECK-LABEL: eval67:915; CHECK: # %bb.0: # %entry916; CHECK-NEXT: vo %v0, %v26, %v24917; CHECK-NEXT: vn %v1, %v26, %v24918; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47919; CHECK-NEXT: br %r14920entry:921 %and.demorgan = or <16 x i8> %src2, %src1922 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)923 %and2 = and <16 x i8> %and, %src3924 %and3 = and <16 x i8> %src2, %src1925 %or9 = or <16 x i8> %and2, %and3926 ret <16 x i8> %or9927}928 929define <16 x i8> @eval68(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {930; CHECK-LABEL: eval68:931; CHECK: # %bb.0: # %entry932; CHECK-NEXT: vnc %v24, %v28, %v26933; CHECK-NEXT: br %r14934entry:935 %not1 = xor <16 x i8> %src2, splat(i8 -1)936 %or6 = and <16 x i8> %not1, %src3937 ret <16 x i8> %or6938}939 940define <16 x i8> @eval69(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {941; CHECK-LABEL: eval69:942; CHECK: # %bb.0: # %entry943; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 11944; CHECK-NEXT: br %r14945entry:946 %not1 = xor <16 x i8> %src2, splat(i8 -1)947 %or620 = or <16 x i8> %not1, %src1948 %or9 = and <16 x i8> %or620, %src3949 ret <16 x i8> %or9950}951 952define <16 x i8> @eval70(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {953; CHECK-LABEL: eval70:954; CHECK: # %bb.0: # %entry955; CHECK-NEXT: vnc %v0, %v24, %v28956; CHECK-NEXT: vsel %v24, %v0, %v28, %v26957; CHECK-NEXT: br %r14958entry:959 %not1 = xor <16 x i8> %src2, splat(i8 -1)960 %or6 = and <16 x i8> %not1, %src3961 %not8 = xor <16 x i8> %src3, splat(i8 -1)962 %0 = and <16 x i8> %not8, %src1963 %and9 = and <16 x i8> %0, %src2964 %or10 = or <16 x i8> %and9, %or6965 ret <16 x i8> %or10966}967 968define <16 x i8> @eval71(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {969; CHECK-LABEL: eval71:970; CHECK: # %bb.0: # %entry971; CHECK-NEXT: vsel %v24, %v24, %v28, %v26972; CHECK-NEXT: br %r14973entry:974 %not1 = xor <16 x i8> %src2, splat(i8 -1)975 %or6 = and <16 x i8> %not1, %src3976 %and7 = and <16 x i8> %src2, %src1977 %or13 = or <16 x i8> %or6, %and7978 ret <16 x i8> %or13979}980 981define <16 x i8> @eval72(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {982; CHECK-LABEL: eval72:983; CHECK: # %bb.0: # %entry984; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 40985; CHECK-NEXT: br %r14986entry:987 %0 = xor <16 x i8> %src3, %src1988 %1 = xor <16 x i8> %src2, splat(i8 -1)989 %or7 = and <16 x i8> %0, %1990 ret <16 x i8> %or7991}992 993define <16 x i8> @eval73(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {994; CHECK-LABEL: eval73:995; CHECK: # %bb.0: # %entry996; CHECK-NEXT: vx %v0, %v28, %v24997; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1998; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 47999; CHECK-NEXT: br %r141000entry:1001 %0 = xor <16 x i8> %src3, %src11002 %1 = xor <16 x i8> %src2, splat(i8 -1)1003 %or7 = and <16 x i8> %0, %11004 %and8 = and <16 x i8> %src2, %src11005 %and9 = and <16 x i8> %and8, %src31006 %or10 = or <16 x i8> %or7, %and91007 ret <16 x i8> %or101008}1009 1010define <16 x i8> @eval74(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1011; CHECK-LABEL: eval74:1012; CHECK: # %bb.0: # %entry1013; CHECK-NEXT: vx %v0, %v28, %v241014; CHECK-NEXT: vnc %v1, %v24, %v281015; CHECK-NEXT: vsel %v24, %v1, %v0, %v261016; CHECK-NEXT: br %r141017entry:1018 %not5 = xor <16 x i8> %src3, splat(i8 -1)1019 %0 = xor <16 x i8> %src3, %src11020 %1 = xor <16 x i8> %src2, splat(i8 -1)1021 %or7 = and <16 x i8> %0, %11022 %2 = and <16 x i8> %not5, %src11023 %and10 = and <16 x i8> %2, %src21024 %or11 = or <16 x i8> %or7, %and101025 ret <16 x i8> %or111026}1027 1028define <16 x i8> @eval75(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1029; CHECK-LABEL: eval75:1030; CHECK: # %bb.0: # %entry1031; CHECK-NEXT: vx %v0, %v28, %v241032; CHECK-NEXT: vsel %v24, %v24, %v0, %v261033; CHECK-NEXT: br %r141034entry:1035 %0 = xor <16 x i8> %src3, %src11036 %1 = xor <16 x i8> %src2, splat(i8 -1)1037 %or7 = and <16 x i8> %0, %11038 %and8 = and <16 x i8> %src2, %src11039 %or14 = or <16 x i8> %or7, %and81040 ret <16 x i8> %or141041}1042 1043define <16 x i8> @eval76(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1044; CHECK-LABEL: eval76:1045; CHECK: # %bb.0: # %entry1046; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 81047; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 471048; CHECK-NEXT: br %r141049entry:1050 %not1 = xor <16 x i8> %src2, splat(i8 -1)1051 %0 = or <16 x i8> %src2, %src11052 %1 = xor <16 x i8> %0, splat(i8 -1)1053 %and2 = and <16 x i8> %1, %src31054 %and4 = and <16 x i8> %not1, %src11055 %or11 = or <16 x i8> %and2, %and41056 ret <16 x i8> %or111057}1058 1059define <16 x i8> @eval77(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1060; CHECK-LABEL: eval77:1061; CHECK: # %bb.0: # %entry1062; CHECK-NEXT: vgbm %v0, 655351063; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 401064; CHECK-NEXT: vn %v1, %v26, %v241065; CHECK-NEXT: veval %v0, %v28, %v0, %v1, 71066; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 471067; CHECK-NEXT: br %r141068entry:1069 %not = xor <16 x i8> %src1, splat(i8 -1)1070 %not1 = xor <16 x i8> %src2, splat(i8 -1)1071 %and = and <16 x i8> %not1, %not1072 %and4 = and <16 x i8> %not1, %src11073 %and12 = and <16 x i8> %src2, %src11074 %and228 = or <16 x i8> %and, %and121075 %0 = and <16 x i8> %and228, %src31076 %or14 = or <16 x i8> %0, %and41077 ret <16 x i8> %or141078}1079 1080define <16 x i8> @eval78(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1081; CHECK-LABEL: eval78:1082; CHECK: # %bb.0: # %entry1083; CHECK-NEXT: vgbm %v0, 655351084; CHECK-NEXT: vno %v1, %v28, %v281085; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 401086; CHECK-NEXT: veval %v1, %v24, %v1, %v26, 111087; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 311088; CHECK-NEXT: br %r141089entry:1090 %not = xor <16 x i8> %src1, splat(i8 -1)1091 %not1 = xor <16 x i8> %src2, splat(i8 -1)1092 %and = and <16 x i8> %not1, %not1093 %and2 = and <16 x i8> %and, %src31094 %not5 = xor <16 x i8> %src3, splat(i8 -1)1095 %and429 = or <16 x i8> %not5, %not11096 %0 = and <16 x i8> %and429, %src11097 %or15 = or <16 x i8> %0, %and21098 ret <16 x i8> %or151099}1100 1101define <16 x i8> @eval79(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1102; CHECK-LABEL: eval79:1103; CHECK: # %bb.0: # %entry1104; CHECK-NEXT: vo %v0, %v26, %v241105; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 471106; CHECK-NEXT: br %r141107entry:1108 %and.demorgan = or <16 x i8> %src2, %src11109 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)1110 %and2 = and <16 x i8> %and, %src31111 %or18 = or <16 x i8> %and2, %src11112 ret <16 x i8> %or181113}1114 1115define <16 x i8> @eval80(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1116; CHECK-LABEL: eval80:1117; CHECK: # %bb.0: # %entry1118; CHECK-NEXT: vnc %v24, %v28, %v241119; CHECK-NEXT: br %r141120entry:1121 %not = xor <16 x i8> %src1, splat(i8 -1)1122 %or6 = and <16 x i8> %not, %src31123 ret <16 x i8> %or61124}1125 1126define <16 x i8> @eval81(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1127; CHECK-LABEL: eval81:1128; CHECK: # %bb.0: # %entry1129; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 111130; CHECK-NEXT: br %r141131entry:1132 %not = xor <16 x i8> %src1, splat(i8 -1)1133 %or620 = or <16 x i8> %not, %src21134 %or9 = and <16 x i8> %or620, %src31135 ret <16 x i8> %or91136}1137 1138define <16 x i8> @eval82(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1139; CHECK-LABEL: eval82:1140; CHECK: # %bb.0: # %entry1141; CHECK-NEXT: vnc %v0, %v26, %v281142; CHECK-NEXT: vsel %v24, %v0, %v28, %v241143; CHECK-NEXT: br %r141144entry:1145 %not = xor <16 x i8> %src1, splat(i8 -1)1146 %or6 = and <16 x i8> %not, %src31147 %not8 = xor <16 x i8> %src3, splat(i8 -1)1148 %0 = and <16 x i8> %not8, %src21149 %and9 = and <16 x i8> %0, %src11150 %or10 = or <16 x i8> %and9, %or61151 ret <16 x i8> %or101152}1153 1154define <16 x i8> @eval83(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1155; CHECK-LABEL: eval83:1156; CHECK: # %bb.0: # %entry1157; CHECK-NEXT: vsel %v24, %v26, %v28, %v241158; CHECK-NEXT: br %r141159entry:1160 %not = xor <16 x i8> %src1, splat(i8 -1)1161 %or6 = and <16 x i8> %not, %src31162 %and7 = and <16 x i8> %src2, %src11163 %or13 = or <16 x i8> %or6, %and71164 ret <16 x i8> %or131165}1166 1167define <16 x i8> @eval84(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1168; CHECK-LABEL: eval84:1169; CHECK: # %bb.0: # %entry1170; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 141171; CHECK-NEXT: br %r141172entry:1173 %or621.demorgan = and <16 x i8> %src2, %src11174 %or621 = xor <16 x i8> %or621.demorgan, splat(i8 -1)1175 %or10 = and <16 x i8> %or621, %src31176 ret <16 x i8> %or101177}1178 1179define <16 x i8> @eval85(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> returned %src3) {1180; CHECK-LABEL: eval85:1181; CHECK: # %bb.0: # %entry1182; CHECK-NEXT: vlr %v24, %v281183; CHECK-NEXT: br %r141184entry:1185 ret <16 x i8> %src31186}1187 1188define <16 x i8> @eval86(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1189; CHECK-LABEL: eval86:1190; CHECK: # %bb.0: # %entry1191; CHECK-NEXT: vn %v0, %v26, %v241192; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 21193; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 471194; CHECK-NEXT: br %r141195entry:1196 %or629.demorgan = and <16 x i8> %src2, %src11197 %or629 = xor <16 x i8> %or629.demorgan, splat(i8 -1)1198 %or10 = and <16 x i8> %or629, %src31199 %not12 = xor <16 x i8> %src3, splat(i8 -1)1200 %0 = and <16 x i8> %not12, %src11201 %and13 = and <16 x i8> %0, %src21202 %or14 = or <16 x i8> %and13, %or101203 ret <16 x i8> %or141204}1205 1206define <16 x i8> @eval87(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1207; CHECK-LABEL: eval87:1208; CHECK: # %bb.0: # %entry1209; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 311210; CHECK-NEXT: br %r141211entry:1212 %and11 = and <16 x i8> %src2, %src11213 %or17 = or <16 x i8> %and11, %src31214 ret <16 x i8> %or171215}1216 1217define <16 x i8> @eval88(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1218; CHECK-LABEL: eval88:1219; CHECK: # %bb.0: # %entry1220; CHECK-NEXT: vno %v0, %v28, %v261221; CHECK-NEXT: vsel %v24, %v0, %v28, %v241222; CHECK-NEXT: br %r141223entry:1224 %not = xor <16 x i8> %src1, splat(i8 -1)1225 %or6 = and <16 x i8> %not, %src31226 %0 = or <16 x i8> %src3, %src21227 %1 = xor <16 x i8> %0, splat(i8 -1)1228 %and10 = and <16 x i8> %1, %src11229 %or11 = or <16 x i8> %and10, %or61230 ret <16 x i8> %or111231}1232 1233define <16 x i8> @eval89(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1234; CHECK-LABEL: eval89:1235; CHECK: # %bb.0: # %entry1236; CHECK-NEXT: vo %v0, %v28, %v261237; CHECK-NEXT: veval %v1, %v28, %v26, %v24, 111238; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 471239; CHECK-NEXT: br %r141240entry:1241 %not = xor <16 x i8> %src1, splat(i8 -1)1242 %0 = or <16 x i8> %src3, %src21243 %1 = xor <16 x i8> %0, splat(i8 -1)1244 %and10 = and <16 x i8> %1, %src11245 %or629 = or <16 x i8> %not, %src21246 %2 = and <16 x i8> %or629, %src31247 %or14 = or <16 x i8> %and10, %21248 ret <16 x i8> %or141249}1250 1251define <16 x i8> @eval90(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1252; CHECK-LABEL: eval90:1253; CHECK: # %bb.0: # %entry1254; CHECK-NEXT: vx %v24, %v28, %v241255; CHECK-NEXT: br %r141256entry:1257 %or15 = xor <16 x i8> %src3, %src11258 ret <16 x i8> %or151259}1260 1261define <16 x i8> @eval91(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1262; CHECK-LABEL: eval91:1263; CHECK: # %bb.0: # %entry1264; CHECK-NEXT: voc %v0, %v26, %v281265; CHECK-NEXT: vsel %v24, %v0, %v28, %v241266; CHECK-NEXT: br %r141267entry:1268 %not = xor <16 x i8> %src1, splat(i8 -1)1269 %or6 = and <16 x i8> %not, %src31270 %src3.not = xor <16 x i8> %src3, splat(i8 -1)1271 %and1037 = or <16 x i8> %src3.not, %src21272 %0 = and <16 x i8> %and1037, %src11273 %or18 = or <16 x i8> %0, %or61274 ret <16 x i8> %or181275}1276 1277define <16 x i8> @eval92(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1278; CHECK-LABEL: eval92:1279; CHECK: # %bb.0: # %entry1280; CHECK-NEXT: vno %v0, %v26, %v261281; CHECK-NEXT: vsel %v24, %v0, %v28, %v241282; CHECK-NEXT: br %r141283entry:1284 %not = xor <16 x i8> %src1, splat(i8 -1)1285 %not1 = xor <16 x i8> %src2, splat(i8 -1)1286 %or6 = and <16 x i8> %not, %src31287 %and8 = and <16 x i8> %not1, %src11288 %or15 = or <16 x i8> %or6, %and81289 ret <16 x i8> %or151290}1291 1292define <16 x i8> @eval93(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1293; CHECK-LABEL: eval93:1294; CHECK: # %bb.0: # %entry1295; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 471296; CHECK-NEXT: br %r141297entry:1298 %not1 = xor <16 x i8> %src2, splat(i8 -1)1299 %and8 = and <16 x i8> %not1, %src11300 %or18 = or <16 x i8> %and8, %src31301 ret <16 x i8> %or181302}1303 1304define <16 x i8> @eval94(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1305; CHECK-LABEL: eval94:1306; CHECK: # %bb.0: # %entry1307; CHECK-NEXT: vnn %v0, %v28, %v261308; CHECK-NEXT: vsel %v24, %v0, %v28, %v241309; CHECK-NEXT: br %r141310entry:1311 %not = xor <16 x i8> %src1, splat(i8 -1)1312 %or6 = and <16 x i8> %not, %src31313 %and838.demorgan = and <16 x i8> %src3, %src21314 %and838 = xor <16 x i8> %and838.demorgan, splat(i8 -1)1315 %0 = and <16 x i8> %and838, %src11316 %or19 = or <16 x i8> %0, %or61317 ret <16 x i8> %or191318}1319 1320define <16 x i8> @eval95(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1321; CHECK-LABEL: eval95:1322; CHECK: # %bb.0: # %entry1323; CHECK-NEXT: vo %v24, %v28, %v241324; CHECK-NEXT: br %r141325entry:1326 %or22 = or <16 x i8> %src3, %src11327 ret <16 x i8> %or221328}1329 1330define <16 x i8> @eval96(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1331; CHECK-LABEL: eval96:1332; CHECK: # %bb.0: # %entry1333; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 401334; CHECK-NEXT: br %r141335entry:1336 %0 = xor <16 x i8> %src3, %src21337 %1 = xor <16 x i8> %src1, splat(i8 -1)1338 %or7 = and <16 x i8> %0, %11339 ret <16 x i8> %or71340}1341 1342define <16 x i8> @eval97(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1343; CHECK-LABEL: eval97:1344; CHECK: # %bb.0: # %entry1345; CHECK-NEXT: vx %v0, %v28, %v261346; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 11347; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 471348; CHECK-NEXT: br %r141349entry:1350 %0 = xor <16 x i8> %src3, %src21351 %1 = xor <16 x i8> %src1, splat(i8 -1)1352 %or7 = and <16 x i8> %0, %11353 %and8 = and <16 x i8> %src2, %src11354 %and9 = and <16 x i8> %and8, %src31355 %or10 = or <16 x i8> %or7, %and91356 ret <16 x i8> %or101357}1358 1359define <16 x i8> @eval98(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1360; CHECK-LABEL: eval98:1361; CHECK: # %bb.0: # %entry1362; CHECK-NEXT: vx %v0, %v28, %v261363; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 21364; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 471365; CHECK-NEXT: br %r141366entry:1367 %not5 = xor <16 x i8> %src3, splat(i8 -1)1368 %0 = xor <16 x i8> %src3, %src21369 %1 = xor <16 x i8> %src1, splat(i8 -1)1370 %or7 = and <16 x i8> %0, %11371 %2 = and <16 x i8> %not5, %src11372 %and10 = and <16 x i8> %2, %src21373 %or11 = or <16 x i8> %or7, %and101374 ret <16 x i8> %or111375}1376 1377define <16 x i8> @eval99(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1378; CHECK-LABEL: eval99:1379; CHECK: # %bb.0: # %entry1380; CHECK-NEXT: vx %v0, %v28, %v261381; CHECK-NEXT: vsel %v24, %v26, %v0, %v241382; CHECK-NEXT: br %r141383entry:1384 %0 = xor <16 x i8> %src3, %src21385 %1 = xor <16 x i8> %src1, splat(i8 -1)1386 %or7 = and <16 x i8> %0, %11387 %and8 = and <16 x i8> %src2, %src11388 %or14 = or <16 x i8> %or7, %and81389 ret <16 x i8> %or141390}1391 1392define <16 x i8> @eval100(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1393; CHECK-LABEL: eval100:1394; CHECK: # %bb.0: # %entry1395; CHECK-NEXT: vno %v0, %v28, %v241396; CHECK-NEXT: vsel %v24, %v0, %v28, %v261397; CHECK-NEXT: br %r141398entry:1399 %not1 = xor <16 x i8> %src2, splat(i8 -1)1400 %0 = or <16 x i8> %src3, %src11401 %1 = xor <16 x i8> %0, splat(i8 -1)1402 %and6 = and <16 x i8> %1, %src21403 %2 = and <16 x i8> %not1, %src31404 %or11 = or <16 x i8> %and6, %21405 ret <16 x i8> %or111406}1407 1408define <16 x i8> @eval101(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1409; CHECK-LABEL: eval101:1410; CHECK: # %bb.0: # %entry1411; CHECK-NEXT: vo %v0, %v28, %v241412; CHECK-NEXT: veval %v1, %v28, %v24, %v26, 111413; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 471414; CHECK-NEXT: br %r141415entry:1416 %not1 = xor <16 x i8> %src2, splat(i8 -1)1417 %0 = or <16 x i8> %src3, %src11418 %1 = xor <16 x i8> %0, splat(i8 -1)1419 %and6 = and <16 x i8> %1, %src21420 %2 = or <16 x i8> %not1, %src11421 %3 = and <16 x i8> %2, %src31422 %or14 = or <16 x i8> %and6, %31423 ret <16 x i8> %or141424}1425 1426define <16 x i8> @eval102(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1427; CHECK-LABEL: eval102:1428; CHECK: # %bb.0: # %entry1429; CHECK-NEXT: vx %v24, %v26, %v281430; CHECK-NEXT: br %r141431entry:1432 %or15 = xor <16 x i8> %src2, %src31433 ret <16 x i8> %or151434}1435 1436define <16 x i8> @eval103(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1437; CHECK-LABEL: eval103:1438; CHECK: # %bb.0: # %entry1439; CHECK-NEXT: voc %v0, %v24, %v281440; CHECK-NEXT: vsel %v24, %v0, %v28, %v261441; CHECK-NEXT: br %r141442entry:1443 %not1 = xor <16 x i8> %src2, splat(i8 -1)1444 %0 = and <16 x i8> %not1, %src31445 %src3.not = xor <16 x i8> %src3, splat(i8 -1)1446 %and637 = or <16 x i8> %src3.not, %src11447 %1 = and <16 x i8> %and637, %src21448 %or18 = or <16 x i8> %1, %01449 ret <16 x i8> %or181450}1451 1452define <16 x i8> @eval104(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1453; CHECK-LABEL: eval104:1454; CHECK: # %bb.0: # %entry1455; CHECK-NEXT: vx %v0, %v28, %v261456; CHECK-NEXT: vno %v1, %v28, %v261457; CHECK-NEXT: vsel %v24, %v1, %v0, %v241458; CHECK-NEXT: br %r141459entry:1460 %0 = xor <16 x i8> %src3, %src21461 %1 = xor <16 x i8> %src1, splat(i8 -1)1462 %or7 = and <16 x i8> %0, %11463 %2 = or <16 x i8> %src3, %src21464 %3 = xor <16 x i8> %2, splat(i8 -1)1465 %and11 = and <16 x i8> %3, %src11466 %or12 = or <16 x i8> %or7, %and111467 ret <16 x i8> %or121468}1469 1470define <16 x i8> @eval105(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1471; CHECK-LABEL: eval105:1472; CHECK: # %bb.0: # %entry1473; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 1051474; CHECK-NEXT: br %r141475entry:1476 %0 = xor <16 x i8> %src3, %src21477 %or15 = xor <16 x i8> %0, %src11478 ret <16 x i8> %or151479}1480 1481define <16 x i8> @eval106(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1482; CHECK-LABEL: eval106:1483; CHECK: # %bb.0: # %entry1484; CHECK-NEXT: vno %v0, %v28, %v281485; CHECK-NEXT: vx %v1, %v28, %v261486; CHECK-NEXT: vsel %v24, %v0, %v1, %v241487; CHECK-NEXT: br %r141488entry:1489 %not5 = xor <16 x i8> %src3, splat(i8 -1)1490 %0 = xor <16 x i8> %src3, %src21491 %1 = xor <16 x i8> %src1, splat(i8 -1)1492 %or7 = and <16 x i8> %0, %11493 %2 = and <16 x i8> %not5, %src11494 %or16 = or <16 x i8> %or7, %21495 ret <16 x i8> %or161496}1497 1498define <16 x i8> @eval107(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1499; CHECK-LABEL: eval107:1500; CHECK: # %bb.0: # %entry1501; CHECK-NEXT: vx %v0, %v28, %v261502; CHECK-NEXT: voc %v1, %v26, %v281503; CHECK-NEXT: vsel %v24, %v1, %v0, %v241504; CHECK-NEXT: br %r141505entry:1506 %0 = xor <16 x i8> %src3, %src21507 %1 = xor <16 x i8> %src1, splat(i8 -1)1508 %or7 = and <16 x i8> %0, %11509 %src3.not = xor <16 x i8> %src3, splat(i8 -1)1510 %and1137 = or <16 x i8> %src3.not, %src21511 %2 = and <16 x i8> %and1137, %src11512 %or19 = or <16 x i8> %or7, %21513 ret <16 x i8> %or191514}1515 1516define <16 x i8> @eval108(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1517; CHECK-LABEL: eval108:1518; CHECK: # %bb.0: # %entry1519; CHECK-NEXT: vno %v0, %v24, %v241520; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 21521; CHECK-NEXT: vo %v1, %v28, %v241522; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 471523; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 471524; CHECK-NEXT: br %r141525entry:1526 %not = xor <16 x i8> %src1, splat(i8 -1)1527 %not1 = xor <16 x i8> %src2, splat(i8 -1)1528 %and = and <16 x i8> %not1, %not1529 %and2 = and <16 x i8> %and, %src31530 %0 = or <16 x i8> %src3, %src11531 %1 = xor <16 x i8> %0, splat(i8 -1)1532 %and6 = and <16 x i8> %1, %src21533 %and9 = and <16 x i8> %not1, %src11534 %or7 = or <16 x i8> %and2, %and91535 %or16 = or <16 x i8> %or7, %and61536 ret <16 x i8> %or161537}1538 1539define <16 x i8> @eval109(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1540; CHECK-LABEL: eval109:1541; CHECK: # %bb.0: # %entry1542; CHECK-NEXT: vgbm %v0, 655351543; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 401544; CHECK-NEXT: vn %v2, %v26, %v241545; CHECK-NEXT: veval %v0, %v28, %v0, %v2, 71546; CHECK-NEXT: vo %v1, %v28, %v241547; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 471548; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 471549; CHECK-NEXT: br %r141550entry:1551 %not = xor <16 x i8> %src1, splat(i8 -1)1552 %not1 = xor <16 x i8> %src2, splat(i8 -1)1553 %and = and <16 x i8> %not1, %not1554 %0 = or <16 x i8> %src3, %src11555 %1 = xor <16 x i8> %0, splat(i8 -1)1556 %and6 = and <16 x i8> %1, %src21557 %and9 = and <16 x i8> %not1, %src11558 %and17 = and <16 x i8> %src2, %src11559 %and237 = or <16 x i8> %and, %and171560 %2 = and <16 x i8> %and237, %src31561 %or16 = or <16 x i8> %2, %and91562 %or19 = or <16 x i8> %or16, %and61563 ret <16 x i8> %or191564}1565 1566define <16 x i8> @eval110(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1567; CHECK-LABEL: eval110:1568; CHECK: # %bb.0: # %entry1569; CHECK-NEXT: vno %v0, %v24, %v241570; CHECK-NEXT: vgbm %v1, 655351571; CHECK-NEXT: vo %v2, %v28, %v241572; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 21573; CHECK-NEXT: veval %v0, %v0, %v26, %v2, 471574; CHECK-NEXT: veval %v1, %v26, %v1, %v28, 1901575; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 311576; CHECK-NEXT: br %r141577entry:1578 %not = xor <16 x i8> %src1, splat(i8 -1)1579 %not1 = xor <16 x i8> %src2, splat(i8 -1)1580 %and = and <16 x i8> %not1, %not1581 %and2 = and <16 x i8> %and, %src31582 %not5 = xor <16 x i8> %src3, splat(i8 -1)1583 %0 = or <16 x i8> %src3, %src11584 %1 = xor <16 x i8> %0, splat(i8 -1)1585 %and6 = and <16 x i8> %1, %src21586 %or7 = or <16 x i8> %and6, %and21587 %and938 = or <16 x i8> %not5, %not11588 %2 = and <16 x i8> %and938, %src11589 %or20 = or <16 x i8> %or7, %21590 ret <16 x i8> %or201591}1592 1593define <16 x i8> @eval111(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1594; CHECK-LABEL: eval111:1595; CHECK: # %bb.0: # %entry1596; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 1111597; CHECK-NEXT: br %r141598entry:1599 %0 = xor <16 x i8> %src3, %src21600 %or23 = or <16 x i8> %0, %src11601 ret <16 x i8> %or231602}1603 1604define <16 x i8> @eval112(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1605; CHECK-LABEL: eval112:1606; CHECK: # %bb.0: # %entry1607; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 81608; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 471609; CHECK-NEXT: br %r141610entry:1611 %not = xor <16 x i8> %src1, splat(i8 -1)1612 %0 = or <16 x i8> %src2, %src11613 %1 = xor <16 x i8> %0, splat(i8 -1)1614 %and2 = and <16 x i8> %1, %src31615 %and4 = and <16 x i8> %not, %src21616 %or11 = or <16 x i8> %and2, %and41617 ret <16 x i8> %or111618}1619 1620define <16 x i8> @eval113(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1621; CHECK-LABEL: eval113:1622; CHECK: # %bb.0: # %entry1623; CHECK-NEXT: vgbm %v0, 655351624; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 401625; CHECK-NEXT: vn %v1, %v26, %v241626; CHECK-NEXT: veval %v0, %v28, %v0, %v1, 71627; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 471628; CHECK-NEXT: br %r141629entry:1630 %not = xor <16 x i8> %src1, splat(i8 -1)1631 %not1 = xor <16 x i8> %src2, splat(i8 -1)1632 %and = and <16 x i8> %not1, %not1633 %and4 = and <16 x i8> %not, %src21634 %and12 = and <16 x i8> %src2, %src11635 %and228 = or <16 x i8> %and, %and121636 %0 = and <16 x i8> %and228, %src31637 %or14 = or <16 x i8> %0, %and41638 ret <16 x i8> %or141639}1640 1641define <16 x i8> @eval114(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1642; CHECK-LABEL: eval114:1643; CHECK: # %bb.0: # %entry1644; CHECK-NEXT: vno %v0, %v24, %v241645; CHECK-NEXT: vgbm %v1, 655351646; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 21647; CHECK-NEXT: veval %v1, %v24, %v1, %v28, 1901648; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 311649; CHECK-NEXT: br %r141650entry:1651 %not = xor <16 x i8> %src1, splat(i8 -1)1652 %not1 = xor <16 x i8> %src2, splat(i8 -1)1653 %and = and <16 x i8> %not1, %not1654 %and2 = and <16 x i8> %and, %src31655 %not5 = xor <16 x i8> %src3, splat(i8 -1)1656 %and429 = or <16 x i8> %not5, %not1657 %0 = and <16 x i8> %and429, %src21658 %or15 = or <16 x i8> %and2, %01659 ret <16 x i8> %or151660}1661 1662define <16 x i8> @eval115(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1663; CHECK-LABEL: eval115:1664; CHECK: # %bb.0: # %entry1665; CHECK-NEXT: vo %v0, %v26, %v241666; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 471667; CHECK-NEXT: br %r141668entry:1669 %and.demorgan = or <16 x i8> %src2, %src11670 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)1671 %and2 = and <16 x i8> %and, %src31672 %or18 = or <16 x i8> %and2, %src21673 ret <16 x i8> %or181674}1675 1676define <16 x i8> @eval116(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1677; CHECK-LABEL: eval116:1678; CHECK: # %bb.0: # %entry1679; CHECK-NEXT: vno %v0, %v24, %v241680; CHECK-NEXT: vsel %v24, %v0, %v28, %v261681; CHECK-NEXT: br %r141682entry:1683 %not = xor <16 x i8> %src1, splat(i8 -1)1684 %not1 = xor <16 x i8> %src2, splat(i8 -1)1685 %and4 = and <16 x i8> %not, %src21686 %0 = and <16 x i8> %not1, %src31687 %or15 = or <16 x i8> %0, %and41688 ret <16 x i8> %or151689}1690 1691define <16 x i8> @eval117(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1692; CHECK-LABEL: eval117:1693; CHECK: # %bb.0: # %entry1694; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 471695; CHECK-NEXT: br %r141696entry:1697 %not = xor <16 x i8> %src1, splat(i8 -1)1698 %and4 = and <16 x i8> %not, %src21699 %or18 = or <16 x i8> %and4, %src31700 ret <16 x i8> %or181701}1702 1703define <16 x i8> @eval118(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1704; CHECK-LABEL: eval118:1705; CHECK: # %bb.0: # %entry1706; CHECK-NEXT: vnn %v0, %v28, %v241707; CHECK-NEXT: vsel %v24, %v0, %v28, %v261708; CHECK-NEXT: br %r141709entry:1710 %not1 = xor <16 x i8> %src2, splat(i8 -1)1711 %0 = and <16 x i8> %not1, %src31712 %and438.demorgan = and <16 x i8> %src3, %src11713 %and438 = xor <16 x i8> %and438.demorgan, splat(i8 -1)1714 %1 = and <16 x i8> %and438, %src21715 %or19 = or <16 x i8> %0, %11716 ret <16 x i8> %or191717}1718 1719define <16 x i8> @eval119(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1720; CHECK-LABEL: eval119:1721; CHECK: # %bb.0: # %entry1722; CHECK-NEXT: vo %v24, %v28, %v261723; CHECK-NEXT: br %r141724entry:1725 %or22 = or <16 x i8> %src3, %src21726 ret <16 x i8> %or221727}1728 1729define <16 x i8> @eval120(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1730; CHECK-LABEL: eval120:1731; CHECK: # %bb.0: # %entry1732; CHECK-NEXT: vno %v0, %v24, %v241733; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 21734; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 471735; CHECK-NEXT: vo %v1, %v28, %v261736; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 471737; CHECK-NEXT: br %r141738entry:1739 %not = xor <16 x i8> %src1, splat(i8 -1)1740 %not1 = xor <16 x i8> %src2, splat(i8 -1)1741 %and = and <16 x i8> %not1, %not1742 %and2 = and <16 x i8> %and, %src31743 %and4 = and <16 x i8> %not, %src21744 %or11 = or <16 x i8> %and2, %and41745 %0 = or <16 x i8> %src3, %src21746 %1 = xor <16 x i8> %0, splat(i8 -1)1747 %and15 = and <16 x i8> %1, %src11748 %or16 = or <16 x i8> %or11, %and151749 ret <16 x i8> %or161750}1751 1752define <16 x i8> @eval121(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1753; CHECK-LABEL: eval121:1754; CHECK: # %bb.0: # %entry1755; CHECK-NEXT: vgbm %v0, 655351756; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 401757; CHECK-NEXT: vn %v2, %v26, %v241758; CHECK-NEXT: veval %v0, %v28, %v0, %v2, 71759; CHECK-NEXT: vo %v1, %v28, %v261760; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 471761; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 471762; CHECK-NEXT: br %r141763entry:1764 %not = xor <16 x i8> %src1, splat(i8 -1)1765 %not1 = xor <16 x i8> %src2, splat(i8 -1)1766 %and = and <16 x i8> %not1, %not1767 %and4 = and <16 x i8> %not, %src21768 %0 = or <16 x i8> %src3, %src21769 %1 = xor <16 x i8> %0, splat(i8 -1)1770 %and15 = and <16 x i8> %1, %src11771 %and17 = and <16 x i8> %src2, %src11772 %and237 = or <16 x i8> %and, %and171773 %2 = and <16 x i8> %and237, %src31774 %or16 = or <16 x i8> %2, %and41775 %or19 = or <16 x i8> %or16, %and151776 ret <16 x i8> %or191777}1778 1779define <16 x i8> @eval122(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1780; CHECK-LABEL: eval122:1781; CHECK: # %bb.0: # %entry1782; CHECK-NEXT: vno %v0, %v24, %v241783; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 21784; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 471785; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 471786; CHECK-NEXT: br %r141787entry:1788 %not = xor <16 x i8> %src1, splat(i8 -1)1789 %not1 = xor <16 x i8> %src2, splat(i8 -1)1790 %and = and <16 x i8> %not1, %not1791 %and2 = and <16 x i8> %and, %src31792 %and4 = and <16 x i8> %not, %src21793 %not5 = xor <16 x i8> %src3, splat(i8 -1)1794 %or11 = or <16 x i8> %and2, %and41795 %0 = and <16 x i8> %not5, %src11796 %or20 = or <16 x i8> %or11, %01797 ret <16 x i8> %or201798}1799 1800define <16 x i8> @eval123(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1801; CHECK-LABEL: eval123:1802; CHECK: # %bb.0: # %entry1803; CHECK-NEXT: vno %v0, %v24, %v241804; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 21805; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 471806; CHECK-NEXT: voc %v1, %v26, %v281807; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 311808; CHECK-NEXT: br %r141809entry:1810 %not = xor <16 x i8> %src1, splat(i8 -1)1811 %not1 = xor <16 x i8> %src2, splat(i8 -1)1812 %and = and <16 x i8> %not1, %not1813 %and2 = and <16 x i8> %and, %src31814 %and4 = and <16 x i8> %not, %src21815 %or11 = or <16 x i8> %and2, %and41816 %src3.not = xor <16 x i8> %src3, splat(i8 -1)1817 %and1545 = or <16 x i8> %src3.not, %src21818 %0 = and <16 x i8> %and1545, %src11819 %or23 = or <16 x i8> %or11, %01820 ret <16 x i8> %or231821}1822 1823define <16 x i8> @eval124(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1824; CHECK-LABEL: eval124:1825; CHECK: # %bb.0: # %entry1826; CHECK-NEXT: vo %v0, %v26, %v241827; CHECK-NEXT: vx %v1, %v24, %v261828; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 471829; CHECK-NEXT: br %r141830entry:1831 %0 = or <16 x i8> %src2, %src11832 %1 = xor <16 x i8> %0, splat(i8 -1)1833 %and2 = and <16 x i8> %1, %src31834 %or11 = xor <16 x i8> %src1, %src21835 %or20 = or <16 x i8> %or11, %and21836 ret <16 x i8> %or201837}1838 1839define <16 x i8> @eval125(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1840; CHECK-LABEL: eval125:1841; CHECK: # %bb.0: # %entry1842; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 1111843; CHECK-NEXT: br %r141844entry:1845 %or11 = xor <16 x i8> %src1, %src21846 %or23 = or <16 x i8> %or11, %src31847 ret <16 x i8> %or231848}1849 1850define <16 x i8> @eval126(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1851; CHECK-LABEL: eval126:1852; CHECK: # %bb.0: # %entry1853; CHECK-NEXT: vno %v0, %v24, %v241854; CHECK-NEXT: vgbm %v1, 655351855; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 21856; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 471857; CHECK-NEXT: veval %v1, %v26, %v1, %v28, 1901858; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 311859; CHECK-NEXT: br %r141860entry:1861 %not = xor <16 x i8> %src1, splat(i8 -1)1862 %not1 = xor <16 x i8> %src2, splat(i8 -1)1863 %and = and <16 x i8> %not1, %not1864 %and2 = and <16 x i8> %and, %src31865 %and4 = and <16 x i8> %not, %src21866 %not5 = xor <16 x i8> %src3, splat(i8 -1)1867 %or11 = or <16 x i8> %and2, %and41868 %and1346 = or <16 x i8> %not5, %not11869 %0 = and <16 x i8> %and1346, %src11870 %or24 = or <16 x i8> %or11, %01871 ret <16 x i8> %or241872}1873 1874define <16 x i8> @eval127(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1875; CHECK-LABEL: eval127:1876; CHECK: # %bb.0: # %entry1877; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 81878; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 1271879; CHECK-NEXT: br %r141880entry:1881 %0 = or <16 x i8> %src2, %src11882 %1 = xor <16 x i8> %0, splat(i8 -1)1883 %and2 = and <16 x i8> %1, %src31884 %2 = or <16 x i8> %and2, %src11885 %or27 = or <16 x i8> %2, %src21886 ret <16 x i8> %or271887}1888 1889define <16 x i8> @eval128(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1890; CHECK-LABEL: eval128:1891; CHECK: # %bb.0: # %entry1892; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 1281893; CHECK-NEXT: br %r141894entry:1895 %and.demorgan = or <16 x i8> %src2, %src11896 %and3.demorgan = or <16 x i8> %and.demorgan, %src31897 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)1898 ret <16 x i8> %and31899}1900 1901define <16 x i8> @eval129(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1902; CHECK-LABEL: eval129:1903; CHECK: # %bb.0: # %entry1904; CHECK-NEXT: vo %v0, %v26, %v241905; CHECK-NEXT: vn %v1, %v26, %v241906; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 1391907; CHECK-NEXT: br %r141908entry:1909 %and.demorgan = or <16 x i8> %src2, %src11910 %and3.demorgan = or <16 x i8> %and.demorgan, %src31911 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)1912 %and4 = and <16 x i8> %src2, %src11913 %and5 = and <16 x i8> %and4, %src31914 %or6 = or <16 x i8> %and5, %and31915 ret <16 x i8> %or61916}1917 1918define <16 x i8> @eval130(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1919; CHECK-LABEL: eval130:1920; CHECK: # %bb.0: # %entry1921; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 1301922; CHECK-NEXT: br %r141923entry:1924 %0 = xor <16 x i8> %src2, %src11925 %or7.demorgan = or <16 x i8> %0, %src31926 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)1927 ret <16 x i8> %or71928}1929 1930define <16 x i8> @eval131(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1931; CHECK-LABEL: eval131:1932; CHECK: # %bb.0: # %entry1933; CHECK-NEXT: vn %v0, %v26, %v241934; CHECK-NEXT: vx %v1, %v26, %v241935; CHECK-NEXT: veval %v24, %v0, %v28, %v1, 1391936; CHECK-NEXT: br %r141937entry:1938 %and4 = and <16 x i8> %src2, %src11939 %0 = xor <16 x i8> %src2, %src11940 %or7.demorgan = or <16 x i8> %0, %src31941 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)1942 %and9 = and <16 x i8> %and4, %src31943 %or10 = or <16 x i8> %and9, %or71944 ret <16 x i8> %or101945}1946 1947define <16 x i8> @eval132(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1948; CHECK-LABEL: eval132:1949; CHECK: # %bb.0: # %entry1950; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 1301951; CHECK-NEXT: br %r141952entry:1953 %0 = xor <16 x i8> %src3, %src11954 %1 = or <16 x i8> %0, %src21955 %or7 = xor <16 x i8> %1, splat(i8 -1)1956 ret <16 x i8> %or71957}1958 1959define <16 x i8> @eval133(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1960; CHECK-LABEL: eval133:1961; CHECK: # %bb.0: # %entry1962; CHECK-NEXT: vx %v0, %v28, %v241963; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 11964; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 1431965; CHECK-NEXT: br %r141966entry:1967 %0 = xor <16 x i8> %src3, %src11968 %1 = or <16 x i8> %0, %src21969 %or7 = xor <16 x i8> %1, splat(i8 -1)1970 %and8 = and <16 x i8> %src2, %src11971 %and9 = and <16 x i8> %and8, %src31972 %or10 = or <16 x i8> %and9, %or71973 ret <16 x i8> %or101974}1975 1976define <16 x i8> @eval134(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1977; CHECK-LABEL: eval134:1978; CHECK: # %bb.0: # %entry1979; CHECK-NEXT: vx %v0, %v28, %v241980; CHECK-NEXT: vnc %v1, %v24, %v281981; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 1391982; CHECK-NEXT: br %r141983entry:1984 %not2 = xor <16 x i8> %src3, splat(i8 -1)1985 %0 = xor <16 x i8> %src3, %src11986 %1 = or <16 x i8> %0, %src21987 %or7 = xor <16 x i8> %1, splat(i8 -1)1988 %2 = and <16 x i8> %not2, %src11989 %and10 = and <16 x i8> %2, %src21990 %or11 = or <16 x i8> %and10, %or71991 ret <16 x i8> %or111992}1993 1994define <16 x i8> @eval135(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {1995; CHECK-LABEL: eval135:1996; CHECK: # %bb.0: # %entry1997; CHECK-NEXT: vx %v0, %v28, %v241998; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 1391999; CHECK-NEXT: br %r142000entry:2001 %0 = xor <16 x i8> %src3, %src12002 %1 = or <16 x i8> %0, %src22003 %or7 = xor <16 x i8> %1, splat(i8 -1)2004 %and8 = and <16 x i8> %src2, %src12005 %or14 = or <16 x i8> %and8, %or72006 ret <16 x i8> %or142007}2008 2009define <16 x i8> @eval136(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2010; CHECK-LABEL: eval136:2011; CHECK: # %bb.0: # %entry2012; CHECK-NEXT: vno %v24, %v28, %v262013; CHECK-NEXT: br %r142014entry:2015 %0 = or <16 x i8> %src3, %src22016 %1 = xor <16 x i8> %0, splat(i8 -1)2017 ret <16 x i8> %12018}2019 2020define <16 x i8> @eval137(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2021; CHECK-LABEL: eval137:2022; CHECK: # %bb.0: # %entry2023; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 1372024; CHECK-NEXT: br %r142025entry:2026 %0 = or <16 x i8> %src3, %src22027 %1 = xor <16 x i8> %0, splat(i8 -1)2028 %and9 = and <16 x i8> %src2, %src12029 %and10 = and <16 x i8> %and9, %src32030 %or11 = or <16 x i8> %and10, %12031 ret <16 x i8> %or112032}2033 2034define <16 x i8> @eval138(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2035; CHECK-LABEL: eval138:2036; CHECK: # %bb.0: # %entry2037; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 1272038; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 1742039; CHECK-NEXT: br %r142040entry:2041 %not2 = xor <16 x i8> %src3, splat(i8 -1)2042 %0 = or <16 x i8> %src2, %src12043 %and3.demorgan = or <16 x i8> %0, %src32044 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)2045 %1 = and <16 x i8> %not2, %src12046 %or12 = or <16 x i8> %1, %and32047 ret <16 x i8> %or122048}2049 2050define <16 x i8> @eval139(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2051; CHECK-LABEL: eval139:2052; CHECK: # %bb.0: # %entry2053; CHECK-NEXT: vo %v0, %v26, %v242054; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 112055; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 1432056; CHECK-NEXT: br %r142057entry:2058 %0 = or <16 x i8> %src2, %src12059 %and3.demorgan = or <16 x i8> %0, %src32060 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)2061 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2062 %and729 = or <16 x i8> %src3.not, %src22063 %1 = and <16 x i8> %and729, %src12064 %or15 = or <16 x i8> %1, %and32065 ret <16 x i8> %or152066}2067 2068define <16 x i8> @eval140(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2069; CHECK-LABEL: eval140:2070; CHECK: # %bb.0: # %entry2071; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 1272072; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 1742073; CHECK-NEXT: br %r142074entry:2075 %not1 = xor <16 x i8> %src2, splat(i8 -1)2076 %0 = or <16 x i8> %src1, %src32077 %and3.demorgan = or <16 x i8> %0, %src22078 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)2079 %and5 = and <16 x i8> %not1, %src12080 %or12 = or <16 x i8> %and5, %and32081 ret <16 x i8> %or122082}2083 2084define <16 x i8> @eval141(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2085; CHECK-LABEL: eval141:2086; CHECK: # %bb.0: # %entry2087; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 12088; CHECK-NEXT: vo %v0, %v26, %v242089; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 472090; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 1432091; CHECK-NEXT: br %r142092entry:2093 %not1 = xor <16 x i8> %src2, splat(i8 -1)2094 %0 = or <16 x i8> %src2, %src12095 %and3.demorgan = or <16 x i8> %0, %src32096 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)2097 %and5 = and <16 x i8> %not1, %src12098 %and13 = and <16 x i8> %src2, %src12099 %and14 = and <16 x i8> %and13, %src32100 %or12 = or <16 x i8> %and14, %and52101 %or15 = or <16 x i8> %or12, %and32102 ret <16 x i8> %or152103}2104 2105define <16 x i8> @eval142(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2106; CHECK-LABEL: eval142:2107; CHECK: # %bb.0: # %entry2108; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 1272109; CHECK-NEXT: vn %v1, %v28, %v262110; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 1742111; CHECK-NEXT: br %r142112entry:2113 %0 = or <16 x i8> %src2, %src12114 %and3.demorgan = or <16 x i8> %0, %src32115 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)2116 %and530.demorgan = and <16 x i8> %src3, %src22117 %and530 = xor <16 x i8> %and530.demorgan, splat(i8 -1)2118 %1 = and <16 x i8> %and530, %src12119 %or16 = or <16 x i8> %1, %and32120 ret <16 x i8> %or162121}2122 2123define <16 x i8> @eval143(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2124; CHECK-LABEL: eval143:2125; CHECK: # %bb.0: # %entry2126; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 1432127; CHECK-NEXT: br %r142128entry:2129 %0 = or <16 x i8> %src3, %src22130 %.not = xor <16 x i8> %0, splat(i8 -1)2131 %or19 = or <16 x i8> %.not, %src12132 ret <16 x i8> %or192133}2134 2135define <16 x i8> @eval144(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2136; CHECK-LABEL: eval144:2137; CHECK: # %bb.0: # %entry2138; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 1302139; CHECK-NEXT: br %r142140entry:2141 %0 = xor <16 x i8> %src3, %src22142 %or7.demorgan = or <16 x i8> %0, %src12143 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)2144 ret <16 x i8> %or72145}2146 2147define <16 x i8> @eval145(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2148; CHECK-LABEL: eval145:2149; CHECK: # %bb.0: # %entry2150; CHECK-NEXT: vx %v0, %v28, %v262151; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 12152; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 1432153; CHECK-NEXT: br %r142154entry:2155 %0 = xor <16 x i8> %src3, %src22156 %or7.demorgan = or <16 x i8> %0, %src12157 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)2158 %and8 = and <16 x i8> %src2, %src12159 %and9 = and <16 x i8> %and8, %src32160 %or10 = or <16 x i8> %and9, %or72161 ret <16 x i8> %or102162}2163 2164define <16 x i8> @eval146(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2165; CHECK-LABEL: eval146:2166; CHECK: # %bb.0: # %entry2167; CHECK-NEXT: vx %v0, %v28, %v262168; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 22169; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 1432170; CHECK-NEXT: br %r142171entry:2172 %not2 = xor <16 x i8> %src3, splat(i8 -1)2173 %0 = xor <16 x i8> %src3, %src22174 %or7.demorgan = or <16 x i8> %0, %src12175 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)2176 %1 = and <16 x i8> %not2, %src12177 %and10 = and <16 x i8> %1, %src22178 %or11 = or <16 x i8> %and10, %or72179 ret <16 x i8> %or112180}2181 2182define <16 x i8> @eval147(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2183; CHECK-LABEL: eval147:2184; CHECK: # %bb.0: # %entry2185; CHECK-NEXT: vx %v0, %v28, %v262186; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 1392187; CHECK-NEXT: br %r142188entry:2189 %0 = xor <16 x i8> %src3, %src22190 %or7.demorgan = or <16 x i8> %0, %src12191 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)2192 %and8 = and <16 x i8> %src2, %src12193 %or14 = or <16 x i8> %and8, %or72194 ret <16 x i8> %or142195}2196 2197define <16 x i8> @eval148(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2198; CHECK-LABEL: eval148:2199; CHECK: # %bb.0: # %entry2200; CHECK-NEXT: vx %v0, %v28, %v262201; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 22202; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 1432203; CHECK-NEXT: br %r142204entry:2205 %not1 = xor <16 x i8> %src2, splat(i8 -1)2206 %0 = xor <16 x i8> %src3, %src22207 %or7.demorgan = or <16 x i8> %0, %src12208 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)2209 %and9 = and <16 x i8> %not1, %src12210 %and10 = and <16 x i8> %and9, %src32211 %or11 = or <16 x i8> %and10, %or72212 ret <16 x i8> %or112213}2214 2215define <16 x i8> @eval149(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2216; CHECK-LABEL: eval149:2217; CHECK: # %bb.0: # %entry2218; CHECK-NEXT: vx %v0, %v28, %v262219; CHECK-NEXT: veval %v24, %v28, %v24, %v0, 1392220; CHECK-NEXT: br %r142221entry:2222 %0 = xor <16 x i8> %src3, %src22223 %or7.demorgan = or <16 x i8> %0, %src12224 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)2225 %1 = and <16 x i8> %src3, %src12226 %or14 = or <16 x i8> %1, %or72227 ret <16 x i8> %or142228}2229 2230define <16 x i8> @eval150(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2231; CHECK-LABEL: eval150:2232; CHECK: # %bb.0: # %entry2233; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 1112234; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 22235; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 22236; CHECK-NEXT: veval %v24, %v1, %v2, %v0, 1912237; CHECK-NEXT: br %r142238entry:2239 %not1 = xor <16 x i8> %src2, splat(i8 -1)2240 %not2 = xor <16 x i8> %src3, splat(i8 -1)2241 %0 = xor <16 x i8> %src3, %src22242 %or7.demorgan = or <16 x i8> %0, %src12243 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)2244 %and9 = and <16 x i8> %not1, %src12245 %and10 = and <16 x i8> %and9, %src32246 %or11 = or <16 x i8> %and10, %or72247 %1 = and <16 x i8> %not2, %src12248 %and14 = and <16 x i8> %1, %src22249 %or15 = or <16 x i8> %or11, %and142250 ret <16 x i8> %or152251}2252 2253define <16 x i8> @eval151(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2254; CHECK-LABEL: eval151:2255; CHECK: # %bb.0: # %entry2256; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 22257; CHECK-NEXT: vx %v0, %v28, %v262258; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 312259; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 1432260; CHECK-NEXT: br %r142261entry:2262 %not1 = xor <16 x i8> %src2, splat(i8 -1)2263 %0 = xor <16 x i8> %src3, %src22264 %or7.demorgan = or <16 x i8> %0, %src12265 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)2266 %and9 = and <16 x i8> %not1, %src12267 %and10 = and <16 x i8> %and9, %src32268 %and12 = and <16 x i8> %src2, %src12269 %or11 = or <16 x i8> %and10, %and122270 %or18 = or <16 x i8> %or11, %or72271 ret <16 x i8> %or182272}2273 2274define <16 x i8> @eval152(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2275; CHECK-LABEL: eval152:2276; CHECK: # %bb.0: # %entry2277; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 1112278; CHECK-NEXT: veval %v24, %v28, %v26, %v0, 2342279; CHECK-NEXT: br %r142280entry:2281 %0 = xor <16 x i8> %src3, %src22282 %or7.demorgan = or <16 x i8> %0, %src12283 %1 = or <16 x i8> %src3, %src22284 %2 = and <16 x i8> %or7.demorgan, %12285 %or12 = xor <16 x i8> %2, splat(i8 -1)2286 ret <16 x i8> %or122287}2288 2289define <16 x i8> @eval153(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2290; CHECK-LABEL: eval153:2291; CHECK: # %bb.0: # %entry2292; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 1112293; CHECK-NEXT: vo %v1, %v28, %v262294; CHECK-NEXT: veval %v2, %v26, %v24, %v28, 12295; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 2392296; CHECK-NEXT: br %r142297entry:2298 %0 = xor <16 x i8> %src3, %src22299 %or7.demorgan = or <16 x i8> %0, %src12300 %1 = or <16 x i8> %src3, %src22301 %2 = and <16 x i8> %or7.demorgan, %12302 %or12 = xor <16 x i8> %2, splat(i8 -1)2303 %and13 = and <16 x i8> %src2, %src12304 %and14 = and <16 x i8> %and13, %src32305 %or15 = or <16 x i8> %and14, %or122306 ret <16 x i8> %or152307}2308 2309define <16 x i8> @eval154(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2310; CHECK-LABEL: eval154:2311; CHECK: # %bb.0: # %entry2312; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 1112313; CHECK-NEXT: vo %v1, %v28, %v262314; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 22315; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 2392316; CHECK-NEXT: br %r142317entry:2318 %not2 = xor <16 x i8> %src3, splat(i8 -1)2319 %0 = xor <16 x i8> %src3, %src22320 %or7.demorgan = or <16 x i8> %0, %src12321 %1 = or <16 x i8> %src3, %src22322 %2 = and <16 x i8> %or7.demorgan, %12323 %or12 = xor <16 x i8> %2, splat(i8 -1)2324 %3 = and <16 x i8> %not2, %src12325 %and15 = and <16 x i8> %3, %src22326 %or16 = or <16 x i8> %and15, %or122327 ret <16 x i8> %or162328}2329 2330define <16 x i8> @eval155(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2331; CHECK-LABEL: eval155:2332; CHECK: # %bb.0: # %entry2333; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 1112334; CHECK-NEXT: vo %v1, %v28, %v262335; CHECK-NEXT: vn %v2, %v26, %v242336; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 2392337; CHECK-NEXT: br %r142338entry:2339 %0 = xor <16 x i8> %src3, %src22340 %or7.demorgan = or <16 x i8> %0, %src12341 %1 = or <16 x i8> %src3, %src22342 %2 = and <16 x i8> %or7.demorgan, %12343 %or12 = xor <16 x i8> %2, splat(i8 -1)2344 %and13 = and <16 x i8> %src2, %src12345 %or19 = or <16 x i8> %and13, %or122346 ret <16 x i8> %or192347}2348 2349define <16 x i8> @eval156(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2350; CHECK-LABEL: eval156:2351; CHECK: # %bb.0: # %entry2352; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 1112353; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 1742354; CHECK-NEXT: br %r142355entry:2356 %not1 = xor <16 x i8> %src2, splat(i8 -1)2357 %0 = xor <16 x i8> %src3, %src22358 %or7.demorgan = or <16 x i8> %0, %src12359 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)2360 %and9 = and <16 x i8> %not1, %src12361 %or16 = or <16 x i8> %and9, %or72362 ret <16 x i8> %or162363}2364 2365define <16 x i8> @eval157(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2366; CHECK-LABEL: eval157:2367; CHECK: # %bb.0: # %entry2368; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 12369; CHECK-NEXT: vx %v0, %v28, %v262370; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 472371; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 1432372; CHECK-NEXT: br %r142373entry:2374 %not1 = xor <16 x i8> %src2, splat(i8 -1)2375 %0 = xor <16 x i8> %src3, %src22376 %or7.demorgan = or <16 x i8> %0, %src12377 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)2378 %and9 = and <16 x i8> %not1, %src12379 %and17 = and <16 x i8> %src2, %src12380 %and18 = and <16 x i8> %and17, %src32381 %or16 = or <16 x i8> %and18, %and92382 %or19 = or <16 x i8> %or16, %or72383 ret <16 x i8> %or192384}2385 2386define <16 x i8> @eval158(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2387; CHECK-LABEL: eval158:2388; CHECK: # %bb.0: # %entry2389; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 1112390; CHECK-NEXT: vn %v1, %v28, %v262391; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 1742392; CHECK-NEXT: br %r142393entry:2394 %0 = xor <16 x i8> %src3, %src22395 %or7.demorgan = or <16 x i8> %0, %src12396 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)2397 %and938.demorgan = and <16 x i8> %src3, %src22398 %and938 = xor <16 x i8> %and938.demorgan, splat(i8 -1)2399 %1 = and <16 x i8> %and938, %src12400 %or20 = or <16 x i8> %1, %or72401 ret <16 x i8> %or202402}2403 2404define <16 x i8> @eval159(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2405; CHECK-LABEL: eval159:2406; CHECK: # %bb.0: # %entry2407; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 1592408; CHECK-NEXT: br %r142409entry:2410 %0 = xor <16 x i8> %src2, %src32411 %.not = xor <16 x i8> %0, splat(i8 -1)2412 %or23 = or <16 x i8> %.not, %src12413 ret <16 x i8> %or232414}2415 2416define <16 x i8> @eval160(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2417; CHECK-LABEL: eval160:2418; CHECK: # %bb.0: # %entry2419; CHECK-NEXT: vno %v24, %v28, %v242420; CHECK-NEXT: br %r142421entry:2422 %0 = or <16 x i8> %src3, %src12423 %1 = xor <16 x i8> %0, splat(i8 -1)2424 ret <16 x i8> %12425}2426 2427define <16 x i8> @eval161(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2428; CHECK-LABEL: eval161:2429; CHECK: # %bb.0: # %entry2430; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 1372431; CHECK-NEXT: br %r142432entry:2433 %0 = or <16 x i8> %src3, %src12434 %1 = xor <16 x i8> %0, splat(i8 -1)2435 %and9 = and <16 x i8> %src2, %src12436 %and10 = and <16 x i8> %and9, %src32437 %or11 = or <16 x i8> %and10, %12438 ret <16 x i8> %or112439}2440 2441define <16 x i8> @eval162(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2442; CHECK-LABEL: eval162:2443; CHECK: # %bb.0: # %entry2444; CHECK-NEXT: veval %v0, %v28, %v24, %v26, 1272445; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 1742446; CHECK-NEXT: br %r142447entry:2448 %not2 = xor <16 x i8> %src3, splat(i8 -1)2449 %0 = or <16 x i8> %src3, %src12450 %and3.demorgan = or <16 x i8> %0, %src22451 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)2452 %1 = and <16 x i8> %not2, %src22453 %or12 = or <16 x i8> %1, %and32454 ret <16 x i8> %or122455}2456 2457define <16 x i8> @eval163(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2458; CHECK-LABEL: eval163:2459; CHECK: # %bb.0: # %entry2460; CHECK-NEXT: vo %v0, %v26, %v242461; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 112462; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 1432463; CHECK-NEXT: br %r142464entry:2465 %0 = or <16 x i8> %src2, %src12466 %and3.demorgan = or <16 x i8> %0, %src32467 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)2468 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2469 %and729 = or <16 x i8> %src3.not, %src12470 %1 = and <16 x i8> %and729, %src22471 %or15 = or <16 x i8> %1, %and32472 ret <16 x i8> %or152473}2474 2475define <16 x i8> @eval164(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2476; CHECK-LABEL: eval164:2477; CHECK: # %bb.0: # %entry2478; CHECK-NEXT: vo %v0, %v28, %v242479; CHECK-NEXT: vx %v1, %v28, %v242480; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 2342481; CHECK-NEXT: br %r142482entry:2483 %0 = or <16 x i8> %src3, %src12484 %1 = xor <16 x i8> %src3, %src12485 %2 = or <16 x i8> %1, %src22486 %3 = and <16 x i8> %0, %22487 %or12 = xor <16 x i8> %3, splat(i8 -1)2488 ret <16 x i8> %or122489}2490 2491define <16 x i8> @eval165(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2492; CHECK-LABEL: eval165:2493; CHECK: # %bb.0: # %entry2494; CHECK-NEXT: vnx %v24, %v28, %v242495; CHECK-NEXT: br %r142496entry:2497 %0 = xor <16 x i8> %src3, %src12498 %or15 = xor <16 x i8> %0, splat(i8 -1)2499 ret <16 x i8> %or152500}2501 2502define <16 x i8> @eval166(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2503; CHECK-LABEL: eval166:2504; CHECK: # %bb.0: # %entry2505; CHECK-NEXT: vo %v0, %v28, %v242506; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 22507; CHECK-NEXT: veval %v2, %v26, %v28, %v24, 1112508; CHECK-NEXT: veval %v24, %v1, %v0, %v2, 2392509; CHECK-NEXT: br %r142510entry:2511 %not2 = xor <16 x i8> %src3, splat(i8 -1)2512 %0 = or <16 x i8> %src3, %src12513 %1 = and <16 x i8> %not2, %src12514 %and15 = and <16 x i8> %1, %src22515 %2 = xor <16 x i8> %src3, %src12516 %3 = or <16 x i8> %2, %src22517 %4 = and <16 x i8> %0, %32518 %or12 = xor <16 x i8> %4, splat(i8 -1)2519 %or16 = or <16 x i8> %and15, %or122520 ret <16 x i8> %or162521}2522 2523define <16 x i8> @eval167(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2524; CHECK-LABEL: eval167:2525; CHECK: # %bb.0: # %entry2526; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 22527; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 312528; CHECK-NEXT: veval %v24, %v0, %v28, %v24, 1432529; CHECK-NEXT: br %r142530entry:2531 %not1 = xor <16 x i8> %src2, splat(i8 -1)2532 %0 = or <16 x i8> %src3, %src12533 %1 = xor <16 x i8> %0, splat(i8 -1)2534 %and10 = and <16 x i8> %not1, %src12535 %and11 = and <16 x i8> %and10, %src32536 %and13 = and <16 x i8> %src2, %src12537 %or8 = or <16 x i8> %and11, %and132538 %or19 = or <16 x i8> %or8, %12539 ret <16 x i8> %or192540}2541 2542define <16 x i8> @eval168(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2543; CHECK-LABEL: eval168:2544; CHECK: # %bb.0: # %entry2545; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 1682546; CHECK-NEXT: br %r142547entry:2548 %0 = and <16 x i8> %src2, %src12549 %1 = or <16 x i8> %0, %src32550 %or13 = xor <16 x i8> %1, splat(i8 -1)2551 ret <16 x i8> %or132552}2553 2554define <16 x i8> @eval169(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2555; CHECK-LABEL: eval169:2556; CHECK: # %bb.0: # %entry2557; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 1692558; CHECK-NEXT: br %r142559entry:2560 %0 = and <16 x i8> %src2, %src12561 %1 = xor <16 x i8> %0, %src32562 %or16 = xor <16 x i8> %1, splat(i8 -1)2563 ret <16 x i8> %or162564}2565 2566define <16 x i8> @eval170(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2567; CHECK-LABEL: eval170:2568; CHECK: # %bb.0: # %entry2569; CHECK-NEXT: vno %v24, %v28, %v282570; CHECK-NEXT: br %r142571entry:2572 %not2 = xor <16 x i8> %src3, splat(i8 -1)2573 ret <16 x i8> %not22574}2575 2576define <16 x i8> @eval171(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2577; CHECK-LABEL: eval171:2578; CHECK: # %bb.0: # %entry2579; CHECK-NEXT: voc %v0, %v26, %v282580; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 1392581; CHECK-NEXT: br %r142582entry:2583 %0 = or <16 x i8> %src3, %src12584 %1 = xor <16 x i8> %0, splat(i8 -1)2585 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2586 %and1238 = or <16 x i8> %src3.not, %src22587 %2 = and <16 x i8> %and1238, %src12588 %or20 = or <16 x i8> %2, %12589 ret <16 x i8> %or202590}2591 2592define <16 x i8> @eval172(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2593; CHECK-LABEL: eval172:2594; CHECK: # %bb.0: # %entry2595; CHECK-NEXT: vo %v0, %v28, %v242596; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 1742597; CHECK-NEXT: br %r142598entry:2599 %not1 = xor <16 x i8> %src2, splat(i8 -1)2600 %0 = or <16 x i8> %src3, %src12601 %1 = xor <16 x i8> %0, splat(i8 -1)2602 %and10 = and <16 x i8> %not1, %src12603 %or17 = or <16 x i8> %and10, %12604 ret <16 x i8> %or172605}2606 2607define <16 x i8> @eval173(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2608; CHECK-LABEL: eval173:2609; CHECK: # %bb.0: # %entry2610; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 12611; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 472612; CHECK-NEXT: veval %v24, %v0, %v28, %v24, 1432613; CHECK-NEXT: br %r142614entry:2615 %not1 = xor <16 x i8> %src2, splat(i8 -1)2616 %0 = or <16 x i8> %src3, %src12617 %1 = xor <16 x i8> %0, splat(i8 -1)2618 %and10 = and <16 x i8> %not1, %src12619 %and18 = and <16 x i8> %src2, %src12620 %and19 = and <16 x i8> %and18, %src32621 %or8 = or <16 x i8> %and19, %and102622 %or20 = or <16 x i8> %or8, %12623 ret <16 x i8> %or202624}2625 2626define <16 x i8> @eval174(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2627; CHECK-LABEL: eval174:2628; CHECK: # %bb.0: # %entry2629; CHECK-NEXT: vo %v0, %v28, %v242630; CHECK-NEXT: vn %v1, %v28, %v262631; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 1742632; CHECK-NEXT: br %r142633entry:2634 %0 = or <16 x i8> %src3, %src12635 %1 = xor <16 x i8> %0, splat(i8 -1)2636 %and1039.demorgan = and <16 x i8> %src3, %src22637 %and1039 = xor <16 x i8> %and1039.demorgan, splat(i8 -1)2638 %2 = and <16 x i8> %and1039, %src12639 %or21 = or <16 x i8> %2, %12640 ret <16 x i8> %or212641}2642 2643define <16 x i8> @eval175(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2644; CHECK-LABEL: eval175:2645; CHECK: # %bb.0: # %entry2646; CHECK-NEXT: voc %v24, %v24, %v282647; CHECK-NEXT: br %r142648entry:2649 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2650 %or24 = or <16 x i8> %src3.not, %src12651 ret <16 x i8> %or242652}2653 2654define <16 x i8> @eval176(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2655; CHECK-LABEL: eval176:2656; CHECK: # %bb.0: # %entry2657; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 1382658; CHECK-NEXT: br %r142659entry:2660 %not = xor <16 x i8> %src1, splat(i8 -1)2661 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2662 %and522 = or <16 x i8> %src3.not, %src22663 %or12 = and <16 x i8> %and522, %not2664 ret <16 x i8> %or122665}2666 2667define <16 x i8> @eval177(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2668; CHECK-LABEL: eval177:2669; CHECK: # %bb.0: # %entry2670; CHECK-NEXT: voc %v0, %v26, %v282671; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 12672; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 472673; CHECK-NEXT: br %r142674entry:2675 %not = xor <16 x i8> %src1, splat(i8 -1)2676 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2677 %and529 = or <16 x i8> %src3.not, %src22678 %or12 = and <16 x i8> %and529, %not2679 %and13 = and <16 x i8> %src2, %src12680 %and14 = and <16 x i8> %and13, %src32681 %or15 = or <16 x i8> %or12, %and142682 ret <16 x i8> %or152683}2684 2685define <16 x i8> @eval178(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2686; CHECK-LABEL: eval178:2687; CHECK: # %bb.0: # %entry2688; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 1382689; CHECK-NEXT: vn %v1, %v26, %v242690; CHECK-NEXT: veval %v24, %v0, %v1, %v28, 472691; CHECK-NEXT: br %r142692entry:2693 %not = xor <16 x i8> %src1, splat(i8 -1)2694 %not2 = xor <16 x i8> %src3, splat(i8 -1)2695 %and530 = or <16 x i8> %not2, %src22696 %or12 = and <16 x i8> %and530, %not2697 %0 = and <16 x i8> %src2, %src12698 %and15 = and <16 x i8> %0, %not22699 %or16 = or <16 x i8> %or12, %and152700 ret <16 x i8> %or162701}2702 2703define <16 x i8> @eval179(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2704; CHECK-LABEL: eval179:2705; CHECK: # %bb.0: # %entry2706; CHECK-NEXT: voc %v0, %v26, %v282707; CHECK-NEXT: vsel %v24, %v26, %v0, %v242708; CHECK-NEXT: br %r142709entry:2710 %not = xor <16 x i8> %src1, splat(i8 -1)2711 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2712 %and537 = or <16 x i8> %src3.not, %src22713 %or12 = and <16 x i8> %and537, %not2714 %and13 = and <16 x i8> %src2, %src12715 %or19 = or <16 x i8> %or12, %and132716 ret <16 x i8> %or192717}2718 2719define <16 x i8> @eval180(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2720; CHECK-LABEL: eval180:2721; CHECK: # %bb.0: # %entry2722; CHECK-NEXT: voc %v0, %v26, %v282723; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 22724; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 472725; CHECK-NEXT: br %r142726entry:2727 %not = xor <16 x i8> %src1, splat(i8 -1)2728 %not1 = xor <16 x i8> %src2, splat(i8 -1)2729 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2730 %and530 = or <16 x i8> %src3.not, %src22731 %or12 = and <16 x i8> %and530, %not2732 %and14 = and <16 x i8> %not1, %src12733 %and15 = and <16 x i8> %and14, %src32734 %or16 = or <16 x i8> %or12, %and152735 ret <16 x i8> %or162736}2737 2738define <16 x i8> @eval181(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2739; CHECK-LABEL: eval181:2740; CHECK: # %bb.0: # %entry2741; CHECK-NEXT: voc %v0, %v26, %v282742; CHECK-NEXT: vsel %v24, %v28, %v0, %v242743; CHECK-NEXT: br %r142744entry:2745 %not = xor <16 x i8> %src1, splat(i8 -1)2746 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2747 %and537 = or <16 x i8> %src3.not, %src22748 %or12 = and <16 x i8> %and537, %not2749 %0 = and <16 x i8> %src3, %src12750 %or19 = or <16 x i8> %or12, %02751 ret <16 x i8> %or192752}2753 2754define <16 x i8> @eval182(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2755; CHECK-LABEL: eval182:2756; CHECK: # %bb.0: # %entry2757; CHECK-NEXT: voc %v0, %v26, %v282758; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 22759; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 472760; CHECK-NEXT: vn %v1, %v26, %v242761; CHECK-NEXT: veval %v24, %v0, %v1, %v28, 472762; CHECK-NEXT: br %r142763entry:2764 %not = xor <16 x i8> %src1, splat(i8 -1)2765 %not1 = xor <16 x i8> %src2, splat(i8 -1)2766 %not2 = xor <16 x i8> %src3, splat(i8 -1)2767 %and538 = or <16 x i8> %not2, %src22768 %or12 = and <16 x i8> %and538, %not2769 %and14 = and <16 x i8> %not1, %src12770 %and15 = and <16 x i8> %and14, %src32771 %or16 = or <16 x i8> %or12, %and152772 %0 = and <16 x i8> %src2, %src12773 %and19 = and <16 x i8> %0, %not22774 %or20 = or <16 x i8> %or16, %and192775 ret <16 x i8> %or202776}2777 2778define <16 x i8> @eval183(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2779; CHECK-LABEL: eval183:2780; CHECK: # %bb.0: # %entry2781; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 22782; CHECK-NEXT: voc %v0, %v26, %v282783; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 312784; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 472785; CHECK-NEXT: br %r142786entry:2787 %not = xor <16 x i8> %src1, splat(i8 -1)2788 %not1 = xor <16 x i8> %src2, splat(i8 -1)2789 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2790 %and545 = or <16 x i8> %src3.not, %src22791 %or12 = and <16 x i8> %and545, %not2792 %and14 = and <16 x i8> %not1, %src12793 %and15 = and <16 x i8> %and14, %src32794 %and17 = and <16 x i8> %src2, %src12795 %or16 = or <16 x i8> %and15, %and172796 %or23 = or <16 x i8> %or16, %or122797 ret <16 x i8> %or232798}2799 2800define <16 x i8> @eval184(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2801; CHECK-LABEL: eval184:2802; CHECK: # %bb.0: # %entry2803; CHECK-NEXT: voc %v0, %v26, %v282804; CHECK-NEXT: vno %v1, %v28, %v262805; CHECK-NEXT: vsel %v24, %v1, %v0, %v242806; CHECK-NEXT: br %r142807entry:2808 %not = xor <16 x i8> %src1, splat(i8 -1)2809 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2810 %and531 = or <16 x i8> %src3.not, %src22811 %or12 = and <16 x i8> %and531, %not2812 %0 = or <16 x i8> %src3, %src22813 %1 = xor <16 x i8> %0, splat(i8 -1)2814 %and16 = and <16 x i8> %1, %src12815 %or17 = or <16 x i8> %or12, %and162816 ret <16 x i8> %or172817}2818 2819define <16 x i8> @eval185(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2820; CHECK-LABEL: eval185:2821; CHECK: # %bb.0: # %entry2822; CHECK-NEXT: voc %v0, %v26, %v282823; CHECK-NEXT: vnx %v1, %v28, %v262824; CHECK-NEXT: vsel %v24, %v1, %v0, %v242825; CHECK-NEXT: br %r142826entry:2827 %not = xor <16 x i8> %src1, splat(i8 -1)2828 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2829 %and538 = or <16 x i8> %src3.not, %src22830 %or12 = and <16 x i8> %and538, %not2831 %0 = xor <16 x i8> %src3, %src22832 %1 = xor <16 x i8> %0, splat(i8 -1)2833 %or17 = and <16 x i8> %1, %src12834 %or20 = or <16 x i8> %or17, %or122835 ret <16 x i8> %or202836}2837 2838define <16 x i8> @eval186(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2839; CHECK-LABEL: eval186:2840; CHECK: # %bb.0: # %entry2841; CHECK-NEXT: vno %v0, %v28, %v282842; CHECK-NEXT: voc %v1, %v26, %v282843; CHECK-NEXT: vsel %v24, %v0, %v1, %v242844; CHECK-NEXT: br %r142845entry:2846 %not = xor <16 x i8> %src1, splat(i8 -1)2847 %not2 = xor <16 x i8> %src3, splat(i8 -1)2848 %and539 = or <16 x i8> %not2, %src22849 %or12 = and <16 x i8> %and539, %not2850 %0 = and <16 x i8> %not2, %src12851 %or21 = or <16 x i8> %or12, %02852 ret <16 x i8> %or212853}2854 2855define <16 x i8> @eval187(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2856; CHECK-LABEL: eval187:2857; CHECK: # %bb.0: # %entry2858; CHECK-NEXT: voc %v24, %v26, %v282859; CHECK-NEXT: br %r142860entry:2861 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2862 %and546 = or <16 x i8> %src3.not, %src22863 ret <16 x i8> %and5462864}2865 2866define <16 x i8> @eval188(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2867; CHECK-LABEL: eval188:2868; CHECK: # %bb.0: # %entry2869; CHECK-NEXT: vno %v0, %v26, %v262870; CHECK-NEXT: voc %v1, %v26, %v282871; CHECK-NEXT: vsel %v24, %v0, %v1, %v242872; CHECK-NEXT: br %r142873entry:2874 %not = xor <16 x i8> %src1, splat(i8 -1)2875 %not1 = xor <16 x i8> %src2, splat(i8 -1)2876 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2877 %and539 = or <16 x i8> %src3.not, %src22878 %or12 = and <16 x i8> %and539, %not2879 %and14 = and <16 x i8> %not1, %src12880 %or21 = or <16 x i8> %or12, %and142881 ret <16 x i8> %or212882}2883 2884define <16 x i8> @eval189(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2885; CHECK-LABEL: eval189:2886; CHECK: # %bb.0: # %entry2887; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 12888; CHECK-NEXT: voc %v0, %v26, %v282889; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 472890; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 472891; CHECK-NEXT: br %r142892entry:2893 %not = xor <16 x i8> %src1, splat(i8 -1)2894 %not1 = xor <16 x i8> %src2, splat(i8 -1)2895 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2896 %and546 = or <16 x i8> %src3.not, %src22897 %or12 = and <16 x i8> %and546, %not2898 %and14 = and <16 x i8> %not1, %src12899 %and22 = and <16 x i8> %src2, %src12900 %and23 = and <16 x i8> %and22, %src32901 %or21 = or <16 x i8> %and23, %and142902 %or24 = or <16 x i8> %or21, %or122903 ret <16 x i8> %or242904}2905 2906define <16 x i8> @eval190(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2907; CHECK-LABEL: eval190:2908; CHECK: # %bb.0: # %entry2909; CHECK-NEXT: voc %v0, %v26, %v282910; CHECK-NEXT: vnn %v1, %v28, %v262911; CHECK-NEXT: vsel %v24, %v1, %v0, %v242912; CHECK-NEXT: br %r142913entry:2914 %not = xor <16 x i8> %src1, splat(i8 -1)2915 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2916 %and547 = or <16 x i8> %src3.not, %src22917 %or12 = and <16 x i8> %and547, %not2918 %and1448.demorgan = and <16 x i8> %src3, %src22919 %and1448 = xor <16 x i8> %and1448.demorgan, splat(i8 -1)2920 %0 = and <16 x i8> %and1448, %src12921 %or25 = or <16 x i8> %or12, %02922 ret <16 x i8> %or252923}2924 2925define <16 x i8> @eval191(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2926; CHECK-LABEL: eval191:2927; CHECK: # %bb.0: # %entry2928; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 1912929; CHECK-NEXT: br %r142930entry:2931 %src3.not = xor <16 x i8> %src3, splat(i8 -1)2932 %and554 = or <16 x i8> %src2, %src12933 %or28 = or <16 x i8> %and554, %src3.not2934 ret <16 x i8> %or282935}2936 2937define <16 x i8> @eval192(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2938; CHECK-LABEL: eval192:2939; CHECK: # %bb.0: # %entry2940; CHECK-NEXT: vno %v24, %v26, %v242941; CHECK-NEXT: br %r142942entry:2943 %and.demorgan = or <16 x i8> %src2, %src12944 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)2945 ret <16 x i8> %and2946}2947 2948define <16 x i8> @eval193(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2949; CHECK-LABEL: eval193:2950; CHECK: # %bb.0: # %entry2951; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 1372952; CHECK-NEXT: br %r142953entry:2954 %and.demorgan = or <16 x i8> %src2, %src12955 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)2956 %0 = and <16 x i8> %src1, %src32957 %and10 = and <16 x i8> %0, %src22958 %or11 = or <16 x i8> %and10, %and2959 ret <16 x i8> %or112960}2961 2962define <16 x i8> @eval194(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2963; CHECK-LABEL: eval194:2964; CHECK: # %bb.0: # %entry2965; CHECK-NEXT: vno %v0, %v28, %v282966; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 1372967; CHECK-NEXT: br %r142968entry:2969 %and.demorgan = or <16 x i8> %src2, %src12970 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)2971 %not2 = xor <16 x i8> %src3, splat(i8 -1)2972 %0 = and <16 x i8> %not2, %src12973 %and11 = and <16 x i8> %0, %src22974 %or12 = or <16 x i8> %and11, %and2975 ret <16 x i8> %or122976}2977 2978define <16 x i8> @eval195(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2979; CHECK-LABEL: eval195:2980; CHECK: # %bb.0: # %entry2981; CHECK-NEXT: vnx %v24, %v24, %v262982; CHECK-NEXT: br %r142983entry:2984 %0 = xor <16 x i8> %src1, %src22985 %or15 = xor <16 x i8> %0, splat(i8 -1)2986 ret <16 x i8> %or152987}2988 2989define <16 x i8> @eval196(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {2990; CHECK-LABEL: eval196:2991; CHECK: # %bb.0: # %entry2992; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 1382993; CHECK-NEXT: br %r142994entry:2995 %not = xor <16 x i8> %src1, splat(i8 -1)2996 %not1 = xor <16 x i8> %src2, splat(i8 -1)2997 %and22 = or <16 x i8> %not, %src32998 %or12 = and <16 x i8> %and22, %not12999 ret <16 x i8> %or123000}3001 3002define <16 x i8> @eval197(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3003; CHECK-LABEL: eval197:3004; CHECK: # %bb.0: # %entry3005; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 1393006; CHECK-NEXT: br %r143007entry:3008 %and.demorgan = or <16 x i8> %src2, %src13009 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)3010 %0 = and <16 x i8> %src3, %src13011 %or15 = or <16 x i8> %0, %and3012 ret <16 x i8> %or153013}3014 3015define <16 x i8> @eval198(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3016; CHECK-LABEL: eval198:3017; CHECK: # %bb.0: # %entry3018; CHECK-NEXT: vno %v0, %v26, %v263019; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 23020; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 473021; CHECK-NEXT: vnc %v1, %v24, %v283022; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 313023; CHECK-NEXT: br %r143024entry:3025 %not = xor <16 x i8> %src1, splat(i8 -1)3026 %not1 = xor <16 x i8> %src2, splat(i8 -1)3027 %and = and <16 x i8> %not1, %not3028 %not2 = xor <16 x i8> %src3, splat(i8 -1)3029 %and10 = and <16 x i8> %not1, %src13030 %and11 = and <16 x i8> %and10, %src33031 %or12 = or <16 x i8> %and11, %and3032 %0 = and <16 x i8> %not2, %src13033 %and15 = and <16 x i8> %0, %src23034 %or16 = or <16 x i8> %or12, %and153035 ret <16 x i8> %or163036}3037 3038define <16 x i8> @eval199(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3039; CHECK-LABEL: eval199:3040; CHECK: # %bb.0: # %entry3041; CHECK-NEXT: voc %v0, %v28, %v243042; CHECK-NEXT: vsel %v24, %v24, %v0, %v263043; CHECK-NEXT: br %r143044entry:3045 %not = xor <16 x i8> %src1, splat(i8 -1)3046 %not1 = xor <16 x i8> %src2, splat(i8 -1)3047 %and37 = or <16 x i8> %not, %src33048 %or12 = and <16 x i8> %and37, %not13049 %and13 = and <16 x i8> %src2, %src13050 %or19 = or <16 x i8> %or12, %and133051 ret <16 x i8> %or193052}3053 3054define <16 x i8> @eval200(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3055; CHECK-LABEL: eval200:3056; CHECK: # %bb.0: # %entry3057; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 1683058; CHECK-NEXT: br %r143059entry:3060 %0 = and <16 x i8> %src3, %src13061 %1 = or <16 x i8> %0, %src23062 %or13 = xor <16 x i8> %1, splat(i8 -1)3063 ret <16 x i8> %or133064}3065 3066define <16 x i8> @eval201(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3067; CHECK-LABEL: eval201:3068; CHECK: # %bb.0: # %entry3069; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 1693070; CHECK-NEXT: br %r143071entry:3072 %0 = and <16 x i8> %src3, %src13073 %1 = xor <16 x i8> %0, %src23074 %or16 = xor <16 x i8> %1, splat(i8 -1)3075 ret <16 x i8> %or163076}3077 3078define <16 x i8> @eval202(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3079; CHECK-LABEL: eval202:3080; CHECK: # %bb.0: # %entry3081; CHECK-NEXT: vn %v0, %v28, %v243082; CHECK-NEXT: vnc %v1, %v24, %v283083; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 1393084; CHECK-NEXT: br %r143085entry:3086 %not2 = xor <16 x i8> %src3, splat(i8 -1)3087 %0 = and <16 x i8> %src3, %src13088 %1 = or <16 x i8> %0, %src23089 %or13 = xor <16 x i8> %1, splat(i8 -1)3090 %2 = and <16 x i8> %not2, %src13091 %and16 = and <16 x i8> %2, %src23092 %or17 = or <16 x i8> %and16, %or133093 ret <16 x i8> %or173094}3095 3096define <16 x i8> @eval203(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3097; CHECK-LABEL: eval203:3098; CHECK: # %bb.0: # %entry3099; CHECK-NEXT: vn %v0, %v28, %v243100; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 1393101; CHECK-NEXT: br %r143102entry:3103 %0 = and <16 x i8> %src3, %src13104 %1 = or <16 x i8> %0, %src23105 %or13 = xor <16 x i8> %1, splat(i8 -1)3106 %and14 = and <16 x i8> %src2, %src13107 %or20 = or <16 x i8> %and14, %or133108 ret <16 x i8> %or203109}3110 3111define <16 x i8> @eval204(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3112; CHECK-LABEL: eval204:3113; CHECK: # %bb.0: # %entry3114; CHECK-NEXT: vno %v24, %v26, %v263115; CHECK-NEXT: br %r143116entry:3117 %not1 = xor <16 x i8> %src2, splat(i8 -1)3118 ret <16 x i8> %not13119}3120 3121define <16 x i8> @eval205(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3122; CHECK-LABEL: eval205:3123; CHECK: # %bb.0: # %entry3124; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 1713125; CHECK-NEXT: br %r143126entry:3127 %not1 = xor <16 x i8> %src2, splat(i8 -1)3128 %0 = and <16 x i8> %src3, %src13129 %or20 = or <16 x i8> %0, %not13130 ret <16 x i8> %or203131}3132 3133define <16 x i8> @eval206(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3134; CHECK-LABEL: eval206:3135; CHECK: # %bb.0: # %entry3136; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 1743137; CHECK-NEXT: br %r143138entry:3139 %not1 = xor <16 x i8> %src2, splat(i8 -1)3140 %not2 = xor <16 x i8> %src3, splat(i8 -1)3141 %0 = and <16 x i8> %not2, %src13142 %or21 = or <16 x i8> %0, %not13143 ret <16 x i8> %or213144}3145 3146define <16 x i8> @eval207(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3147; CHECK-LABEL: eval207:3148; CHECK: # %bb.0: # %entry3149; CHECK-NEXT: voc %v24, %v24, %v263150; CHECK-NEXT: br %r143151entry:3152 %not1 = xor <16 x i8> %src2, splat(i8 -1)3153 %or24 = or <16 x i8> %not1, %src13154 ret <16 x i8> %or243155}3156 3157define <16 x i8> @eval208(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3158; CHECK-LABEL: eval208:3159; CHECK: # %bb.0: # %entry3160; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 1383161; CHECK-NEXT: br %r143162entry:3163 %not = xor <16 x i8> %src1, splat(i8 -1)3164 %not1 = xor <16 x i8> %src2, splat(i8 -1)3165 %and1122 = or <16 x i8> %not1, %src33166 %or12 = and <16 x i8> %and1122, %not3167 ret <16 x i8> %or123168}3169 3170define <16 x i8> @eval209(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3171; CHECK-LABEL: eval209:3172; CHECK: # %bb.0: # %entry3173; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 1393174; CHECK-NEXT: br %r143175entry:3176 %and.demorgan = or <16 x i8> %src2, %src13177 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)3178 %0 = and <16 x i8> %src3, %src23179 %or15 = or <16 x i8> %0, %and3180 ret <16 x i8> %or153181}3182 3183define <16 x i8> @eval210(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3184; CHECK-LABEL: eval210:3185; CHECK: # %bb.0: # %entry3186; CHECK-NEXT: vno %v0, %v26, %v263187; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 23188; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 473189; CHECK-NEXT: vnc %v1, %v24, %v283190; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 313191; CHECK-NEXT: br %r143192entry:3193 %not = xor <16 x i8> %src1, splat(i8 -1)3194 %not1 = xor <16 x i8> %src2, splat(i8 -1)3195 %and = and <16 x i8> %not1, %not3196 %not2 = xor <16 x i8> %src3, splat(i8 -1)3197 %and10 = and <16 x i8> %not, %src23198 %and11 = and <16 x i8> %and10, %src33199 %or12 = or <16 x i8> %and11, %and3200 %0 = and <16 x i8> %not2, %src13201 %and15 = and <16 x i8> %0, %src23202 %or16 = or <16 x i8> %or12, %and153203 ret <16 x i8> %or163204}3205 3206define <16 x i8> @eval211(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3207; CHECK-LABEL: eval211:3208; CHECK: # %bb.0: # %entry3209; CHECK-NEXT: voc %v0, %v28, %v263210; CHECK-NEXT: vsel %v24, %v26, %v0, %v243211; CHECK-NEXT: br %r143212entry:3213 %not = xor <16 x i8> %src1, splat(i8 -1)3214 %not1 = xor <16 x i8> %src2, splat(i8 -1)3215 %and1137 = or <16 x i8> %not1, %src33216 %or12 = and <16 x i8> %and1137, %not3217 %and13 = and <16 x i8> %src2, %src13218 %or19 = or <16 x i8> %or12, %and133219 ret <16 x i8> %or193220}3221 3222define <16 x i8> @eval212(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3223; CHECK-LABEL: eval212:3224; CHECK: # %bb.0: # %entry3225; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 1423226; CHECK-NEXT: br %r143227entry:3228 %and.demorgan = or <16 x i8> %src2, %src13229 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)3230 %0 = xor <16 x i8> %src2, %src13231 %1 = and <16 x i8> %0, %src33232 %or16 = or <16 x i8> %1, %and3233 ret <16 x i8> %or163234}3235 3236define <16 x i8> @eval213(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3237; CHECK-LABEL: eval213:3238; CHECK: # %bb.0: # %entry3239; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 1433240; CHECK-NEXT: br %r143241entry:3242 %and.demorgan = or <16 x i8> %src2, %src13243 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)3244 %or19 = or <16 x i8> %and, %src33245 ret <16 x i8> %or193246}3247 3248define <16 x i8> @eval214(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3249; CHECK-LABEL: eval214:3250; CHECK: # %bb.0: # %entry3251; CHECK-NEXT: vo %v0, %v26, %v243252; CHECK-NEXT: veval %v1, %v28, %v26, %v24, 63253; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 23254; CHECK-NEXT: veval %v24, %v1, %v2, %v0, 1913255; CHECK-NEXT: br %r143256entry:3257 %and.demorgan = or <16 x i8> %src2, %src13258 %and = xor <16 x i8> %and.demorgan, splat(i8 -1)3259 %not2 = xor <16 x i8> %src3, splat(i8 -1)3260 %0 = xor <16 x i8> %src2, %src13261 %1 = and <16 x i8> %0, %src33262 %or16 = or <16 x i8> %1, %and3263 %2 = and <16 x i8> %not2, %src13264 %and19 = and <16 x i8> %2, %src23265 %or20 = or <16 x i8> %or16, %and193266 ret <16 x i8> %or203267}3268 3269define <16 x i8> @eval215(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3270; CHECK-LABEL: eval215:3271; CHECK: # %bb.0: # %entry3272; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 1593273; CHECK-NEXT: br %r143274entry:3275 %0 = xor <16 x i8> %src2, %src13276 %or16 = xor <16 x i8> %0, splat(i8 -1)3277 %or23 = or <16 x i8> %or16, %src33278 ret <16 x i8> %or233279}3280 3281define <16 x i8> @eval216(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3282; CHECK-LABEL: eval216:3283; CHECK: # %bb.0: # %entry3284; CHECK-NEXT: vno %v0, %v26, %v263285; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 23286; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 473287; CHECK-NEXT: vo %v1, %v28, %v263288; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 473289; CHECK-NEXT: br %r143290entry:3291 %not = xor <16 x i8> %src1, splat(i8 -1)3292 %not1 = xor <16 x i8> %src2, splat(i8 -1)3293 %and = and <16 x i8> %not1, %not3294 %and10 = and <16 x i8> %not, %src23295 %and11 = and <16 x i8> %and10, %src33296 %or12 = or <16 x i8> %and11, %and3297 %0 = or <16 x i8> %src3, %src23298 %1 = xor <16 x i8> %0, splat(i8 -1)3299 %and16 = and <16 x i8> %1, %src13300 %or17 = or <16 x i8> %or12, %and163301 ret <16 x i8> %or173302}3303 3304define <16 x i8> @eval217(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3305; CHECK-LABEL: eval217:3306; CHECK: # %bb.0: # %entry3307; CHECK-NEXT: voc %v0, %v28, %v263308; CHECK-NEXT: vnx %v1, %v26, %v283309; CHECK-NEXT: vsel %v24, %v1, %v0, %v243310; CHECK-NEXT: br %r143311entry:3312 %not = xor <16 x i8> %src1, splat(i8 -1)3313 %not1 = xor <16 x i8> %src2, splat(i8 -1)3314 %and1138 = or <16 x i8> %not1, %src33315 %or12 = and <16 x i8> %and1138, %not3316 %0 = xor <16 x i8> %src3, %src23317 %and1939 = xor <16 x i8> %0, splat(i8 -1)3318 %1 = and <16 x i8> %and1939, %src13319 %or20 = or <16 x i8> %or12, %13320 ret <16 x i8> %or203321}3322 3323define <16 x i8> @eval218(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3324; CHECK-LABEL: eval218:3325; CHECK: # %bb.0: # %entry3326; CHECK-NEXT: vno %v0, %v26, %v263327; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 23328; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 473329; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 473330; CHECK-NEXT: br %r143331entry:3332 %not = xor <16 x i8> %src1, splat(i8 -1)3333 %not1 = xor <16 x i8> %src2, splat(i8 -1)3334 %and = and <16 x i8> %not1, %not3335 %not2 = xor <16 x i8> %src3, splat(i8 -1)3336 %and10 = and <16 x i8> %not, %src23337 %and11 = and <16 x i8> %and10, %src33338 %or12 = or <16 x i8> %and11, %and3339 %0 = and <16 x i8> %not2, %src13340 %or21 = or <16 x i8> %or12, %03341 ret <16 x i8> %or213342}3343 3344define <16 x i8> @eval219(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3345; CHECK-LABEL: eval219:3346; CHECK: # %bb.0: # %entry3347; CHECK-NEXT: vno %v0, %v26, %v263348; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 23349; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 473350; CHECK-NEXT: voc %v1, %v26, %v283351; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 313352; CHECK-NEXT: br %r143353entry:3354 %not = xor <16 x i8> %src1, splat(i8 -1)3355 %not1 = xor <16 x i8> %src2, splat(i8 -1)3356 %and = and <16 x i8> %not1, %not3357 %and10 = and <16 x i8> %not, %src23358 %and11 = and <16 x i8> %and10, %src33359 %or12 = or <16 x i8> %and11, %and3360 %src3.not = xor <16 x i8> %src3, splat(i8 -1)3361 %and1646 = or <16 x i8> %src3.not, %src23362 %0 = and <16 x i8> %and1646, %src13363 %or24 = or <16 x i8> %or12, %03364 ret <16 x i8> %or243365}3366 3367define <16 x i8> @eval220(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3368; CHECK-LABEL: eval220:3369; CHECK: # %bb.0: # %entry3370; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 1743371; CHECK-NEXT: br %r143372entry:3373 %not = xor <16 x i8> %src1, splat(i8 -1)3374 %not1 = xor <16 x i8> %src2, splat(i8 -1)3375 %0 = and <16 x i8> %not, %src33376 %or21 = or <16 x i8> %0, %not13377 ret <16 x i8> %or213378}3379 3380define <16 x i8> @eval221(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3381; CHECK-LABEL: eval221:3382; CHECK: # %bb.0: # %entry3383; CHECK-NEXT: voc %v24, %v28, %v263384; CHECK-NEXT: br %r143385entry:3386 %not1 = xor <16 x i8> %src2, splat(i8 -1)3387 %or24 = or <16 x i8> %not1, %src33388 ret <16 x i8> %or243389}3390 3391define <16 x i8> @eval222(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3392; CHECK-LABEL: eval222:3393; CHECK: # %bb.0: # %entry3394; CHECK-NEXT: vnc %v0, %v26, %v243395; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 1713396; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 473397; CHECK-NEXT: br %r143398entry:3399 %not = xor <16 x i8> %src1, splat(i8 -1)3400 %not1 = xor <16 x i8> %src2, splat(i8 -1)3401 %not2 = xor <16 x i8> %src3, splat(i8 -1)3402 %and10 = and <16 x i8> %not, %src23403 %and11 = and <16 x i8> %and10, %src33404 %or21 = or <16 x i8> %and11, %not13405 %0 = and <16 x i8> %not2, %src13406 %or25 = or <16 x i8> %or21, %03407 ret <16 x i8> %or253408}3409 3410define <16 x i8> @eval223(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3411; CHECK-LABEL: eval223:3412; CHECK: # %bb.0: # %entry3413; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 1913414; CHECK-NEXT: br %r143415entry:3416 %not1 = xor <16 x i8> %src2, splat(i8 -1)3417 %or21 = or <16 x i8> %not1, %src13418 %or28 = or <16 x i8> %or21, %src33419 ret <16 x i8> %or283420}3421 3422define <16 x i8> @eval224(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3423; CHECK-LABEL: eval224:3424; CHECK: # %bb.0: # %entry3425; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 1683426; CHECK-NEXT: br %r143427entry:3428 %0 = and <16 x i8> %src3, %src23429 %1 = or <16 x i8> %0, %src13430 %or13 = xor <16 x i8> %1, splat(i8 -1)3431 ret <16 x i8> %or133432}3433 3434define <16 x i8> @eval225(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3435; CHECK-LABEL: eval225:3436; CHECK: # %bb.0: # %entry3437; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 1693438; CHECK-NEXT: br %r143439entry:3440 %0 = and <16 x i8> %src3, %src23441 %1 = xor <16 x i8> %0, %src13442 %or16 = xor <16 x i8> %1, splat(i8 -1)3443 ret <16 x i8> %or163444}3445 3446define <16 x i8> @eval226(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3447; CHECK-LABEL: eval226:3448; CHECK: # %bb.0: # %entry3449; CHECK-NEXT: vn %v0, %v28, %v263450; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 23451; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 1433452; CHECK-NEXT: br %r143453entry:3454 %not2 = xor <16 x i8> %src3, splat(i8 -1)3455 %0 = and <16 x i8> %src3, %src23456 %1 = or <16 x i8> %0, %src13457 %or13 = xor <16 x i8> %1, splat(i8 -1)3458 %2 = and <16 x i8> %not2, %src13459 %and16 = and <16 x i8> %2, %src23460 %or17 = or <16 x i8> %and16, %or133461 ret <16 x i8> %or173462}3463 3464define <16 x i8> @eval227(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3465; CHECK-LABEL: eval227:3466; CHECK: # %bb.0: # %entry3467; CHECK-NEXT: vn %v0, %v28, %v263468; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 1393469; CHECK-NEXT: br %r143470entry:3471 %0 = and <16 x i8> %src3, %src23472 %1 = or <16 x i8> %0, %src13473 %or13 = xor <16 x i8> %1, splat(i8 -1)3474 %and14 = and <16 x i8> %src2, %src13475 %or20 = or <16 x i8> %and14, %or133476 ret <16 x i8> %or203477}3478 3479define <16 x i8> @eval228(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3480; CHECK-LABEL: eval228:3481; CHECK: # %bb.0: # %entry3482; CHECK-NEXT: vno %v0, %v26, %v263483; CHECK-NEXT: veval %v2, %v24, %v28, %v26, 23484; CHECK-NEXT: vo %v1, %v28, %v243485; CHECK-NEXT: veval %v0, %v2, %v0, %v24, 473486; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 473487; CHECK-NEXT: br %r143488entry:3489 %not = xor <16 x i8> %src1, splat(i8 -1)3490 %not1 = xor <16 x i8> %src2, splat(i8 -1)3491 %and = and <16 x i8> %not1, %not3492 %0 = or <16 x i8> %src3, %src13493 %1 = xor <16 x i8> %0, splat(i8 -1)3494 %and12 = and <16 x i8> %1, %src23495 %and15 = and <16 x i8> %not1, %src13496 %and16 = and <16 x i8> %and15, %src33497 %or13 = or <16 x i8> %and16, %and3498 %or17 = or <16 x i8> %or13, %and123499 ret <16 x i8> %or173500}3501 3502define <16 x i8> @eval229(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3503; CHECK-LABEL: eval229:3504; CHECK: # %bb.0: # %entry3505; CHECK-NEXT: vn %v0, %v28, %v263506; CHECK-NEXT: veval %v24, %v28, %v24, %v0, 1393507; CHECK-NEXT: br %r143508entry:3509 %0 = and <16 x i8> %src3, %src23510 %1 = or <16 x i8> %0, %src13511 %or13 = xor <16 x i8> %1, splat(i8 -1)3512 %2 = and <16 x i8> %src3, %src13513 %or20 = or <16 x i8> %2, %or133514 ret <16 x i8> %or203515}3516 3517define <16 x i8> @eval230(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3518; CHECK-LABEL: eval230:3519; CHECK: # %bb.0: # %entry3520; CHECK-NEXT: vno %v0, %v26, %v263521; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 23522; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 473523; CHECK-NEXT: veval %v24, %v0, %v26, %v28, 473524; CHECK-NEXT: br %r143525entry:3526 %not = xor <16 x i8> %src1, splat(i8 -1)3527 %not1 = xor <16 x i8> %src2, splat(i8 -1)3528 %and = and <16 x i8> %not1, %not3529 %not2 = xor <16 x i8> %src3, splat(i8 -1)3530 %and15 = and <16 x i8> %not1, %src13531 %and16 = and <16 x i8> %and15, %src33532 %or13 = or <16 x i8> %and16, %and3533 %0 = and <16 x i8> %not2, %src23534 %or21 = or <16 x i8> %or13, %03535 ret <16 x i8> %or213536}3537 3538define <16 x i8> @eval231(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3539; CHECK-LABEL: eval231:3540; CHECK: # %bb.0: # %entry3541; CHECK-NEXT: vno %v0, %v26, %v263542; CHECK-NEXT: vnc %v2, %v24, %v263543; CHECK-NEXT: vo %v1, %v28, %v243544; CHECK-NEXT: vsel %v0, %v26, %v0, %v243545; CHECK-NEXT: veval %v0, %v0, %v2, %v28, 313546; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 473547; CHECK-NEXT: br %r143548entry:3549 %not = xor <16 x i8> %src1, splat(i8 -1)3550 %not1 = xor <16 x i8> %src2, splat(i8 -1)3551 %and = and <16 x i8> %not1, %not3552 %0 = or <16 x i8> %src3, %src13553 %1 = xor <16 x i8> %0, splat(i8 -1)3554 %and12 = and <16 x i8> %1, %src23555 %and15 = and <16 x i8> %not1, %src13556 %and16 = and <16 x i8> %and15, %src33557 %and18 = and <16 x i8> %src2, %src13558 %or13 = or <16 x i8> %and18, %and3559 %or17 = or <16 x i8> %or13, %and163560 %or24 = or <16 x i8> %or17, %and123561 ret <16 x i8> %or243562}3563 3564define <16 x i8> @eval232(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3565; CHECK-LABEL: eval232:3566; CHECK: # %bb.0: # %entry3567; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 313568; CHECK-NEXT: vo %v1, %v28, %v263569; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 1743570; CHECK-NEXT: br %r143571entry:3572 %0 = and <16 x i8> %src3, %src23573 %1 = or <16 x i8> %0, %src13574 %or13 = xor <16 x i8> %1, splat(i8 -1)3575 %2 = or <16 x i8> %src3, %src23576 %3 = xor <16 x i8> %2, splat(i8 -1)3577 %and17 = and <16 x i8> %3, %src13578 %or18 = or <16 x i8> %and17, %or133579 ret <16 x i8> %or183580}3581 3582define <16 x i8> @eval233(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3583; CHECK-LABEL: eval233:3584; CHECK: # %bb.0: # %entry3585; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 313586; CHECK-NEXT: vx %v1, %v28, %v263587; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 1743588; CHECK-NEXT: br %r143589entry:3590 %0 = and <16 x i8> %src3, %src23591 %1 = or <16 x i8> %0, %src13592 %or13 = xor <16 x i8> %1, splat(i8 -1)3593 %2 = xor <16 x i8> %src3, %src23594 %and2039 = xor <16 x i8> %2, splat(i8 -1)3595 %3 = and <16 x i8> %and2039, %src13596 %or21 = or <16 x i8> %3, %or133597 ret <16 x i8> %or213598}3599 3600define <16 x i8> @eval234(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3601; CHECK-LABEL: eval234:3602; CHECK: # %bb.0: # %entry3603; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 313604; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 1743605; CHECK-NEXT: br %r143606entry:3607 %not2 = xor <16 x i8> %src3, splat(i8 -1)3608 %0 = and <16 x i8> %src3, %src23609 %1 = or <16 x i8> %0, %src13610 %or13 = xor <16 x i8> %1, splat(i8 -1)3611 %2 = and <16 x i8> %not2, %src13612 %or22 = or <16 x i8> %2, %or133613 ret <16 x i8> %or223614}3615 3616define <16 x i8> @eval235(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3617; CHECK-LABEL: eval235:3618; CHECK: # %bb.0: # %entry3619; CHECK-NEXT: vn %v0, %v28, %v263620; CHECK-NEXT: voc %v1, %v26, %v283621; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 1393622; CHECK-NEXT: br %r143623entry:3624 %0 = and <16 x i8> %src3, %src23625 %1 = or <16 x i8> %0, %src13626 %or13 = xor <16 x i8> %1, splat(i8 -1)3627 %src3.not = xor <16 x i8> %src3, splat(i8 -1)3628 %and1747 = or <16 x i8> %src3.not, %src23629 %2 = and <16 x i8> %and1747, %src13630 %or25 = or <16 x i8> %2, %or133631 ret <16 x i8> %or253632}3633 3634define <16 x i8> @eval236(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3635; CHECK-LABEL: eval236:3636; CHECK: # %bb.0: # %entry3637; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 2343638; CHECK-NEXT: br %r143639entry:3640 %0 = or <16 x i8> %src3, %src13641 %or22.demorgan = and <16 x i8> %0, %src23642 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)3643 ret <16 x i8> %or223644}3645 3646define <16 x i8> @eval237(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3647; CHECK-LABEL: eval237:3648; CHECK: # %bb.0: # %entry3649; CHECK-NEXT: vo %v0, %v28, %v243650; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 13651; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 2393652; CHECK-NEXT: br %r143653entry:3654 %0 = or <16 x i8> %src3, %src13655 %or22.demorgan = and <16 x i8> %0, %src23656 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)3657 %and23 = and <16 x i8> %src2, %src13658 %and24 = and <16 x i8> %and23, %src33659 %or25 = or <16 x i8> %and24, %or223660 ret <16 x i8> %or253661}3662 3663define <16 x i8> @eval238(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3664; CHECK-LABEL: eval238:3665; CHECK: # %bb.0: # %entry3666; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 73667; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 1743668; CHECK-NEXT: br %r143669entry:3670 %not2 = xor <16 x i8> %src3, splat(i8 -1)3671 %0 = or <16 x i8> %src3, %src13672 %or22.demorgan = and <16 x i8> %0, %src23673 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)3674 %1 = and <16 x i8> %not2, %src13675 %or26 = or <16 x i8> %1, %or223676 ret <16 x i8> %or263677}3678 3679define <16 x i8> @eval239(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3680; CHECK-LABEL: eval239:3681; CHECK: # %bb.0: # %entry3682; CHECK-NEXT: vo %v0, %v28, %v243683; CHECK-NEXT: veval %v24, %v24, %v0, %v26, 2393684; CHECK-NEXT: br %r143685entry:3686 %0 = or <16 x i8> %src3, %src13687 %or22.demorgan = and <16 x i8> %0, %src23688 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)3689 %or29 = or <16 x i8> %or22, %src13690 ret <16 x i8> %or293691}3692 3693define <16 x i8> @eval240(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3694; CHECK-LABEL: eval240:3695; CHECK: # %bb.0: # %entry3696; CHECK-NEXT: vno %v24, %v24, %v243697; CHECK-NEXT: br %r143698entry:3699 %not = xor <16 x i8> %src1, splat(i8 -1)3700 ret <16 x i8> %not3701}3702 3703define <16 x i8> @eval241(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3704; CHECK-LABEL: eval241:3705; CHECK: # %bb.0: # %entry3706; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 1713707; CHECK-NEXT: br %r143708entry:3709 %not = xor <16 x i8> %src1, splat(i8 -1)3710 %0 = and <16 x i8> %src3, %src23711 %or20 = or <16 x i8> %0, %not3712 ret <16 x i8> %or203713}3714 3715define <16 x i8> @eval242(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3716; CHECK-LABEL: eval242:3717; CHECK: # %bb.0: # %entry3718; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 1743719; CHECK-NEXT: br %r143720entry:3721 %not = xor <16 x i8> %src1, splat(i8 -1)3722 %not2 = xor <16 x i8> %src3, splat(i8 -1)3723 %0 = and <16 x i8> %not2, %src23724 %or21 = or <16 x i8> %0, %not3725 ret <16 x i8> %or213726}3727 3728define <16 x i8> @eval243(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3729; CHECK-LABEL: eval243:3730; CHECK: # %bb.0: # %entry3731; CHECK-NEXT: voc %v24, %v26, %v243732; CHECK-NEXT: br %r143733entry:3734 %not = xor <16 x i8> %src1, splat(i8 -1)3735 %or24 = or <16 x i8> %not, %src23736 ret <16 x i8> %or243737}3738 3739define <16 x i8> @eval244(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3740; CHECK-LABEL: eval244:3741; CHECK: # %bb.0: # %entry3742; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 1743743; CHECK-NEXT: br %r143744entry:3745 %not = xor <16 x i8> %src1, splat(i8 -1)3746 %not1 = xor <16 x i8> %src2, splat(i8 -1)3747 %0 = and <16 x i8> %not1, %src33748 %or21 = or <16 x i8> %0, %not3749 ret <16 x i8> %or213750}3751 3752define <16 x i8> @eval245(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3753; CHECK-LABEL: eval245:3754; CHECK: # %bb.0: # %entry3755; CHECK-NEXT: voc %v24, %v28, %v243756; CHECK-NEXT: br %r143757entry:3758 %not = xor <16 x i8> %src1, splat(i8 -1)3759 %or24 = or <16 x i8> %not, %src33760 ret <16 x i8> %or243761}3762 3763define <16 x i8> @eval246(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3764; CHECK-LABEL: eval246:3765; CHECK: # %bb.0: # %entry3766; CHECK-NEXT: vnc %v0, %v24, %v263767; CHECK-NEXT: veval %v0, %v0, %v28, %v24, 1713768; CHECK-NEXT: veval %v24, %v0, %v26, %v28, 473769; CHECK-NEXT: br %r143770entry:3771 %not = xor <16 x i8> %src1, splat(i8 -1)3772 %not1 = xor <16 x i8> %src2, splat(i8 -1)3773 %not2 = xor <16 x i8> %src3, splat(i8 -1)3774 %and19 = and <16 x i8> %not1, %src13775 %and20 = and <16 x i8> %and19, %src33776 %or21 = or <16 x i8> %and20, %not3777 %0 = and <16 x i8> %not2, %src23778 %or25 = or <16 x i8> %or21, %03779 ret <16 x i8> %or253780}3781 3782define <16 x i8> @eval247(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3783; CHECK-LABEL: eval247:3784; CHECK: # %bb.0: # %entry3785; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 1913786; CHECK-NEXT: br %r143787entry:3788 %not = xor <16 x i8> %src1, splat(i8 -1)3789 %or21 = or <16 x i8> %not, %src23790 %or28 = or <16 x i8> %or21, %src33791 ret <16 x i8> %or283792}3793 3794define <16 x i8> @eval248(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3795; CHECK-LABEL: eval248:3796; CHECK: # %bb.0: # %entry3797; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 2343798; CHECK-NEXT: br %r143799entry:3800 %0 = or <16 x i8> %src3, %src23801 %or22.demorgan = and <16 x i8> %0, %src13802 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)3803 ret <16 x i8> %or223804}3805 3806define <16 x i8> @eval249(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3807; CHECK-LABEL: eval249:3808; CHECK: # %bb.0: # %entry3809; CHECK-NEXT: vo %v0, %v28, %v263810; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 13811; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 2393812; CHECK-NEXT: br %r143813entry:3814 %0 = or <16 x i8> %src3, %src23815 %or22.demorgan = and <16 x i8> %0, %src13816 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)3817 %and23 = and <16 x i8> %src2, %src13818 %and24 = and <16 x i8> %and23, %src33819 %or25 = or <16 x i8> %and24, %or223820 ret <16 x i8> %or253821}3822 3823define <16 x i8> @eval250(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3824; CHECK-LABEL: eval250:3825; CHECK: # %bb.0: # %entry3826; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 73827; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 1743828; CHECK-NEXT: br %r143829entry:3830 %not2 = xor <16 x i8> %src3, splat(i8 -1)3831 %0 = or <16 x i8> %src3, %src23832 %or22.demorgan = and <16 x i8> %0, %src13833 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)3834 %1 = and <16 x i8> %not2, %src23835 %or26 = or <16 x i8> %1, %or223836 ret <16 x i8> %or263837}3838 3839define <16 x i8> @eval251(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3840; CHECK-LABEL: eval251:3841; CHECK: # %bb.0: # %entry3842; CHECK-NEXT: vo %v0, %v28, %v263843; CHECK-NEXT: veval %v24, %v26, %v0, %v24, 2393844; CHECK-NEXT: br %r143845entry:3846 %0 = or <16 x i8> %src3, %src23847 %or22.demorgan = and <16 x i8> %0, %src13848 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)3849 %or29 = or <16 x i8> %or22, %src23850 ret <16 x i8> %or293851}3852 3853define <16 x i8> @eval252(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3854; CHECK-LABEL: eval252:3855; CHECK: # %bb.0: # %entry3856; CHECK-NEXT: vnn %v24, %v26, %v243857; CHECK-NEXT: br %r143858entry:3859 %or26.demorgan = and <16 x i8> %src2, %src13860 %or26 = xor <16 x i8> %or26.demorgan, splat(i8 -1)3861 ret <16 x i8> %or263862}3863 3864define <16 x i8> @eval253(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3865; CHECK-LABEL: eval253:3866; CHECK: # %bb.0: # %entry3867; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 2393868; CHECK-NEXT: br %r143869entry:3870 %or26.demorgan = and <16 x i8> %src2, %src13871 %or26 = xor <16 x i8> %or26.demorgan, splat(i8 -1)3872 %or29 = or <16 x i8> %or26, %src33873 ret <16 x i8> %or293874}3875 3876define <16 x i8> @eval254(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3877; CHECK-LABEL: eval254:3878; CHECK: # %bb.0: # %entry3879; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 2543880; CHECK-NEXT: br %r143881entry:3882 %or26.demorgan = and <16 x i8> %src2, %src13883 %or30.demorgan = and <16 x i8> %or26.demorgan, %src33884 %or30 = xor <16 x i8> %or30.demorgan, splat(i8 -1)3885 ret <16 x i8> %or303886}3887 3888define <16 x i8> @eval255(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {3889; CHECK-LABEL: eval255:3890; CHECK: # %bb.0: # %entry3891; CHECK-NEXT: vgbm %v24, 655353892; CHECK-NEXT: br %r143893entry:3894 ret <16 x i8> splat(i8 -1)3895}3896 3897