brintos

brintos / llvm-project-archived public Read only

0
0
Text · 120.3 KiB · bcdedcd Raw
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