1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2; Test use of VECTOR EVALUATE for combined boolean operations. 3; 4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=arch15 | FileCheck %s 5 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: # %entry 9; CHECK-NEXT: vgbm %v24, 0 10; CHECK-NEXT: br %r14 11entry: 12 ret <16 x i8> zeroinitializer 13} 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: # %entry 18; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 1 19; CHECK-NEXT: br %r14 20entry: 21 %and = and <16 x i8> %src2, %src1 22 %and1 = and <16 x i8> %and, %src3 23 ret <16 x i8> %and1 24} 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: # %entry 29; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 2 30; CHECK-NEXT: br %r14 31entry: 32 %and = and <16 x i8> %src2, %src1 33 %not = xor <16 x i8> %src3, splat(i8 -1) 34 %and1 = and <16 x i8> %and, %not 35 ret <16 x i8> %and1 36} 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: # %entry 41; CHECK-NEXT: vn %v24, %v26, %v24 42; CHECK-NEXT: br %r14 43entry: 44 %and = and <16 x i8> %src2, %src1 45 ret <16 x i8> %and 46} 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: # %entry 51; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 2 52; CHECK-NEXT: br %r14 53entry: 54 %not = xor <16 x i8> %src2, splat(i8 -1) 55 %and = and <16 x i8> %not, %src1 56 %and1 = and <16 x i8> %and, %src3 57 ret <16 x i8> %and1 58} 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: # %entry 63; CHECK-NEXT: vn %v24, %v28, %v24 64; CHECK-NEXT: br %r14 65entry: 66 %or4 = and <16 x i8> %src3, %src1 67 ret <16 x i8> %or4 68} 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: # %entry 73; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 6 74; CHECK-NEXT: br %r14 75entry: 76 %0 = xor <16 x i8> %src3, %src2 77 %or5 = and <16 x i8> %0, %src1 78 ret <16 x i8> %or5 79} 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: # %entry 84; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 7 85; CHECK-NEXT: br %r14 86entry: 87 %and118 = or <16 x i8> %src3, %src2 88 %or8 = and <16 x i8> %and118, %src1 89 ret <16 x i8> %or8 90} 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: # %entry 95; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 8 96; CHECK-NEXT: br %r14 97entry: 98 %0 = or <16 x i8> %src3, %src2 99 %1 = xor <16 x i8> %0, splat(i8 -1) 100 %and2 = and <16 x i8> %1, %src1 101 ret <16 x i8> %and2 102} 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: # %entry 107; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 9 108; CHECK-NEXT: br %r14 109entry: 110 %0 = xor <16 x i8> %src2, %src3 111 %1 = xor <16 x i8> %0, splat(i8 -1) 112 %or5 = and <16 x i8> %1, %src1 113 ret <16 x i8> %or5 114} 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: # %entry 119; CHECK-NEXT: vnc %v24, %v24, %v28 120; CHECK-NEXT: br %r14 121entry: 122 %not1 = xor <16 x i8> %src3, splat(i8 -1) 123 %or6 = and <16 x i8> %not1, %src1 124 ret <16 x i8> %or6 125} 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: # %entry 130; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 11 131; CHECK-NEXT: br %r14 132entry: 133 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 134 %and219 = or <16 x i8> %src3.not, %src2 135 %or9 = and <16 x i8> %and219, %src1 136 ret <16 x i8> %or9 137} 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: # %entry 142; CHECK-NEXT: vnc %v24, %v24, %v26 143; CHECK-NEXT: br %r14 144entry: 145 %not = xor <16 x i8> %src2, splat(i8 -1) 146 %and = and <16 x i8> %not, %src1 147 ret <16 x i8> %and 148} 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: # %entry 153; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 11 154; CHECK-NEXT: br %r14 155entry: 156 %not = xor <16 x i8> %src2, splat(i8 -1) 157 %and19 = or <16 x i8> %not, %src3 158 %or9 = and <16 x i8> %and19, %src1 159 ret <16 x i8> %or9 160} 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: # %entry 165; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 14 166; CHECK-NEXT: br %r14 167entry: 168 %and20.demorgan = and <16 x i8> %src3, %src2 169 %and20 = xor <16 x i8> %and20.demorgan, splat(i8 -1) 170 %or10 = and <16 x i8> %and20, %src1 171 ret <16 x i8> %or10 172} 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: # %entry 177; CHECK-NEXT: br %r14 178entry: 179 ret <16 x i8> %src1 180} 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: # %entry 185; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 2 186; CHECK-NEXT: br %r14 187entry: 188 %not = xor <16 x i8> %src1, splat(i8 -1) 189 %and = and <16 x i8> %not, %src2 190 %and1 = and <16 x i8> %and, %src3 191 ret <16 x i8> %and1 192} 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: # %entry 197; CHECK-NEXT: vn %v24, %v28, %v26 198; CHECK-NEXT: br %r14 199entry: 200 %or4 = and <16 x i8> %src3, %src2 201 ret <16 x i8> %or4 202} 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: # %entry 207; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 6 208; CHECK-NEXT: br %r14 209entry: 210 %0 = xor <16 x i8> %src3, %src1 211 %or5 = and <16 x i8> %0, %src2 212 ret <16 x i8> %or5 213} 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: # %entry 218; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 7 219; CHECK-NEXT: br %r14 220entry: 221 %and118 = or <16 x i8> %src3, %src1 222 %or8 = and <16 x i8> %and118, %src2 223 ret <16 x i8> %or8 224} 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: # %entry 229; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 6 230; CHECK-NEXT: br %r14 231entry: 232 %0 = xor <16 x i8> %src2, %src1 233 %or5 = and <16 x i8> %0, %src3 234 ret <16 x i8> %or5 235} 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: # %entry 240; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 7 241; CHECK-NEXT: br %r14 242entry: 243 %or518 = or <16 x i8> %src2, %src1 244 %or8 = and <16 x i8> %or518, %src3 245 ret <16 x i8> %or8 246} 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: # %entry 251; CHECK-NEXT: vx %v0, %v26, %v24 252; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 253; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 254; CHECK-NEXT: br %r14 255entry: 256 %0 = xor <16 x i8> %src2, %src1 257 %or5 = and <16 x i8> %0, %src3 258 %not7 = xor <16 x i8> %src3, splat(i8 -1) 259 %1 = and <16 x i8> %not7, %src1 260 %and8 = and <16 x i8> %1, %src2 261 %or9 = or <16 x i8> %and8, %or5 262 ret <16 x i8> %or9 263} 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: # %entry 268; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 6 269; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 31 270; CHECK-NEXT: br %r14 271entry: 272 %0 = xor <16 x i8> %src2, %src1 273 %or5 = and <16 x i8> %0, %src3 274 %and6 = and <16 x i8> %src2, %src1 275 %or12 = or <16 x i8> %or5, %and6 276 ret <16 x i8> %or12 277} 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: # %entry 282; CHECK-NEXT: vo %v1, %v28, %v26 283; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 2 284; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 285; CHECK-NEXT: br %r14 286entry: 287 %not = xor <16 x i8> %src1, splat(i8 -1) 288 %and = and <16 x i8> %not, %src2 289 %and1 = and <16 x i8> %and, %src3 290 %0 = or <16 x i8> %src3, %src2 291 %1 = xor <16 x i8> %0, splat(i8 -1) 292 %and5 = and <16 x i8> %1, %src1 293 %or6 = or <16 x i8> %and5, %and1 294 ret <16 x i8> %or6 295} 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: # %entry 300; CHECK-NEXT: vo %v0, %v28, %v26 301; CHECK-NEXT: vn %v1, %v28, %v26 302; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 47 303; CHECK-NEXT: br %r14 304entry: 305 %0 = or <16 x i8> %src3, %src2 306 %1 = xor <16 x i8> %0, splat(i8 -1) 307 %and5 = and <16 x i8> %1, %src1 308 %2 = and <16 x i8> %src3, %src2 309 %or9 = or <16 x i8> %and5, %2 310 ret <16 x i8> %or9 311} 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: # %entry 316; CHECK-NEXT: vnc %v0, %v26, %v24 317; CHECK-NEXT: vsel %v24, %v0, %v24, %v28 318; CHECK-NEXT: br %r14 319entry: 320 %not = xor <16 x i8> %src1, splat(i8 -1) 321 %and = and <16 x i8> %not, %src2 322 %and1 = and <16 x i8> %and, %src3 323 %not4 = xor <16 x i8> %src3, splat(i8 -1) 324 %0 = and <16 x i8> %not4, %src1 325 %or10 = or <16 x i8> %and1, %0 326 ret <16 x i8> %or10 327} 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: # %entry 332; CHECK-NEXT: vnc %v0, %v26, %v24 333; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 11 334; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 335; CHECK-NEXT: br %r14 336entry: 337 %not = xor <16 x i8> %src1, splat(i8 -1) 338 %and = and <16 x i8> %not, %src2 339 %and1 = and <16 x i8> %and, %src3 340 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 341 %and527 = or <16 x i8> %src3.not, %src2 342 %0 = and <16 x i8> %and527, %src1 343 %or13 = or <16 x i8> %0, %and1 344 ret <16 x i8> %or13 345} 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: # %entry 350; CHECK-NEXT: vnc %v0, %v28, %v24 351; CHECK-NEXT: vsel %v24, %v0, %v24, %v26 352; CHECK-NEXT: br %r14 353entry: 354 %not = xor <16 x i8> %src1, splat(i8 -1) 355 %0 = and <16 x i8> %not, %src3 356 %and1 = and <16 x i8> %0, %src2 357 %not2 = xor <16 x i8> %src2, splat(i8 -1) 358 %and3 = and <16 x i8> %not2, %src1 359 %or10 = or <16 x i8> %and1, %and3 360 ret <16 x i8> %or10 361} 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: # %entry 366; CHECK-NEXT: vsel %v24, %v28, %v24, %v26 367; CHECK-NEXT: br %r14 368entry: 369 %not2 = xor <16 x i8> %src2, splat(i8 -1) 370 %and3 = and <16 x i8> %not2, %src1 371 %0 = and <16 x i8> %src3, %src2 372 %or13 = or <16 x i8> %0, %and3 373 ret <16 x i8> %or13 374} 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: # %entry 379; CHECK-NEXT: vn %v1, %v28, %v26 380; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 2 381; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 382; CHECK-NEXT: br %r14 383entry: 384 %not = xor <16 x i8> %src1, splat(i8 -1) 385 %0 = and <16 x i8> %not, %src2 386 %and1 = and <16 x i8> %0, %src3 387 %and328.demorgan = and <16 x i8> %src3, %src2 388 %and328 = xor <16 x i8> %and328.demorgan, splat(i8 -1) 389 %1 = and <16 x i8> %and328, %src1 390 %or14 = or <16 x i8> %1, %and1 391 ret <16 x i8> %or14 392} 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: # %entry 397; CHECK-NEXT: vnc %v0, %v26, %v24 398; CHECK-NEXT: veval %v24, %v24, %v0, %v28, 31 399; CHECK-NEXT: br %r14 400entry: 401 %not = xor <16 x i8> %src1, splat(i8 -1) 402 %and = and <16 x i8> %not, %src2 403 %and1 = and <16 x i8> %and, %src3 404 %or17 = or <16 x i8> %and1, %src1 405 ret <16 x i8> %or17 406} 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: # %entry 411; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 8 412; CHECK-NEXT: br %r14 413entry: 414 %0 = or <16 x i8> %src3, %src1 415 %1 = xor <16 x i8> %0, splat(i8 -1) 416 %and2 = and <16 x i8> %1, %src2 417 ret <16 x i8> %and2 418} 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: # %entry 423; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 9 424; CHECK-NEXT: br %r14 425entry: 426 %0 = xor <16 x i8> %src1, %src3 427 %1 = xor <16 x i8> %0, splat(i8 -1) 428 %or5 = and <16 x i8> %1, %src2 429 ret <16 x i8> %or5 430} 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: # %entry 435; CHECK-NEXT: vnc %v24, %v26, %v28 436; CHECK-NEXT: br %r14 437entry: 438 %not1 = xor <16 x i8> %src3, splat(i8 -1) 439 %or6 = and <16 x i8> %not1, %src2 440 ret <16 x i8> %or6 441} 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: # %entry 446; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 11 447; CHECK-NEXT: br %r14 448entry: 449 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 450 %and219 = or <16 x i8> %src3.not, %src1 451 %or9 = and <16 x i8> %and219, %src2 452 ret <16 x i8> %or9 453} 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: # %entry 458; CHECK-NEXT: vo %v0, %v28, %v24 459; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 460; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 461; CHECK-NEXT: br %r14 462entry: 463 %0 = or <16 x i8> %src3, %src1 464 %1 = xor <16 x i8> %0, splat(i8 -1) 465 %and2 = and <16 x i8> %1, %src2 466 %not3 = xor <16 x i8> %src2, splat(i8 -1) 467 %and4 = and <16 x i8> %not3, %src1 468 %and5 = and <16 x i8> %and4, %src3 469 %or6 = or <16 x i8> %and2, %and5 470 ret <16 x i8> %or6 471} 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: # %entry 476; CHECK-NEXT: vo %v0, %v28, %v24 477; CHECK-NEXT: vn %v1, %v28, %v24 478; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 479; CHECK-NEXT: br %r14 480entry: 481 %0 = or <16 x i8> %src3, %src1 482 %1 = xor <16 x i8> %0, splat(i8 -1) 483 %and2 = and <16 x i8> %1, %src2 484 %2 = and <16 x i8> %src3, %src1 485 %or9 = or <16 x i8> %and2, %2 486 ret <16 x i8> %or9 487} 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: # %entry 492; CHECK-NEXT: vnc %v0, %v24, %v26 493; CHECK-NEXT: vsel %v24, %v0, %v26, %v28 494; CHECK-NEXT: br %r14 495entry: 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, %src1 499 %and5 = and <16 x i8> %and4, %src3 500 %0 = and <16 x i8> %not1, %src2 501 %or10 = or <16 x i8> %0, %and5 502 ret <16 x i8> %or10 503} 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: # %entry 508; CHECK-NEXT: vnc %v0, %v24, %v26 509; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 11 510; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 511; CHECK-NEXT: br %r14 512entry: 513 %not3 = xor <16 x i8> %src2, splat(i8 -1) 514 %and4 = and <16 x i8> %not3, %src1 515 %and5 = and <16 x i8> %and4, %src3 516 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 517 %and227 = or <16 x i8> %src3.not, %src1 518 %0 = and <16 x i8> %and227, %src2 519 %or13 = or <16 x i8> %0, %and5 520 ret <16 x i8> %or13 521} 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: # %entry 526; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 40 527; CHECK-NEXT: br %r14 528entry: 529 %0 = xor <16 x i8> %src2, %src1 530 %1 = xor <16 x i8> %src3, splat(i8 -1) 531 %or7 = and <16 x i8> %0, %1 532 ret <16 x i8> %or7 533} 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: # %entry 538; CHECK-NEXT: vx %v0, %v26, %v24 539; CHECK-NEXT: vn %v1, %v26, %v24 540; CHECK-NEXT: vsel %v24, %v1, %v0, %v28 541; CHECK-NEXT: br %r14 542entry: 543 %0 = xor <16 x i8> %src2, %src1 544 %1 = xor <16 x i8> %src3, splat(i8 -1) 545 %or7 = and <16 x i8> %0, %1 546 %and8 = and <16 x i8> %src2, %src1 547 %and9 = and <16 x i8> %and8, %src3 548 %or10 = or <16 x i8> %or7, %and9 549 ret <16 x i8> %or10 550} 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: # %entry 555; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 42 556; CHECK-NEXT: br %r14 557entry: 558 %not1 = xor <16 x i8> %src3, splat(i8 -1) 559 %and1021 = or <16 x i8> %src2, %src1 560 %or11 = and <16 x i8> %and1021, %not1 561 ret <16 x i8> %or11 562} 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: # %entry 567; CHECK-NEXT: vx %v0, %v26, %v24 568; CHECK-NEXT: vn %v1, %v26, %v24 569; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 47 570; CHECK-NEXT: br %r14 571entry: 572 %0 = xor <16 x i8> %src2, %src1 573 %1 = xor <16 x i8> %src3, splat(i8 -1) 574 %or7 = and <16 x i8> %0, %1 575 %and8 = and <16 x i8> %src2, %src1 576 %or14 = or <16 x i8> %or7, %and8 577 ret <16 x i8> %or14 578} 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: # %entry 583; CHECK-NEXT: vno %v0, %v28, %v24 584; CHECK-NEXT: vsel %v24, %v0, %v24, %v26 585; CHECK-NEXT: br %r14 586entry: 587 %0 = or <16 x i8> %src3, %src1 588 %1 = xor <16 x i8> %0, splat(i8 -1) 589 %and2 = and <16 x i8> %1, %src2 590 %not3 = xor <16 x i8> %src2, splat(i8 -1) 591 %and4 = and <16 x i8> %not3, %src1 592 %or11 = or <16 x i8> %and2, %and4 593 ret <16 x i8> %or11 594} 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: # %entry 599; CHECK-NEXT: vo %v0, %v28, %v24 600; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 601; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 602; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 603; CHECK-NEXT: br %r14 604entry: 605 %0 = or <16 x i8> %src3, %src1 606 %1 = xor <16 x i8> %0, splat(i8 -1) 607 %and2 = and <16 x i8> %1, %src2 608 %not3 = xor <16 x i8> %src2, splat(i8 -1) 609 %and4 = and <16 x i8> %not3, %src1 610 %and12 = and <16 x i8> %src2, %src1 611 %and13 = and <16 x i8> %and12, %src3 612 %or11 = or <16 x i8> %and13, %and4 613 %or14 = or <16 x i8> %or11, %and2 614 ret <16 x i8> %or14 615} 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: # %entry 620; CHECK-NEXT: vn %v1, %v28, %v26 621; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 8 622; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 623; CHECK-NEXT: br %r14 624entry: 625 %0 = or <16 x i8> %src3, %src1 626 %1 = xor <16 x i8> %0, splat(i8 -1) 627 %and2 = and <16 x i8> %1, %src2 628 %and429.demorgan = and <16 x i8> %src3, %src2 629 %and429 = xor <16 x i8> %and429.demorgan, splat(i8 -1) 630 %2 = and <16 x i8> %and429, %src1 631 %or15 = or <16 x i8> %and2, %2 632 ret <16 x i8> %or15 633} 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: # %entry 638; CHECK-NEXT: vo %v0, %v28, %v24 639; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 47 640; CHECK-NEXT: br %r14 641entry: 642 %0 = or <16 x i8> %src3, %src1 643 %1 = xor <16 x i8> %0, splat(i8 -1) 644 %and2 = and <16 x i8> %1, %src2 645 %or18 = or <16 x i8> %and2, %src1 646 ret <16 x i8> %or18 647} 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: # %entry 652; CHECK-NEXT: vnc %v24, %v26, %v24 653; CHECK-NEXT: br %r14 654entry: 655 %not = xor <16 x i8> %src1, splat(i8 -1) 656 %and = and <16 x i8> %not, %src2 657 ret <16 x i8> %and 658} 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: # %entry 663; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 11 664; CHECK-NEXT: br %r14 665entry: 666 %not = xor <16 x i8> %src1, splat(i8 -1) 667 %and819 = or <16 x i8> %not, %src3 668 %or9 = and <16 x i8> %and819, %src2 669 ret <16 x i8> %or9 670} 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: # %entry 675; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 14 676; CHECK-NEXT: br %r14 677entry: 678 %and920.demorgan = and <16 x i8> %src3, %src1 679 %and920 = xor <16 x i8> %and920.demorgan, splat(i8 -1) 680 %or10 = and <16 x i8> %and920, %src2 681 ret <16 x i8> %or10 682} 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: # %entry 687; CHECK-NEXT: vlr %v24, %v26 688; CHECK-NEXT: br %r14 689entry: 690 ret <16 x i8> %src2 691} 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: # %entry 696; CHECK-NEXT: vnc %v0, %v28, %v26 697; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 698; CHECK-NEXT: br %r14 699entry: 700 %not = xor <16 x i8> %src1, splat(i8 -1) 701 %and = and <16 x i8> %not, %src2 702 %not7 = xor <16 x i8> %src2, splat(i8 -1) 703 %0 = and <16 x i8> %not7, %src3 704 %and9 = and <16 x i8> %0, %src1 705 %or10 = or <16 x i8> %and9, %and 706 ret <16 x i8> %or10 707} 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: # %entry 712; CHECK-NEXT: vsel %v24, %v28, %v26, %v24 713; CHECK-NEXT: br %r14 714entry: 715 %not = xor <16 x i8> %src1, splat(i8 -1) 716 %and = and <16 x i8> %not, %src2 717 %0 = and <16 x i8> %src3, %src1 718 %or13 = or <16 x i8> %0, %and 719 ret <16 x i8> %or13 720} 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: # %entry 725; CHECK-NEXT: vn %v1, %v28, %v24 726; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 2 727; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 728; CHECK-NEXT: br %r14 729entry: 730 %not7 = xor <16 x i8> %src2, splat(i8 -1) 731 %and8 = and <16 x i8> %not7, %src1 732 %and9 = and <16 x i8> %and8, %src3 733 %and28.demorgan = and <16 x i8> %src3, %src1 734 %and28 = xor <16 x i8> %and28.demorgan, splat(i8 -1) 735 %0 = and <16 x i8> %and28, %src2 736 %or14 = or <16 x i8> %and9, %0 737 ret <16 x i8> %or14 738} 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: # %entry 743; CHECK-NEXT: vnc %v0, %v24, %v26 744; CHECK-NEXT: veval %v24, %v26, %v0, %v28, 31 745; CHECK-NEXT: br %r14 746entry: 747 %not7 = xor <16 x i8> %src2, splat(i8 -1) 748 %and8 = and <16 x i8> %not7, %src1 749 %and9 = and <16 x i8> %and8, %src3 750 %or17 = or <16 x i8> %and9, %src2 751 ret <16 x i8> %or17 752} 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: # %entry 757; CHECK-NEXT: vno %v0, %v28, %v26 758; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 759; CHECK-NEXT: br %r14 760entry: 761 %not = xor <16 x i8> %src1, splat(i8 -1) 762 %and = and <16 x i8> %not, %src2 763 %0 = or <16 x i8> %src3, %src2 764 %1 = xor <16 x i8> %0, splat(i8 -1) 765 %and10 = and <16 x i8> %1, %src1 766 %or11 = or <16 x i8> %and10, %and 767 ret <16 x i8> %or11 768} 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: # %entry 773; CHECK-NEXT: vo %v0, %v28, %v26 774; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 775; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 47 776; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 47 777; CHECK-NEXT: br %r14 778entry: 779 %not = xor <16 x i8> %src1, splat(i8 -1) 780 %and = and <16 x i8> %not, %src2 781 %0 = or <16 x i8> %src3, %src2 782 %1 = xor <16 x i8> %0, splat(i8 -1) 783 %and10 = and <16 x i8> %1, %src1 784 %and12 = and <16 x i8> %src2, %src1 785 %and13 = and <16 x i8> %and12, %src3 786 %or11 = or <16 x i8> %and13, %and 787 %or14 = or <16 x i8> %or11, %and10 788 ret <16 x i8> %or14 789} 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: # %entry 794; CHECK-NEXT: vno %v0, %v28, %v28 795; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 796; CHECK-NEXT: br %r14 797entry: 798 %not = xor <16 x i8> %src1, splat(i8 -1) 799 %and = and <16 x i8> %not, %src2 800 %not1 = xor <16 x i8> %src3, splat(i8 -1) 801 %0 = and <16 x i8> %not1, %src1 802 %or15 = or <16 x i8> %0, %and 803 ret <16 x i8> %or15 804} 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: # %entry 809; CHECK-NEXT: voc %v0, %v26, %v28 810; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 811; CHECK-NEXT: br %r14 812entry: 813 %not = xor <16 x i8> %src1, splat(i8 -1) 814 %and = and <16 x i8> %not, %src2 815 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 816 %and1036 = or <16 x i8> %src3.not, %src2 817 %0 = and <16 x i8> %and1036, %src1 818 %or18 = or <16 x i8> %0, %and 819 ret <16 x i8> %or18 820} 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: # %entry 825; CHECK-NEXT: vx %v24, %v26, %v24 826; CHECK-NEXT: br %r14 827entry: 828 %or15 = xor <16 x i8> %src2, %src1 829 ret <16 x i8> %or15 830} 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: # %entry 835; CHECK-NEXT: vn %v0, %v24, %v28 836; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 61 837; CHECK-NEXT: br %r14 838entry: 839 %or15 = xor <16 x i8> %src2, %src1 840 %0 = and <16 x i8> %src1, %src3 841 %and17 = and <16 x i8> %0, %src2 842 %or18 = or <16 x i8> %and17, %or15 843 ret <16 x i8> %or18 844} 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: # %entry 849; CHECK-NEXT: vnc %v0, %v24, %v28 850; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 61 851; CHECK-NEXT: br %r14 852entry: 853 %not1 = xor <16 x i8> %src3, splat(i8 -1) 854 %or15 = xor <16 x i8> %src2, %src1 855 %0 = and <16 x i8> %not1, %src1 856 %and18 = and <16 x i8> %0, %src2 857 %or19 = or <16 x i8> %and18, %or15 858 ret <16 x i8> %or19 859} 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: # %entry 864; CHECK-NEXT: vo %v24, %v26, %v24 865; CHECK-NEXT: br %r14 866entry: 867 %or22 = or <16 x i8> %src2, %src1 868 ret <16 x i8> %or22 869} 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: # %entry 874; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 8 875; CHECK-NEXT: br %r14 876entry: 877 %and.demorgan = or <16 x i8> %src2, %src1 878 %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 879 %and2 = and <16 x i8> %and, %src3 880 ret <16 x i8> %and2 881} 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: # %entry 886; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 9 887; CHECK-NEXT: br %r14 888entry: 889 %0 = xor <16 x i8> %src1, %src2 890 %1 = xor <16 x i8> %0, splat(i8 -1) 891 %or5 = and <16 x i8> %1, %src3 892 ret <16 x i8> %or5 893} 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: # %entry 898; CHECK-NEXT: vo %v0, %v26, %v24 899; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 900; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 901; CHECK-NEXT: br %r14 902entry: 903 %and.demorgan = or <16 x i8> %src2, %src1 904 %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 905 %and2 = and <16 x i8> %and, %src3 906 %not4 = xor <16 x i8> %src3, splat(i8 -1) 907 %0 = and <16 x i8> %not4, %src1 908 %and5 = and <16 x i8> %0, %src2 909 %or6 = or <16 x i8> %and5, %and2 910 ret <16 x i8> %or6 911} 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: # %entry 916; CHECK-NEXT: vo %v0, %v26, %v24 917; CHECK-NEXT: vn %v1, %v26, %v24 918; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 919; CHECK-NEXT: br %r14 920entry: 921 %and.demorgan = or <16 x i8> %src2, %src1 922 %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 923 %and2 = and <16 x i8> %and, %src3 924 %and3 = and <16 x i8> %src2, %src1 925 %or9 = or <16 x i8> %and2, %and3 926 ret <16 x i8> %or9 927} 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: # %entry 932; CHECK-NEXT: vnc %v24, %v28, %v26 933; CHECK-NEXT: br %r14 934entry: 935 %not1 = xor <16 x i8> %src2, splat(i8 -1) 936 %or6 = and <16 x i8> %not1, %src3 937 ret <16 x i8> %or6 938} 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: # %entry 943; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 11 944; CHECK-NEXT: br %r14 945entry: 946 %not1 = xor <16 x i8> %src2, splat(i8 -1) 947 %or620 = or <16 x i8> %not1, %src1 948 %or9 = and <16 x i8> %or620, %src3 949 ret <16 x i8> %or9 950} 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: # %entry 955; CHECK-NEXT: vnc %v0, %v24, %v28 956; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 957; CHECK-NEXT: br %r14 958entry: 959 %not1 = xor <16 x i8> %src2, splat(i8 -1) 960 %or6 = and <16 x i8> %not1, %src3 961 %not8 = xor <16 x i8> %src3, splat(i8 -1) 962 %0 = and <16 x i8> %not8, %src1 963 %and9 = and <16 x i8> %0, %src2 964 %or10 = or <16 x i8> %and9, %or6 965 ret <16 x i8> %or10 966} 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: # %entry 971; CHECK-NEXT: vsel %v24, %v24, %v28, %v26 972; CHECK-NEXT: br %r14 973entry: 974 %not1 = xor <16 x i8> %src2, splat(i8 -1) 975 %or6 = and <16 x i8> %not1, %src3 976 %and7 = and <16 x i8> %src2, %src1 977 %or13 = or <16 x i8> %or6, %and7 978 ret <16 x i8> %or13 979} 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: # %entry 984; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 40 985; CHECK-NEXT: br %r14 986entry: 987 %0 = xor <16 x i8> %src3, %src1 988 %1 = xor <16 x i8> %src2, splat(i8 -1) 989 %or7 = and <16 x i8> %0, %1 990 ret <16 x i8> %or7 991} 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: # %entry 996; CHECK-NEXT: vx %v0, %v28, %v24 997; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 998; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 47 999; CHECK-NEXT: br %r14 1000entry: 1001 %0 = xor <16 x i8> %src3, %src1 1002 %1 = xor <16 x i8> %src2, splat(i8 -1) 1003 %or7 = and <16 x i8> %0, %1 1004 %and8 = and <16 x i8> %src2, %src1 1005 %and9 = and <16 x i8> %and8, %src3 1006 %or10 = or <16 x i8> %or7, %and9 1007 ret <16 x i8> %or10 1008} 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: # %entry 1013; CHECK-NEXT: vx %v0, %v28, %v24 1014; CHECK-NEXT: vnc %v1, %v24, %v28 1015; CHECK-NEXT: vsel %v24, %v1, %v0, %v26 1016; CHECK-NEXT: br %r14 1017entry: 1018 %not5 = xor <16 x i8> %src3, splat(i8 -1) 1019 %0 = xor <16 x i8> %src3, %src1 1020 %1 = xor <16 x i8> %src2, splat(i8 -1) 1021 %or7 = and <16 x i8> %0, %1 1022 %2 = and <16 x i8> %not5, %src1 1023 %and10 = and <16 x i8> %2, %src2 1024 %or11 = or <16 x i8> %or7, %and10 1025 ret <16 x i8> %or11 1026} 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: # %entry 1031; CHECK-NEXT: vx %v0, %v28, %v24 1032; CHECK-NEXT: vsel %v24, %v24, %v0, %v26 1033; CHECK-NEXT: br %r14 1034entry: 1035 %0 = xor <16 x i8> %src3, %src1 1036 %1 = xor <16 x i8> %src2, splat(i8 -1) 1037 %or7 = and <16 x i8> %0, %1 1038 %and8 = and <16 x i8> %src2, %src1 1039 %or14 = or <16 x i8> %or7, %and8 1040 ret <16 x i8> %or14 1041} 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: # %entry 1046; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 8 1047; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 47 1048; CHECK-NEXT: br %r14 1049entry: 1050 %not1 = xor <16 x i8> %src2, splat(i8 -1) 1051 %0 = or <16 x i8> %src2, %src1 1052 %1 = xor <16 x i8> %0, splat(i8 -1) 1053 %and2 = and <16 x i8> %1, %src3 1054 %and4 = and <16 x i8> %not1, %src1 1055 %or11 = or <16 x i8> %and2, %and4 1056 ret <16 x i8> %or11 1057} 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: # %entry 1062; CHECK-NEXT: vgbm %v0, 65535 1063; CHECK-NEXT: vn %v1, %v26, %v24 1064; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 1065; CHECK-NEXT: veval %v0, %v28, %v0, %v1, 7 1066; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 47 1067; CHECK-NEXT: br %r14 1068entry: 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, %not 1072 %and4 = and <16 x i8> %not1, %src1 1073 %and12 = and <16 x i8> %src2, %src1 1074 %and228 = or <16 x i8> %and, %and12 1075 %0 = and <16 x i8> %and228, %src3 1076 %or14 = or <16 x i8> %0, %and4 1077 ret <16 x i8> %or14 1078} 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: # %entry 1083; CHECK-NEXT: vgbm %v0, 65535 1084; CHECK-NEXT: vno %v1, %v28, %v28 1085; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 1086; CHECK-NEXT: veval %v1, %v24, %v1, %v26, 11 1087; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 1088; CHECK-NEXT: br %r14 1089entry: 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, %not 1093 %and2 = and <16 x i8> %and, %src3 1094 %not5 = xor <16 x i8> %src3, splat(i8 -1) 1095 %and429 = or <16 x i8> %not5, %not1 1096 %0 = and <16 x i8> %and429, %src1 1097 %or15 = or <16 x i8> %0, %and2 1098 ret <16 x i8> %or15 1099} 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: # %entry 1104; CHECK-NEXT: vo %v0, %v26, %v24 1105; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 47 1106; CHECK-NEXT: br %r14 1107entry: 1108 %and.demorgan = or <16 x i8> %src2, %src1 1109 %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 1110 %and2 = and <16 x i8> %and, %src3 1111 %or18 = or <16 x i8> %and2, %src1 1112 ret <16 x i8> %or18 1113} 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: # %entry 1118; CHECK-NEXT: vnc %v24, %v28, %v24 1119; CHECK-NEXT: br %r14 1120entry: 1121 %not = xor <16 x i8> %src1, splat(i8 -1) 1122 %or6 = and <16 x i8> %not, %src3 1123 ret <16 x i8> %or6 1124} 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: # %entry 1129; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 11 1130; CHECK-NEXT: br %r14 1131entry: 1132 %not = xor <16 x i8> %src1, splat(i8 -1) 1133 %or620 = or <16 x i8> %not, %src2 1134 %or9 = and <16 x i8> %or620, %src3 1135 ret <16 x i8> %or9 1136} 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: # %entry 1141; CHECK-NEXT: vnc %v0, %v26, %v28 1142; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 1143; CHECK-NEXT: br %r14 1144entry: 1145 %not = xor <16 x i8> %src1, splat(i8 -1) 1146 %or6 = and <16 x i8> %not, %src3 1147 %not8 = xor <16 x i8> %src3, splat(i8 -1) 1148 %0 = and <16 x i8> %not8, %src2 1149 %and9 = and <16 x i8> %0, %src1 1150 %or10 = or <16 x i8> %and9, %or6 1151 ret <16 x i8> %or10 1152} 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: # %entry 1157; CHECK-NEXT: vsel %v24, %v26, %v28, %v24 1158; CHECK-NEXT: br %r14 1159entry: 1160 %not = xor <16 x i8> %src1, splat(i8 -1) 1161 %or6 = and <16 x i8> %not, %src3 1162 %and7 = and <16 x i8> %src2, %src1 1163 %or13 = or <16 x i8> %or6, %and7 1164 ret <16 x i8> %or13 1165} 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: # %entry 1170; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 14 1171; CHECK-NEXT: br %r14 1172entry: 1173 %or621.demorgan = and <16 x i8> %src2, %src1 1174 %or621 = xor <16 x i8> %or621.demorgan, splat(i8 -1) 1175 %or10 = and <16 x i8> %or621, %src3 1176 ret <16 x i8> %or10 1177} 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: # %entry 1182; CHECK-NEXT: vlr %v24, %v28 1183; CHECK-NEXT: br %r14 1184entry: 1185 ret <16 x i8> %src3 1186} 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: # %entry 1191; CHECK-NEXT: vn %v0, %v26, %v24 1192; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 1193; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 1194; CHECK-NEXT: br %r14 1195entry: 1196 %or629.demorgan = and <16 x i8> %src2, %src1 1197 %or629 = xor <16 x i8> %or629.demorgan, splat(i8 -1) 1198 %or10 = and <16 x i8> %or629, %src3 1199 %not12 = xor <16 x i8> %src3, splat(i8 -1) 1200 %0 = and <16 x i8> %not12, %src1 1201 %and13 = and <16 x i8> %0, %src2 1202 %or14 = or <16 x i8> %and13, %or10 1203 ret <16 x i8> %or14 1204} 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: # %entry 1209; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 31 1210; CHECK-NEXT: br %r14 1211entry: 1212 %and11 = and <16 x i8> %src2, %src1 1213 %or17 = or <16 x i8> %and11, %src3 1214 ret <16 x i8> %or17 1215} 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: # %entry 1220; CHECK-NEXT: vno %v0, %v28, %v26 1221; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 1222; CHECK-NEXT: br %r14 1223entry: 1224 %not = xor <16 x i8> %src1, splat(i8 -1) 1225 %or6 = and <16 x i8> %not, %src3 1226 %0 = or <16 x i8> %src3, %src2 1227 %1 = xor <16 x i8> %0, splat(i8 -1) 1228 %and10 = and <16 x i8> %1, %src1 1229 %or11 = or <16 x i8> %and10, %or6 1230 ret <16 x i8> %or11 1231} 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: # %entry 1236; CHECK-NEXT: vo %v0, %v28, %v26 1237; CHECK-NEXT: veval %v1, %v28, %v26, %v24, 11 1238; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 47 1239; CHECK-NEXT: br %r14 1240entry: 1241 %not = xor <16 x i8> %src1, splat(i8 -1) 1242 %0 = or <16 x i8> %src3, %src2 1243 %1 = xor <16 x i8> %0, splat(i8 -1) 1244 %and10 = and <16 x i8> %1, %src1 1245 %or629 = or <16 x i8> %not, %src2 1246 %2 = and <16 x i8> %or629, %src3 1247 %or14 = or <16 x i8> %and10, %2 1248 ret <16 x i8> %or14 1249} 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: # %entry 1254; CHECK-NEXT: vx %v24, %v28, %v24 1255; CHECK-NEXT: br %r14 1256entry: 1257 %or15 = xor <16 x i8> %src3, %src1 1258 ret <16 x i8> %or15 1259} 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: # %entry 1264; CHECK-NEXT: voc %v0, %v26, %v28 1265; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 1266; CHECK-NEXT: br %r14 1267entry: 1268 %not = xor <16 x i8> %src1, splat(i8 -1) 1269 %or6 = and <16 x i8> %not, %src3 1270 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 1271 %and1037 = or <16 x i8> %src3.not, %src2 1272 %0 = and <16 x i8> %and1037, %src1 1273 %or18 = or <16 x i8> %0, %or6 1274 ret <16 x i8> %or18 1275} 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: # %entry 1280; CHECK-NEXT: vno %v0, %v26, %v26 1281; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 1282; CHECK-NEXT: br %r14 1283entry: 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, %src3 1287 %and8 = and <16 x i8> %not1, %src1 1288 %or15 = or <16 x i8> %or6, %and8 1289 ret <16 x i8> %or15 1290} 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: # %entry 1295; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 47 1296; CHECK-NEXT: br %r14 1297entry: 1298 %not1 = xor <16 x i8> %src2, splat(i8 -1) 1299 %and8 = and <16 x i8> %not1, %src1 1300 %or18 = or <16 x i8> %and8, %src3 1301 ret <16 x i8> %or18 1302} 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: # %entry 1307; CHECK-NEXT: vnn %v0, %v28, %v26 1308; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 1309; CHECK-NEXT: br %r14 1310entry: 1311 %not = xor <16 x i8> %src1, splat(i8 -1) 1312 %or6 = and <16 x i8> %not, %src3 1313 %and838.demorgan = and <16 x i8> %src3, %src2 1314 %and838 = xor <16 x i8> %and838.demorgan, splat(i8 -1) 1315 %0 = and <16 x i8> %and838, %src1 1316 %or19 = or <16 x i8> %0, %or6 1317 ret <16 x i8> %or19 1318} 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: # %entry 1323; CHECK-NEXT: vo %v24, %v28, %v24 1324; CHECK-NEXT: br %r14 1325entry: 1326 %or22 = or <16 x i8> %src3, %src1 1327 ret <16 x i8> %or22 1328} 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: # %entry 1333; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 40 1334; CHECK-NEXT: br %r14 1335entry: 1336 %0 = xor <16 x i8> %src3, %src2 1337 %1 = xor <16 x i8> %src1, splat(i8 -1) 1338 %or7 = and <16 x i8> %0, %1 1339 ret <16 x i8> %or7 1340} 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: # %entry 1345; CHECK-NEXT: vx %v0, %v28, %v26 1346; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 1347; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 1348; CHECK-NEXT: br %r14 1349entry: 1350 %0 = xor <16 x i8> %src3, %src2 1351 %1 = xor <16 x i8> %src1, splat(i8 -1) 1352 %or7 = and <16 x i8> %0, %1 1353 %and8 = and <16 x i8> %src2, %src1 1354 %and9 = and <16 x i8> %and8, %src3 1355 %or10 = or <16 x i8> %or7, %and9 1356 ret <16 x i8> %or10 1357} 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: # %entry 1362; CHECK-NEXT: vx %v0, %v28, %v26 1363; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 1364; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 1365; CHECK-NEXT: br %r14 1366entry: 1367 %not5 = xor <16 x i8> %src3, splat(i8 -1) 1368 %0 = xor <16 x i8> %src3, %src2 1369 %1 = xor <16 x i8> %src1, splat(i8 -1) 1370 %or7 = and <16 x i8> %0, %1 1371 %2 = and <16 x i8> %not5, %src1 1372 %and10 = and <16 x i8> %2, %src2 1373 %or11 = or <16 x i8> %or7, %and10 1374 ret <16 x i8> %or11 1375} 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: # %entry 1380; CHECK-NEXT: vx %v0, %v28, %v26 1381; CHECK-NEXT: vsel %v24, %v26, %v0, %v24 1382; CHECK-NEXT: br %r14 1383entry: 1384 %0 = xor <16 x i8> %src3, %src2 1385 %1 = xor <16 x i8> %src1, splat(i8 -1) 1386 %or7 = and <16 x i8> %0, %1 1387 %and8 = and <16 x i8> %src2, %src1 1388 %or14 = or <16 x i8> %or7, %and8 1389 ret <16 x i8> %or14 1390} 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: # %entry 1395; CHECK-NEXT: vno %v0, %v28, %v24 1396; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 1397; CHECK-NEXT: br %r14 1398entry: 1399 %not1 = xor <16 x i8> %src2, splat(i8 -1) 1400 %0 = or <16 x i8> %src3, %src1 1401 %1 = xor <16 x i8> %0, splat(i8 -1) 1402 %and6 = and <16 x i8> %1, %src2 1403 %2 = and <16 x i8> %not1, %src3 1404 %or11 = or <16 x i8> %and6, %2 1405 ret <16 x i8> %or11 1406} 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: # %entry 1411; CHECK-NEXT: vo %v0, %v28, %v24 1412; CHECK-NEXT: veval %v1, %v28, %v24, %v26, 11 1413; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 1414; CHECK-NEXT: br %r14 1415entry: 1416 %not1 = xor <16 x i8> %src2, splat(i8 -1) 1417 %0 = or <16 x i8> %src3, %src1 1418 %1 = xor <16 x i8> %0, splat(i8 -1) 1419 %and6 = and <16 x i8> %1, %src2 1420 %2 = or <16 x i8> %not1, %src1 1421 %3 = and <16 x i8> %2, %src3 1422 %or14 = or <16 x i8> %and6, %3 1423 ret <16 x i8> %or14 1424} 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: # %entry 1429; CHECK-NEXT: vx %v24, %v26, %v28 1430; CHECK-NEXT: br %r14 1431entry: 1432 %or15 = xor <16 x i8> %src2, %src3 1433 ret <16 x i8> %or15 1434} 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: # %entry 1439; CHECK-NEXT: voc %v0, %v24, %v28 1440; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 1441; CHECK-NEXT: br %r14 1442entry: 1443 %not1 = xor <16 x i8> %src2, splat(i8 -1) 1444 %0 = and <16 x i8> %not1, %src3 1445 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 1446 %and637 = or <16 x i8> %src3.not, %src1 1447 %1 = and <16 x i8> %and637, %src2 1448 %or18 = or <16 x i8> %1, %0 1449 ret <16 x i8> %or18 1450} 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: # %entry 1455; CHECK-NEXT: vx %v0, %v28, %v26 1456; CHECK-NEXT: vno %v1, %v28, %v26 1457; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 1458; CHECK-NEXT: br %r14 1459entry: 1460 %0 = xor <16 x i8> %src3, %src2 1461 %1 = xor <16 x i8> %src1, splat(i8 -1) 1462 %or7 = and <16 x i8> %0, %1 1463 %2 = or <16 x i8> %src3, %src2 1464 %3 = xor <16 x i8> %2, splat(i8 -1) 1465 %and11 = and <16 x i8> %3, %src1 1466 %or12 = or <16 x i8> %or7, %and11 1467 ret <16 x i8> %or12 1468} 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: # %entry 1473; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 105 1474; CHECK-NEXT: br %r14 1475entry: 1476 %0 = xor <16 x i8> %src3, %src2 1477 %or15 = xor <16 x i8> %0, %src1 1478 ret <16 x i8> %or15 1479} 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: # %entry 1484; CHECK-NEXT: vno %v0, %v28, %v28 1485; CHECK-NEXT: vx %v1, %v28, %v26 1486; CHECK-NEXT: vsel %v24, %v0, %v1, %v24 1487; CHECK-NEXT: br %r14 1488entry: 1489 %not5 = xor <16 x i8> %src3, splat(i8 -1) 1490 %0 = xor <16 x i8> %src3, %src2 1491 %1 = xor <16 x i8> %src1, splat(i8 -1) 1492 %or7 = and <16 x i8> %0, %1 1493 %2 = and <16 x i8> %not5, %src1 1494 %or16 = or <16 x i8> %or7, %2 1495 ret <16 x i8> %or16 1496} 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: # %entry 1501; CHECK-NEXT: vx %v0, %v28, %v26 1502; CHECK-NEXT: voc %v1, %v26, %v28 1503; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 1504; CHECK-NEXT: br %r14 1505entry: 1506 %0 = xor <16 x i8> %src3, %src2 1507 %1 = xor <16 x i8> %src1, splat(i8 -1) 1508 %or7 = and <16 x i8> %0, %1 1509 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 1510 %and1137 = or <16 x i8> %src3.not, %src2 1511 %2 = and <16 x i8> %and1137, %src1 1512 %or19 = or <16 x i8> %or7, %2 1513 ret <16 x i8> %or19 1514} 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: # %entry 1519; CHECK-NEXT: vno %v0, %v24, %v24 1520; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1521; CHECK-NEXT: vo %v1, %v28, %v24 1522; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 47 1523; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 1524; CHECK-NEXT: br %r14 1525entry: 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, %not 1529 %and2 = and <16 x i8> %and, %src3 1530 %0 = or <16 x i8> %src3, %src1 1531 %1 = xor <16 x i8> %0, splat(i8 -1) 1532 %and6 = and <16 x i8> %1, %src2 1533 %and9 = and <16 x i8> %not1, %src1 1534 %or7 = or <16 x i8> %and2, %and9 1535 %or16 = or <16 x i8> %or7, %and6 1536 ret <16 x i8> %or16 1537} 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: # %entry 1542; CHECK-NEXT: vgbm %v0, 65535 1543; CHECK-NEXT: vn %v2, %v26, %v24 1544; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 1545; CHECK-NEXT: vo %v1, %v28, %v24 1546; CHECK-NEXT: veval %v0, %v28, %v0, %v2, 7 1547; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 47 1548; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 1549; CHECK-NEXT: br %r14 1550entry: 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, %not 1554 %0 = or <16 x i8> %src3, %src1 1555 %1 = xor <16 x i8> %0, splat(i8 -1) 1556 %and6 = and <16 x i8> %1, %src2 1557 %and9 = and <16 x i8> %not1, %src1 1558 %and17 = and <16 x i8> %src2, %src1 1559 %and237 = or <16 x i8> %and, %and17 1560 %2 = and <16 x i8> %and237, %src3 1561 %or16 = or <16 x i8> %2, %and9 1562 %or19 = or <16 x i8> %or16, %and6 1563 ret <16 x i8> %or19 1564} 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: # %entry 1569; CHECK-NEXT: vno %v0, %v24, %v24 1570; CHECK-NEXT: vgbm %v1, 65535 1571; CHECK-NEXT: vo %v2, %v28, %v24 1572; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1573; CHECK-NEXT: veval %v0, %v0, %v26, %v2, 47 1574; CHECK-NEXT: veval %v1, %v26, %v1, %v28, 190 1575; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 1576; CHECK-NEXT: br %r14 1577entry: 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, %not 1581 %and2 = and <16 x i8> %and, %src3 1582 %not5 = xor <16 x i8> %src3, splat(i8 -1) 1583 %0 = or <16 x i8> %src3, %src1 1584 %1 = xor <16 x i8> %0, splat(i8 -1) 1585 %and6 = and <16 x i8> %1, %src2 1586 %or7 = or <16 x i8> %and6, %and2 1587 %and938 = or <16 x i8> %not5, %not1 1588 %2 = and <16 x i8> %and938, %src1 1589 %or20 = or <16 x i8> %or7, %2 1590 ret <16 x i8> %or20 1591} 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: # %entry 1596; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 111 1597; CHECK-NEXT: br %r14 1598entry: 1599 %0 = xor <16 x i8> %src3, %src2 1600 %or23 = or <16 x i8> %0, %src1 1601 ret <16 x i8> %or23 1602} 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: # %entry 1607; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 8 1608; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 47 1609; CHECK-NEXT: br %r14 1610entry: 1611 %not = xor <16 x i8> %src1, splat(i8 -1) 1612 %0 = or <16 x i8> %src2, %src1 1613 %1 = xor <16 x i8> %0, splat(i8 -1) 1614 %and2 = and <16 x i8> %1, %src3 1615 %and4 = and <16 x i8> %not, %src2 1616 %or11 = or <16 x i8> %and2, %and4 1617 ret <16 x i8> %or11 1618} 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: # %entry 1623; CHECK-NEXT: vgbm %v0, 65535 1624; CHECK-NEXT: vn %v1, %v26, %v24 1625; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 1626; CHECK-NEXT: veval %v0, %v28, %v0, %v1, 7 1627; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 47 1628; CHECK-NEXT: br %r14 1629entry: 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, %not 1633 %and4 = and <16 x i8> %not, %src2 1634 %and12 = and <16 x i8> %src2, %src1 1635 %and228 = or <16 x i8> %and, %and12 1636 %0 = and <16 x i8> %and228, %src3 1637 %or14 = or <16 x i8> %0, %and4 1638 ret <16 x i8> %or14 1639} 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: # %entry 1644; CHECK-NEXT: vno %v0, %v24, %v24 1645; CHECK-NEXT: vgbm %v1, 65535 1646; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1647; CHECK-NEXT: veval %v1, %v24, %v1, %v28, 190 1648; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 31 1649; CHECK-NEXT: br %r14 1650entry: 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, %not 1654 %and2 = and <16 x i8> %and, %src3 1655 %not5 = xor <16 x i8> %src3, splat(i8 -1) 1656 %and429 = or <16 x i8> %not5, %not 1657 %0 = and <16 x i8> %and429, %src2 1658 %or15 = or <16 x i8> %and2, %0 1659 ret <16 x i8> %or15 1660} 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: # %entry 1665; CHECK-NEXT: vo %v0, %v26, %v24 1666; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 47 1667; CHECK-NEXT: br %r14 1668entry: 1669 %and.demorgan = or <16 x i8> %src2, %src1 1670 %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 1671 %and2 = and <16 x i8> %and, %src3 1672 %or18 = or <16 x i8> %and2, %src2 1673 ret <16 x i8> %or18 1674} 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: # %entry 1679; CHECK-NEXT: vno %v0, %v24, %v24 1680; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 1681; CHECK-NEXT: br %r14 1682entry: 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, %src2 1686 %0 = and <16 x i8> %not1, %src3 1687 %or15 = or <16 x i8> %0, %and4 1688 ret <16 x i8> %or15 1689} 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: # %entry 1694; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 47 1695; CHECK-NEXT: br %r14 1696entry: 1697 %not = xor <16 x i8> %src1, splat(i8 -1) 1698 %and4 = and <16 x i8> %not, %src2 1699 %or18 = or <16 x i8> %and4, %src3 1700 ret <16 x i8> %or18 1701} 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: # %entry 1706; CHECK-NEXT: vnn %v0, %v28, %v24 1707; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 1708; CHECK-NEXT: br %r14 1709entry: 1710 %not1 = xor <16 x i8> %src2, splat(i8 -1) 1711 %0 = and <16 x i8> %not1, %src3 1712 %and438.demorgan = and <16 x i8> %src3, %src1 1713 %and438 = xor <16 x i8> %and438.demorgan, splat(i8 -1) 1714 %1 = and <16 x i8> %and438, %src2 1715 %or19 = or <16 x i8> %0, %1 1716 ret <16 x i8> %or19 1717} 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: # %entry 1722; CHECK-NEXT: vo %v24, %v28, %v26 1723; CHECK-NEXT: br %r14 1724entry: 1725 %or22 = or <16 x i8> %src3, %src2 1726 ret <16 x i8> %or22 1727} 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: # %entry 1732; CHECK-NEXT: vno %v0, %v24, %v24 1733; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1734; CHECK-NEXT: vo %v1, %v28, %v26 1735; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 1736; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 1737; CHECK-NEXT: br %r14 1738entry: 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, %not 1742 %and2 = and <16 x i8> %and, %src3 1743 %and4 = and <16 x i8> %not, %src2 1744 %or11 = or <16 x i8> %and2, %and4 1745 %0 = or <16 x i8> %src3, %src2 1746 %1 = xor <16 x i8> %0, splat(i8 -1) 1747 %and15 = and <16 x i8> %1, %src1 1748 %or16 = or <16 x i8> %or11, %and15 1749 ret <16 x i8> %or16 1750} 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: # %entry 1755; CHECK-NEXT: vgbm %v0, 65535 1756; CHECK-NEXT: vn %v2, %v26, %v24 1757; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 1758; CHECK-NEXT: vo %v1, %v28, %v26 1759; CHECK-NEXT: veval %v0, %v28, %v0, %v2, 7 1760; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 1761; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 1762; CHECK-NEXT: br %r14 1763entry: 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, %not 1767 %and4 = and <16 x i8> %not, %src2 1768 %0 = or <16 x i8> %src3, %src2 1769 %1 = xor <16 x i8> %0, splat(i8 -1) 1770 %and15 = and <16 x i8> %1, %src1 1771 %and17 = and <16 x i8> %src2, %src1 1772 %and237 = or <16 x i8> %and, %and17 1773 %2 = and <16 x i8> %and237, %src3 1774 %or16 = or <16 x i8> %2, %and4 1775 %or19 = or <16 x i8> %or16, %and15 1776 ret <16 x i8> %or19 1777} 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: # %entry 1782; CHECK-NEXT: vno %v0, %v24, %v24 1783; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1784; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 1785; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 47 1786; CHECK-NEXT: br %r14 1787entry: 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, %not 1791 %and2 = and <16 x i8> %and, %src3 1792 %and4 = and <16 x i8> %not, %src2 1793 %not5 = xor <16 x i8> %src3, splat(i8 -1) 1794 %or11 = or <16 x i8> %and2, %and4 1795 %0 = and <16 x i8> %not5, %src1 1796 %or20 = or <16 x i8> %or11, %0 1797 ret <16 x i8> %or20 1798} 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: # %entry 1803; CHECK-NEXT: vno %v0, %v24, %v24 1804; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1805; CHECK-NEXT: voc %v1, %v26, %v28 1806; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 1807; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 1808; CHECK-NEXT: br %r14 1809entry: 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, %not 1813 %and2 = and <16 x i8> %and, %src3 1814 %and4 = and <16 x i8> %not, %src2 1815 %or11 = or <16 x i8> %and2, %and4 1816 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 1817 %and1545 = or <16 x i8> %src3.not, %src2 1818 %0 = and <16 x i8> %and1545, %src1 1819 %or23 = or <16 x i8> %or11, %0 1820 ret <16 x i8> %or23 1821} 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: # %entry 1826; CHECK-NEXT: vo %v0, %v26, %v24 1827; CHECK-NEXT: vx %v1, %v24, %v26 1828; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 1829; CHECK-NEXT: br %r14 1830entry: 1831 %0 = or <16 x i8> %src2, %src1 1832 %1 = xor <16 x i8> %0, splat(i8 -1) 1833 %and2 = and <16 x i8> %1, %src3 1834 %or11 = xor <16 x i8> %src1, %src2 1835 %or20 = or <16 x i8> %or11, %and2 1836 ret <16 x i8> %or20 1837} 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: # %entry 1842; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 111 1843; CHECK-NEXT: br %r14 1844entry: 1845 %or11 = xor <16 x i8> %src1, %src2 1846 %or23 = or <16 x i8> %or11, %src3 1847 ret <16 x i8> %or23 1848} 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: # %entry 1853; CHECK-NEXT: vno %v0, %v24, %v24 1854; CHECK-NEXT: vgbm %v1, 65535 1855; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1856; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 1857; CHECK-NEXT: veval %v1, %v26, %v1, %v28, 190 1858; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 1859; CHECK-NEXT: br %r14 1860entry: 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, %not 1864 %and2 = and <16 x i8> %and, %src3 1865 %and4 = and <16 x i8> %not, %src2 1866 %not5 = xor <16 x i8> %src3, splat(i8 -1) 1867 %or11 = or <16 x i8> %and2, %and4 1868 %and1346 = or <16 x i8> %not5, %not1 1869 %0 = and <16 x i8> %and1346, %src1 1870 %or24 = or <16 x i8> %or11, %0 1871 ret <16 x i8> %or24 1872} 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: # %entry 1877; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 8 1878; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 127 1879; CHECK-NEXT: br %r14 1880entry: 1881 %0 = or <16 x i8> %src2, %src1 1882 %1 = xor <16 x i8> %0, splat(i8 -1) 1883 %and2 = and <16 x i8> %1, %src3 1884 %2 = or <16 x i8> %and2, %src1 1885 %or27 = or <16 x i8> %2, %src2 1886 ret <16 x i8> %or27 1887} 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: # %entry 1892; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 128 1893; CHECK-NEXT: br %r14 1894entry: 1895 %and.demorgan = or <16 x i8> %src2, %src1 1896 %and3.demorgan = or <16 x i8> %and.demorgan, %src3 1897 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 1898 ret <16 x i8> %and3 1899} 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: # %entry 1904; CHECK-NEXT: vo %v0, %v26, %v24 1905; CHECK-NEXT: vn %v1, %v26, %v24 1906; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 139 1907; CHECK-NEXT: br %r14 1908entry: 1909 %and.demorgan = or <16 x i8> %src2, %src1 1910 %and3.demorgan = or <16 x i8> %and.demorgan, %src3 1911 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 1912 %and4 = and <16 x i8> %src2, %src1 1913 %and5 = and <16 x i8> %and4, %src3 1914 %or6 = or <16 x i8> %and5, %and3 1915 ret <16 x i8> %or6 1916} 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: # %entry 1921; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 130 1922; CHECK-NEXT: br %r14 1923entry: 1924 %0 = xor <16 x i8> %src2, %src1 1925 %or7.demorgan = or <16 x i8> %0, %src3 1926 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 1927 ret <16 x i8> %or7 1928} 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: # %entry 1933; CHECK-NEXT: vn %v0, %v26, %v24 1934; CHECK-NEXT: vx %v1, %v26, %v24 1935; CHECK-NEXT: veval %v24, %v0, %v28, %v1, 139 1936; CHECK-NEXT: br %r14 1937entry: 1938 %and4 = and <16 x i8> %src2, %src1 1939 %0 = xor <16 x i8> %src2, %src1 1940 %or7.demorgan = or <16 x i8> %0, %src3 1941 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 1942 %and9 = and <16 x i8> %and4, %src3 1943 %or10 = or <16 x i8> %and9, %or7 1944 ret <16 x i8> %or10 1945} 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: # %entry 1950; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 130 1951; CHECK-NEXT: br %r14 1952entry: 1953 %0 = xor <16 x i8> %src3, %src1 1954 %1 = or <16 x i8> %0, %src2 1955 %or7 = xor <16 x i8> %1, splat(i8 -1) 1956 ret <16 x i8> %or7 1957} 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: # %entry 1962; CHECK-NEXT: vx %v0, %v28, %v24 1963; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 1964; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 143 1965; CHECK-NEXT: br %r14 1966entry: 1967 %0 = xor <16 x i8> %src3, %src1 1968 %1 = or <16 x i8> %0, %src2 1969 %or7 = xor <16 x i8> %1, splat(i8 -1) 1970 %and8 = and <16 x i8> %src2, %src1 1971 %and9 = and <16 x i8> %and8, %src3 1972 %or10 = or <16 x i8> %and9, %or7 1973 ret <16 x i8> %or10 1974} 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: # %entry 1979; CHECK-NEXT: vx %v0, %v28, %v24 1980; CHECK-NEXT: vnc %v1, %v24, %v28 1981; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 139 1982; CHECK-NEXT: br %r14 1983entry: 1984 %not2 = xor <16 x i8> %src3, splat(i8 -1) 1985 %0 = xor <16 x i8> %src3, %src1 1986 %1 = or <16 x i8> %0, %src2 1987 %or7 = xor <16 x i8> %1, splat(i8 -1) 1988 %2 = and <16 x i8> %not2, %src1 1989 %and10 = and <16 x i8> %2, %src2 1990 %or11 = or <16 x i8> %and10, %or7 1991 ret <16 x i8> %or11 1992} 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: # %entry 1997; CHECK-NEXT: vx %v0, %v28, %v24 1998; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 139 1999; CHECK-NEXT: br %r14 2000entry: 2001 %0 = xor <16 x i8> %src3, %src1 2002 %1 = or <16 x i8> %0, %src2 2003 %or7 = xor <16 x i8> %1, splat(i8 -1) 2004 %and8 = and <16 x i8> %src2, %src1 2005 %or14 = or <16 x i8> %and8, %or7 2006 ret <16 x i8> %or14 2007} 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: # %entry 2012; CHECK-NEXT: vno %v24, %v28, %v26 2013; CHECK-NEXT: br %r14 2014entry: 2015 %0 = or <16 x i8> %src3, %src2 2016 %1 = xor <16 x i8> %0, splat(i8 -1) 2017 ret <16 x i8> %1 2018} 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: # %entry 2023; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 137 2024; CHECK-NEXT: br %r14 2025entry: 2026 %0 = or <16 x i8> %src3, %src2 2027 %1 = xor <16 x i8> %0, splat(i8 -1) 2028 %and9 = and <16 x i8> %src2, %src1 2029 %and10 = and <16 x i8> %and9, %src3 2030 %or11 = or <16 x i8> %and10, %1 2031 ret <16 x i8> %or11 2032} 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: # %entry 2037; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 127 2038; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 174 2039; CHECK-NEXT: br %r14 2040entry: 2041 %not2 = xor <16 x i8> %src3, splat(i8 -1) 2042 %0 = or <16 x i8> %src2, %src1 2043 %and3.demorgan = or <16 x i8> %0, %src3 2044 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2045 %1 = and <16 x i8> %not2, %src1 2046 %or12 = or <16 x i8> %1, %and3 2047 ret <16 x i8> %or12 2048} 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: # %entry 2053; CHECK-NEXT: vo %v0, %v26, %v24 2054; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 11 2055; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 143 2056; CHECK-NEXT: br %r14 2057entry: 2058 %0 = or <16 x i8> %src2, %src1 2059 %and3.demorgan = or <16 x i8> %0, %src3 2060 %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, %src2 2063 %1 = and <16 x i8> %and729, %src1 2064 %or15 = or <16 x i8> %1, %and3 2065 ret <16 x i8> %or15 2066} 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: # %entry 2071; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 127 2072; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 174 2073; CHECK-NEXT: br %r14 2074entry: 2075 %not1 = xor <16 x i8> %src2, splat(i8 -1) 2076 %0 = or <16 x i8> %src1, %src3 2077 %and3.demorgan = or <16 x i8> %0, %src2 2078 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2079 %and5 = and <16 x i8> %not1, %src1 2080 %or12 = or <16 x i8> %and5, %and3 2081 ret <16 x i8> %or12 2082} 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: # %entry 2087; CHECK-NEXT: vo %v0, %v26, %v24 2088; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 2089; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 2090; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 143 2091; CHECK-NEXT: br %r14 2092entry: 2093 %not1 = xor <16 x i8> %src2, splat(i8 -1) 2094 %0 = or <16 x i8> %src2, %src1 2095 %and3.demorgan = or <16 x i8> %0, %src3 2096 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2097 %and5 = and <16 x i8> %not1, %src1 2098 %and13 = and <16 x i8> %src2, %src1 2099 %and14 = and <16 x i8> %and13, %src3 2100 %or12 = or <16 x i8> %and14, %and5 2101 %or15 = or <16 x i8> %or12, %and3 2102 ret <16 x i8> %or15 2103} 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: # %entry 2108; CHECK-NEXT: vn %v1, %v28, %v26 2109; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 127 2110; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 2111; CHECK-NEXT: br %r14 2112entry: 2113 %0 = or <16 x i8> %src2, %src1 2114 %and3.demorgan = or <16 x i8> %0, %src3 2115 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2116 %and530.demorgan = and <16 x i8> %src3, %src2 2117 %and530 = xor <16 x i8> %and530.demorgan, splat(i8 -1) 2118 %1 = and <16 x i8> %and530, %src1 2119 %or16 = or <16 x i8> %1, %and3 2120 ret <16 x i8> %or16 2121} 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: # %entry 2126; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 143 2127; CHECK-NEXT: br %r14 2128entry: 2129 %0 = or <16 x i8> %src3, %src2 2130 %.not = xor <16 x i8> %0, splat(i8 -1) 2131 %or19 = or <16 x i8> %.not, %src1 2132 ret <16 x i8> %or19 2133} 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: # %entry 2138; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 130 2139; CHECK-NEXT: br %r14 2140entry: 2141 %0 = xor <16 x i8> %src3, %src2 2142 %or7.demorgan = or <16 x i8> %0, %src1 2143 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2144 ret <16 x i8> %or7 2145} 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: # %entry 2150; CHECK-NEXT: vx %v0, %v28, %v26 2151; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 2152; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 2153; CHECK-NEXT: br %r14 2154entry: 2155 %0 = xor <16 x i8> %src3, %src2 2156 %or7.demorgan = or <16 x i8> %0, %src1 2157 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2158 %and8 = and <16 x i8> %src2, %src1 2159 %and9 = and <16 x i8> %and8, %src3 2160 %or10 = or <16 x i8> %and9, %or7 2161 ret <16 x i8> %or10 2162} 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: # %entry 2167; CHECK-NEXT: vx %v0, %v28, %v26 2168; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 2169; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 2170; CHECK-NEXT: br %r14 2171entry: 2172 %not2 = xor <16 x i8> %src3, splat(i8 -1) 2173 %0 = xor <16 x i8> %src3, %src2 2174 %or7.demorgan = or <16 x i8> %0, %src1 2175 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2176 %1 = and <16 x i8> %not2, %src1 2177 %and10 = and <16 x i8> %1, %src2 2178 %or11 = or <16 x i8> %and10, %or7 2179 ret <16 x i8> %or11 2180} 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: # %entry 2185; CHECK-NEXT: vx %v0, %v28, %v26 2186; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 139 2187; CHECK-NEXT: br %r14 2188entry: 2189 %0 = xor <16 x i8> %src3, %src2 2190 %or7.demorgan = or <16 x i8> %0, %src1 2191 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2192 %and8 = and <16 x i8> %src2, %src1 2193 %or14 = or <16 x i8> %and8, %or7 2194 ret <16 x i8> %or14 2195} 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: # %entry 2200; CHECK-NEXT: vx %v0, %v28, %v26 2201; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2202; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 2203; CHECK-NEXT: br %r14 2204entry: 2205 %not1 = xor <16 x i8> %src2, splat(i8 -1) 2206 %0 = xor <16 x i8> %src3, %src2 2207 %or7.demorgan = or <16 x i8> %0, %src1 2208 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2209 %and9 = and <16 x i8> %not1, %src1 2210 %and10 = and <16 x i8> %and9, %src3 2211 %or11 = or <16 x i8> %and10, %or7 2212 ret <16 x i8> %or11 2213} 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: # %entry 2218; CHECK-NEXT: vx %v0, %v28, %v26 2219; CHECK-NEXT: veval %v24, %v28, %v24, %v0, 139 2220; CHECK-NEXT: br %r14 2221entry: 2222 %0 = xor <16 x i8> %src3, %src2 2223 %or7.demorgan = or <16 x i8> %0, %src1 2224 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2225 %1 = and <16 x i8> %src3, %src1 2226 %or14 = or <16 x i8> %1, %or7 2227 ret <16 x i8> %or14 2228} 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: # %entry 2233; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2234; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2235; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 2 2236; CHECK-NEXT: veval %v24, %v1, %v2, %v0, 191 2237; CHECK-NEXT: br %r14 2238entry: 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, %src2 2242 %or7.demorgan = or <16 x i8> %0, %src1 2243 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2244 %and9 = and <16 x i8> %not1, %src1 2245 %and10 = and <16 x i8> %and9, %src3 2246 %or11 = or <16 x i8> %and10, %or7 2247 %1 = and <16 x i8> %not2, %src1 2248 %and14 = and <16 x i8> %1, %src2 2249 %or15 = or <16 x i8> %or11, %and14 2250 ret <16 x i8> %or15 2251} 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: # %entry 2256; CHECK-NEXT: vx %v0, %v28, %v26 2257; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2258; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 31 2259; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 2260; CHECK-NEXT: br %r14 2261entry: 2262 %not1 = xor <16 x i8> %src2, splat(i8 -1) 2263 %0 = xor <16 x i8> %src3, %src2 2264 %or7.demorgan = or <16 x i8> %0, %src1 2265 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2266 %and9 = and <16 x i8> %not1, %src1 2267 %and10 = and <16 x i8> %and9, %src3 2268 %and12 = and <16 x i8> %src2, %src1 2269 %or11 = or <16 x i8> %and10, %and12 2270 %or18 = or <16 x i8> %or11, %or7 2271 ret <16 x i8> %or18 2272} 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: # %entry 2277; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2278; CHECK-NEXT: veval %v24, %v28, %v26, %v0, 234 2279; CHECK-NEXT: br %r14 2280entry: 2281 %0 = xor <16 x i8> %src3, %src2 2282 %or7.demorgan = or <16 x i8> %0, %src1 2283 %1 = or <16 x i8> %src3, %src2 2284 %2 = and <16 x i8> %or7.demorgan, %1 2285 %or12 = xor <16 x i8> %2, splat(i8 -1) 2286 ret <16 x i8> %or12 2287} 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: # %entry 2292; CHECK-NEXT: vo %v1, %v28, %v26 2293; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2294; CHECK-NEXT: veval %v2, %v26, %v24, %v28, 1 2295; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 239 2296; CHECK-NEXT: br %r14 2297entry: 2298 %0 = xor <16 x i8> %src3, %src2 2299 %or7.demorgan = or <16 x i8> %0, %src1 2300 %1 = or <16 x i8> %src3, %src2 2301 %2 = and <16 x i8> %or7.demorgan, %1 2302 %or12 = xor <16 x i8> %2, splat(i8 -1) 2303 %and13 = and <16 x i8> %src2, %src1 2304 %and14 = and <16 x i8> %and13, %src3 2305 %or15 = or <16 x i8> %and14, %or12 2306 ret <16 x i8> %or15 2307} 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: # %entry 2312; CHECK-NEXT: vo %v1, %v28, %v26 2313; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2314; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 2 2315; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 239 2316; CHECK-NEXT: br %r14 2317entry: 2318 %not2 = xor <16 x i8> %src3, splat(i8 -1) 2319 %0 = xor <16 x i8> %src3, %src2 2320 %or7.demorgan = or <16 x i8> %0, %src1 2321 %1 = or <16 x i8> %src3, %src2 2322 %2 = and <16 x i8> %or7.demorgan, %1 2323 %or12 = xor <16 x i8> %2, splat(i8 -1) 2324 %3 = and <16 x i8> %not2, %src1 2325 %and15 = and <16 x i8> %3, %src2 2326 %or16 = or <16 x i8> %and15, %or12 2327 ret <16 x i8> %or16 2328} 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: # %entry 2333; CHECK-NEXT: vo %v1, %v28, %v26 2334; CHECK-NEXT: vn %v2, %v26, %v24 2335; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2336; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 239 2337; CHECK-NEXT: br %r14 2338entry: 2339 %0 = xor <16 x i8> %src3, %src2 2340 %or7.demorgan = or <16 x i8> %0, %src1 2341 %1 = or <16 x i8> %src3, %src2 2342 %2 = and <16 x i8> %or7.demorgan, %1 2343 %or12 = xor <16 x i8> %2, splat(i8 -1) 2344 %and13 = and <16 x i8> %src2, %src1 2345 %or19 = or <16 x i8> %and13, %or12 2346 ret <16 x i8> %or19 2347} 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: # %entry 2352; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2353; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 174 2354; CHECK-NEXT: br %r14 2355entry: 2356 %not1 = xor <16 x i8> %src2, splat(i8 -1) 2357 %0 = xor <16 x i8> %src3, %src2 2358 %or7.demorgan = or <16 x i8> %0, %src1 2359 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2360 %and9 = and <16 x i8> %not1, %src1 2361 %or16 = or <16 x i8> %and9, %or7 2362 ret <16 x i8> %or16 2363} 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: # %entry 2368; CHECK-NEXT: vx %v0, %v28, %v26 2369; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 2370; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 2371; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 2372; CHECK-NEXT: br %r14 2373entry: 2374 %not1 = xor <16 x i8> %src2, splat(i8 -1) 2375 %0 = xor <16 x i8> %src3, %src2 2376 %or7.demorgan = or <16 x i8> %0, %src1 2377 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2378 %and9 = and <16 x i8> %not1, %src1 2379 %and17 = and <16 x i8> %src2, %src1 2380 %and18 = and <16 x i8> %and17, %src3 2381 %or16 = or <16 x i8> %and18, %and9 2382 %or19 = or <16 x i8> %or16, %or7 2383 ret <16 x i8> %or19 2384} 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: # %entry 2389; CHECK-NEXT: vn %v1, %v28, %v26 2390; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2391; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 2392; CHECK-NEXT: br %r14 2393entry: 2394 %0 = xor <16 x i8> %src3, %src2 2395 %or7.demorgan = or <16 x i8> %0, %src1 2396 %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2397 %and938.demorgan = and <16 x i8> %src3, %src2 2398 %and938 = xor <16 x i8> %and938.demorgan, splat(i8 -1) 2399 %1 = and <16 x i8> %and938, %src1 2400 %or20 = or <16 x i8> %1, %or7 2401 ret <16 x i8> %or20 2402} 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: # %entry 2407; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 159 2408; CHECK-NEXT: br %r14 2409entry: 2410 %0 = xor <16 x i8> %src2, %src3 2411 %.not = xor <16 x i8> %0, splat(i8 -1) 2412 %or23 = or <16 x i8> %.not, %src1 2413 ret <16 x i8> %or23 2414} 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: # %entry 2419; CHECK-NEXT: vno %v24, %v28, %v24 2420; CHECK-NEXT: br %r14 2421entry: 2422 %0 = or <16 x i8> %src3, %src1 2423 %1 = xor <16 x i8> %0, splat(i8 -1) 2424 ret <16 x i8> %1 2425} 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: # %entry 2430; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 137 2431; CHECK-NEXT: br %r14 2432entry: 2433 %0 = or <16 x i8> %src3, %src1 2434 %1 = xor <16 x i8> %0, splat(i8 -1) 2435 %and9 = and <16 x i8> %src2, %src1 2436 %and10 = and <16 x i8> %and9, %src3 2437 %or11 = or <16 x i8> %and10, %1 2438 ret <16 x i8> %or11 2439} 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: # %entry 2444; CHECK-NEXT: veval %v0, %v28, %v24, %v26, 127 2445; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 174 2446; CHECK-NEXT: br %r14 2447entry: 2448 %not2 = xor <16 x i8> %src3, splat(i8 -1) 2449 %0 = or <16 x i8> %src3, %src1 2450 %and3.demorgan = or <16 x i8> %0, %src2 2451 %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2452 %1 = and <16 x i8> %not2, %src2 2453 %or12 = or <16 x i8> %1, %and3 2454 ret <16 x i8> %or12 2455} 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: # %entry 2460; CHECK-NEXT: vo %v0, %v26, %v24 2461; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 11 2462; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 143 2463; CHECK-NEXT: br %r14 2464entry: 2465 %0 = or <16 x i8> %src2, %src1 2466 %and3.demorgan = or <16 x i8> %0, %src3 2467 %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, %src1 2470 %1 = and <16 x i8> %and729, %src2 2471 %or15 = or <16 x i8> %1, %and3 2472 ret <16 x i8> %or15 2473} 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: # %entry 2478; CHECK-NEXT: vo %v0, %v28, %v24 2479; CHECK-NEXT: vx %v1, %v28, %v24 2480; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 234 2481; CHECK-NEXT: br %r14 2482entry: 2483 %0 = or <16 x i8> %src3, %src1 2484 %1 = xor <16 x i8> %src3, %src1 2485 %2 = or <16 x i8> %1, %src2 2486 %3 = and <16 x i8> %0, %2 2487 %or12 = xor <16 x i8> %3, splat(i8 -1) 2488 ret <16 x i8> %or12 2489} 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: # %entry 2494; CHECK-NEXT: vnx %v24, %v28, %v24 2495; CHECK-NEXT: br %r14 2496entry: 2497 %0 = xor <16 x i8> %src3, %src1 2498 %or15 = xor <16 x i8> %0, splat(i8 -1) 2499 ret <16 x i8> %or15 2500} 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: # %entry 2505; CHECK-NEXT: vo %v0, %v28, %v24 2506; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 2507; CHECK-NEXT: veval %v2, %v26, %v28, %v24, 111 2508; CHECK-NEXT: veval %v24, %v1, %v0, %v2, 239 2509; CHECK-NEXT: br %r14 2510entry: 2511 %not2 = xor <16 x i8> %src3, splat(i8 -1) 2512 %0 = or <16 x i8> %src3, %src1 2513 %1 = and <16 x i8> %not2, %src1 2514 %and15 = and <16 x i8> %1, %src2 2515 %2 = xor <16 x i8> %src3, %src1 2516 %3 = or <16 x i8> %2, %src2 2517 %4 = and <16 x i8> %0, %3 2518 %or12 = xor <16 x i8> %4, splat(i8 -1) 2519 %or16 = or <16 x i8> %and15, %or12 2520 ret <16 x i8> %or16 2521} 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: # %entry 2526; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 2 2527; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 31 2528; CHECK-NEXT: veval %v24, %v0, %v28, %v24, 143 2529; CHECK-NEXT: br %r14 2530entry: 2531 %not1 = xor <16 x i8> %src2, splat(i8 -1) 2532 %0 = or <16 x i8> %src3, %src1 2533 %1 = xor <16 x i8> %0, splat(i8 -1) 2534 %and10 = and <16 x i8> %not1, %src1 2535 %and11 = and <16 x i8> %and10, %src3 2536 %and13 = and <16 x i8> %src2, %src1 2537 %or8 = or <16 x i8> %and11, %and13 2538 %or19 = or <16 x i8> %or8, %1 2539 ret <16 x i8> %or19 2540} 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: # %entry 2545; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 168 2546; CHECK-NEXT: br %r14 2547entry: 2548 %0 = and <16 x i8> %src2, %src1 2549 %1 = or <16 x i8> %0, %src3 2550 %or13 = xor <16 x i8> %1, splat(i8 -1) 2551 ret <16 x i8> %or13 2552} 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: # %entry 2557; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 169 2558; CHECK-NEXT: br %r14 2559entry: 2560 %0 = and <16 x i8> %src2, %src1 2561 %1 = xor <16 x i8> %0, %src3 2562 %or16 = xor <16 x i8> %1, splat(i8 -1) 2563 ret <16 x i8> %or16 2564} 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: # %entry 2569; CHECK-NEXT: vno %v24, %v28, %v28 2570; CHECK-NEXT: br %r14 2571entry: 2572 %not2 = xor <16 x i8> %src3, splat(i8 -1) 2573 ret <16 x i8> %not2 2574} 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: # %entry 2579; CHECK-NEXT: voc %v0, %v26, %v28 2580; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 139 2581; CHECK-NEXT: br %r14 2582entry: 2583 %0 = or <16 x i8> %src3, %src1 2584 %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, %src2 2587 %2 = and <16 x i8> %and1238, %src1 2588 %or20 = or <16 x i8> %2, %1 2589 ret <16 x i8> %or20 2590} 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: # %entry 2595; CHECK-NEXT: vo %v0, %v28, %v24 2596; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 174 2597; CHECK-NEXT: br %r14 2598entry: 2599 %not1 = xor <16 x i8> %src2, splat(i8 -1) 2600 %0 = or <16 x i8> %src3, %src1 2601 %1 = xor <16 x i8> %0, splat(i8 -1) 2602 %and10 = and <16 x i8> %not1, %src1 2603 %or17 = or <16 x i8> %and10, %1 2604 ret <16 x i8> %or17 2605} 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: # %entry 2610; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 1 2611; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 47 2612; CHECK-NEXT: veval %v24, %v0, %v28, %v24, 143 2613; CHECK-NEXT: br %r14 2614entry: 2615 %not1 = xor <16 x i8> %src2, splat(i8 -1) 2616 %0 = or <16 x i8> %src3, %src1 2617 %1 = xor <16 x i8> %0, splat(i8 -1) 2618 %and10 = and <16 x i8> %not1, %src1 2619 %and18 = and <16 x i8> %src2, %src1 2620 %and19 = and <16 x i8> %and18, %src3 2621 %or8 = or <16 x i8> %and19, %and10 2622 %or20 = or <16 x i8> %or8, %1 2623 ret <16 x i8> %or20 2624} 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: # %entry 2629; CHECK-NEXT: vo %v0, %v28, %v24 2630; CHECK-NEXT: vn %v1, %v28, %v26 2631; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 2632; CHECK-NEXT: br %r14 2633entry: 2634 %0 = or <16 x i8> %src3, %src1 2635 %1 = xor <16 x i8> %0, splat(i8 -1) 2636 %and1039.demorgan = and <16 x i8> %src3, %src2 2637 %and1039 = xor <16 x i8> %and1039.demorgan, splat(i8 -1) 2638 %2 = and <16 x i8> %and1039, %src1 2639 %or21 = or <16 x i8> %2, %1 2640 ret <16 x i8> %or21 2641} 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: # %entry 2646; CHECK-NEXT: voc %v24, %v24, %v28 2647; CHECK-NEXT: br %r14 2648entry: 2649 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2650 %or24 = or <16 x i8> %src3.not, %src1 2651 ret <16 x i8> %or24 2652} 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: # %entry 2657; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 138 2658; CHECK-NEXT: br %r14 2659entry: 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, %src2 2663 %or12 = and <16 x i8> %and522, %not 2664 ret <16 x i8> %or12 2665} 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: # %entry 2670; CHECK-NEXT: voc %v0, %v26, %v28 2671; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 2672; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 2673; CHECK-NEXT: br %r14 2674entry: 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, %src2 2678 %or12 = and <16 x i8> %and529, %not 2679 %and13 = and <16 x i8> %src2, %src1 2680 %and14 = and <16 x i8> %and13, %src3 2681 %or15 = or <16 x i8> %or12, %and14 2682 ret <16 x i8> %or15 2683} 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: # %entry 2688; CHECK-NEXT: vn %v1, %v26, %v24 2689; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 138 2690; CHECK-NEXT: veval %v24, %v0, %v1, %v28, 47 2691; CHECK-NEXT: br %r14 2692entry: 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, %src2 2696 %or12 = and <16 x i8> %and530, %not 2697 %0 = and <16 x i8> %src2, %src1 2698 %and15 = and <16 x i8> %0, %not2 2699 %or16 = or <16 x i8> %or12, %and15 2700 ret <16 x i8> %or16 2701} 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: # %entry 2706; CHECK-NEXT: voc %v0, %v26, %v28 2707; CHECK-NEXT: vsel %v24, %v26, %v0, %v24 2708; CHECK-NEXT: br %r14 2709entry: 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, %src2 2713 %or12 = and <16 x i8> %and537, %not 2714 %and13 = and <16 x i8> %src2, %src1 2715 %or19 = or <16 x i8> %or12, %and13 2716 ret <16 x i8> %or19 2717} 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: # %entry 2722; CHECK-NEXT: voc %v0, %v26, %v28 2723; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2724; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 2725; CHECK-NEXT: br %r14 2726entry: 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, %src2 2731 %or12 = and <16 x i8> %and530, %not 2732 %and14 = and <16 x i8> %not1, %src1 2733 %and15 = and <16 x i8> %and14, %src3 2734 %or16 = or <16 x i8> %or12, %and15 2735 ret <16 x i8> %or16 2736} 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: # %entry 2741; CHECK-NEXT: voc %v0, %v26, %v28 2742; CHECK-NEXT: vsel %v24, %v28, %v0, %v24 2743; CHECK-NEXT: br %r14 2744entry: 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, %src2 2748 %or12 = and <16 x i8> %and537, %not 2749 %0 = and <16 x i8> %src3, %src1 2750 %or19 = or <16 x i8> %or12, %0 2751 ret <16 x i8> %or19 2752} 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: # %entry 2757; CHECK-NEXT: voc %v0, %v26, %v28 2758; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2759; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 2760; CHECK-NEXT: vn %v1, %v26, %v24 2761; CHECK-NEXT: veval %v24, %v0, %v1, %v28, 47 2762; CHECK-NEXT: br %r14 2763entry: 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, %src2 2768 %or12 = and <16 x i8> %and538, %not 2769 %and14 = and <16 x i8> %not1, %src1 2770 %and15 = and <16 x i8> %and14, %src3 2771 %or16 = or <16 x i8> %or12, %and15 2772 %0 = and <16 x i8> %src2, %src1 2773 %and19 = and <16 x i8> %0, %not2 2774 %or20 = or <16 x i8> %or16, %and19 2775 ret <16 x i8> %or20 2776} 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: # %entry 2781; CHECK-NEXT: voc %v0, %v26, %v28 2782; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2783; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 31 2784; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 2785; CHECK-NEXT: br %r14 2786entry: 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, %src2 2791 %or12 = and <16 x i8> %and545, %not 2792 %and14 = and <16 x i8> %not1, %src1 2793 %and15 = and <16 x i8> %and14, %src3 2794 %and17 = and <16 x i8> %src2, %src1 2795 %or16 = or <16 x i8> %and15, %and17 2796 %or23 = or <16 x i8> %or16, %or12 2797 ret <16 x i8> %or23 2798} 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: # %entry 2803; CHECK-NEXT: voc %v0, %v26, %v28 2804; CHECK-NEXT: vno %v1, %v28, %v26 2805; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 2806; CHECK-NEXT: br %r14 2807entry: 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, %src2 2811 %or12 = and <16 x i8> %and531, %not 2812 %0 = or <16 x i8> %src3, %src2 2813 %1 = xor <16 x i8> %0, splat(i8 -1) 2814 %and16 = and <16 x i8> %1, %src1 2815 %or17 = or <16 x i8> %or12, %and16 2816 ret <16 x i8> %or17 2817} 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: # %entry 2822; CHECK-NEXT: voc %v0, %v26, %v28 2823; CHECK-NEXT: vnx %v1, %v28, %v26 2824; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 2825; CHECK-NEXT: br %r14 2826entry: 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, %src2 2830 %or12 = and <16 x i8> %and538, %not 2831 %0 = xor <16 x i8> %src3, %src2 2832 %1 = xor <16 x i8> %0, splat(i8 -1) 2833 %or17 = and <16 x i8> %1, %src1 2834 %or20 = or <16 x i8> %or17, %or12 2835 ret <16 x i8> %or20 2836} 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: # %entry 2841; CHECK-NEXT: vno %v0, %v28, %v28 2842; CHECK-NEXT: voc %v1, %v26, %v28 2843; CHECK-NEXT: vsel %v24, %v0, %v1, %v24 2844; CHECK-NEXT: br %r14 2845entry: 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, %src2 2849 %or12 = and <16 x i8> %and539, %not 2850 %0 = and <16 x i8> %not2, %src1 2851 %or21 = or <16 x i8> %or12, %0 2852 ret <16 x i8> %or21 2853} 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: # %entry 2858; CHECK-NEXT: voc %v24, %v26, %v28 2859; CHECK-NEXT: br %r14 2860entry: 2861 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2862 %and546 = or <16 x i8> %src3.not, %src2 2863 ret <16 x i8> %and546 2864} 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: # %entry 2869; CHECK-NEXT: vno %v0, %v26, %v26 2870; CHECK-NEXT: voc %v1, %v26, %v28 2871; CHECK-NEXT: vsel %v24, %v0, %v1, %v24 2872; CHECK-NEXT: br %r14 2873entry: 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, %src2 2878 %or12 = and <16 x i8> %and539, %not 2879 %and14 = and <16 x i8> %not1, %src1 2880 %or21 = or <16 x i8> %or12, %and14 2881 ret <16 x i8> %or21 2882} 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: # %entry 2887; CHECK-NEXT: voc %v0, %v26, %v28 2888; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 2889; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 2890; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 2891; CHECK-NEXT: br %r14 2892entry: 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, %src2 2897 %or12 = and <16 x i8> %and546, %not 2898 %and14 = and <16 x i8> %not1, %src1 2899 %and22 = and <16 x i8> %src2, %src1 2900 %and23 = and <16 x i8> %and22, %src3 2901 %or21 = or <16 x i8> %and23, %and14 2902 %or24 = or <16 x i8> %or21, %or12 2903 ret <16 x i8> %or24 2904} 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: # %entry 2909; CHECK-NEXT: voc %v0, %v26, %v28 2910; CHECK-NEXT: vnn %v1, %v28, %v26 2911; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 2912; CHECK-NEXT: br %r14 2913entry: 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, %src2 2917 %or12 = and <16 x i8> %and547, %not 2918 %and1448.demorgan = and <16 x i8> %src3, %src2 2919 %and1448 = xor <16 x i8> %and1448.demorgan, splat(i8 -1) 2920 %0 = and <16 x i8> %and1448, %src1 2921 %or25 = or <16 x i8> %or12, %0 2922 ret <16 x i8> %or25 2923} 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: # %entry 2928; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 191 2929; CHECK-NEXT: br %r14 2930entry: 2931 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2932 %and554 = or <16 x i8> %src2, %src1 2933 %or28 = or <16 x i8> %and554, %src3.not 2934 ret <16 x i8> %or28 2935} 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: # %entry 2940; CHECK-NEXT: vno %v24, %v26, %v24 2941; CHECK-NEXT: br %r14 2942entry: 2943 %and.demorgan = or <16 x i8> %src2, %src1 2944 %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 2945 ret <16 x i8> %and 2946} 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: # %entry 2951; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 137 2952; CHECK-NEXT: br %r14 2953entry: 2954 %and.demorgan = or <16 x i8> %src2, %src1 2955 %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 2956 %0 = and <16 x i8> %src1, %src3 2957 %and10 = and <16 x i8> %0, %src2 2958 %or11 = or <16 x i8> %and10, %and 2959 ret <16 x i8> %or11 2960} 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: # %entry 2965; CHECK-NEXT: vno %v0, %v28, %v28 2966; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 137 2967; CHECK-NEXT: br %r14 2968entry: 2969 %and.demorgan = or <16 x i8> %src2, %src1 2970 %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, %src1 2973 %and11 = and <16 x i8> %0, %src2 2974 %or12 = or <16 x i8> %and11, %and 2975 ret <16 x i8> %or12 2976} 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: # %entry 2981; CHECK-NEXT: vnx %v24, %v24, %v26 2982; CHECK-NEXT: br %r14 2983entry: 2984 %0 = xor <16 x i8> %src1, %src2 2985 %or15 = xor <16 x i8> %0, splat(i8 -1) 2986 ret <16 x i8> %or15 2987} 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: # %entry 2992; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 138 2993; CHECK-NEXT: br %r14 2994entry: 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, %src3 2998 %or12 = and <16 x i8> %and22, %not1 2999 ret <16 x i8> %or12 3000} 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: # %entry 3005; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 139 3006; CHECK-NEXT: br %r14 3007entry: 3008 %and.demorgan = or <16 x i8> %src2, %src1 3009 %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 3010 %0 = and <16 x i8> %src3, %src1 3011 %or15 = or <16 x i8> %0, %and 3012 ret <16 x i8> %or15 3013} 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: # %entry 3018; CHECK-NEXT: vno %v0, %v26, %v26 3019; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 3020; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3021; CHECK-NEXT: vnc %v1, %v24, %v28 3022; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 31 3023; CHECK-NEXT: br %r14 3024entry: 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, %not 3028 %not2 = xor <16 x i8> %src3, splat(i8 -1) 3029 %and10 = and <16 x i8> %not1, %src1 3030 %and11 = and <16 x i8> %and10, %src3 3031 %or12 = or <16 x i8> %and11, %and 3032 %0 = and <16 x i8> %not2, %src1 3033 %and15 = and <16 x i8> %0, %src2 3034 %or16 = or <16 x i8> %or12, %and15 3035 ret <16 x i8> %or16 3036} 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: # %entry 3041; CHECK-NEXT: voc %v0, %v28, %v24 3042; CHECK-NEXT: vsel %v24, %v24, %v0, %v26 3043; CHECK-NEXT: br %r14 3044entry: 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, %src3 3048 %or12 = and <16 x i8> %and37, %not1 3049 %and13 = and <16 x i8> %src2, %src1 3050 %or19 = or <16 x i8> %or12, %and13 3051 ret <16 x i8> %or19 3052} 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: # %entry 3057; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 168 3058; CHECK-NEXT: br %r14 3059entry: 3060 %0 = and <16 x i8> %src3, %src1 3061 %1 = or <16 x i8> %0, %src2 3062 %or13 = xor <16 x i8> %1, splat(i8 -1) 3063 ret <16 x i8> %or13 3064} 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: # %entry 3069; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 169 3070; CHECK-NEXT: br %r14 3071entry: 3072 %0 = and <16 x i8> %src3, %src1 3073 %1 = xor <16 x i8> %0, %src2 3074 %or16 = xor <16 x i8> %1, splat(i8 -1) 3075 ret <16 x i8> %or16 3076} 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: # %entry 3081; CHECK-NEXT: vn %v0, %v28, %v24 3082; CHECK-NEXT: vnc %v1, %v24, %v28 3083; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 139 3084; CHECK-NEXT: br %r14 3085entry: 3086 %not2 = xor <16 x i8> %src3, splat(i8 -1) 3087 %0 = and <16 x i8> %src3, %src1 3088 %1 = or <16 x i8> %0, %src2 3089 %or13 = xor <16 x i8> %1, splat(i8 -1) 3090 %2 = and <16 x i8> %not2, %src1 3091 %and16 = and <16 x i8> %2, %src2 3092 %or17 = or <16 x i8> %and16, %or13 3093 ret <16 x i8> %or17 3094} 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: # %entry 3099; CHECK-NEXT: vn %v0, %v28, %v24 3100; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 139 3101; CHECK-NEXT: br %r14 3102entry: 3103 %0 = and <16 x i8> %src3, %src1 3104 %1 = or <16 x i8> %0, %src2 3105 %or13 = xor <16 x i8> %1, splat(i8 -1) 3106 %and14 = and <16 x i8> %src2, %src1 3107 %or20 = or <16 x i8> %and14, %or13 3108 ret <16 x i8> %or20 3109} 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: # %entry 3114; CHECK-NEXT: vno %v24, %v26, %v26 3115; CHECK-NEXT: br %r14 3116entry: 3117 %not1 = xor <16 x i8> %src2, splat(i8 -1) 3118 ret <16 x i8> %not1 3119} 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: # %entry 3124; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 171 3125; CHECK-NEXT: br %r14 3126entry: 3127 %not1 = xor <16 x i8> %src2, splat(i8 -1) 3128 %0 = and <16 x i8> %src3, %src1 3129 %or20 = or <16 x i8> %0, %not1 3130 ret <16 x i8> %or20 3131} 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: # %entry 3136; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 174 3137; CHECK-NEXT: br %r14 3138entry: 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, %src1 3142 %or21 = or <16 x i8> %0, %not1 3143 ret <16 x i8> %or21 3144} 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: # %entry 3149; CHECK-NEXT: voc %v24, %v24, %v26 3150; CHECK-NEXT: br %r14 3151entry: 3152 %not1 = xor <16 x i8> %src2, splat(i8 -1) 3153 %or24 = or <16 x i8> %not1, %src1 3154 ret <16 x i8> %or24 3155} 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: # %entry 3160; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 138 3161; CHECK-NEXT: br %r14 3162entry: 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, %src3 3166 %or12 = and <16 x i8> %and1122, %not 3167 ret <16 x i8> %or12 3168} 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: # %entry 3173; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 139 3174; CHECK-NEXT: br %r14 3175entry: 3176 %and.demorgan = or <16 x i8> %src2, %src1 3177 %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 3178 %0 = and <16 x i8> %src3, %src2 3179 %or15 = or <16 x i8> %0, %and 3180 ret <16 x i8> %or15 3181} 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: # %entry 3186; CHECK-NEXT: vno %v0, %v26, %v26 3187; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 3188; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3189; CHECK-NEXT: vnc %v1, %v24, %v28 3190; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 31 3191; CHECK-NEXT: br %r14 3192entry: 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, %not 3196 %not2 = xor <16 x i8> %src3, splat(i8 -1) 3197 %and10 = and <16 x i8> %not, %src2 3198 %and11 = and <16 x i8> %and10, %src3 3199 %or12 = or <16 x i8> %and11, %and 3200 %0 = and <16 x i8> %not2, %src1 3201 %and15 = and <16 x i8> %0, %src2 3202 %or16 = or <16 x i8> %or12, %and15 3203 ret <16 x i8> %or16 3204} 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: # %entry 3209; CHECK-NEXT: voc %v0, %v28, %v26 3210; CHECK-NEXT: vsel %v24, %v26, %v0, %v24 3211; CHECK-NEXT: br %r14 3212entry: 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, %src3 3216 %or12 = and <16 x i8> %and1137, %not 3217 %and13 = and <16 x i8> %src2, %src1 3218 %or19 = or <16 x i8> %or12, %and13 3219 ret <16 x i8> %or19 3220} 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: # %entry 3225; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 142 3226; CHECK-NEXT: br %r14 3227entry: 3228 %and.demorgan = or <16 x i8> %src2, %src1 3229 %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 3230 %0 = xor <16 x i8> %src2, %src1 3231 %1 = and <16 x i8> %0, %src3 3232 %or16 = or <16 x i8> %1, %and 3233 ret <16 x i8> %or16 3234} 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: # %entry 3239; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 143 3240; CHECK-NEXT: br %r14 3241entry: 3242 %and.demorgan = or <16 x i8> %src2, %src1 3243 %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 3244 %or19 = or <16 x i8> %and, %src3 3245 ret <16 x i8> %or19 3246} 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: # %entry 3251; CHECK-NEXT: vo %v0, %v26, %v24 3252; CHECK-NEXT: veval %v1, %v28, %v26, %v24, 6 3253; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 2 3254; CHECK-NEXT: veval %v24, %v1, %v2, %v0, 191 3255; CHECK-NEXT: br %r14 3256entry: 3257 %and.demorgan = or <16 x i8> %src2, %src1 3258 %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, %src1 3261 %1 = and <16 x i8> %0, %src3 3262 %or16 = or <16 x i8> %1, %and 3263 %2 = and <16 x i8> %not2, %src1 3264 %and19 = and <16 x i8> %2, %src2 3265 %or20 = or <16 x i8> %or16, %and19 3266 ret <16 x i8> %or20 3267} 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: # %entry 3272; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 159 3273; CHECK-NEXT: br %r14 3274entry: 3275 %0 = xor <16 x i8> %src2, %src1 3276 %or16 = xor <16 x i8> %0, splat(i8 -1) 3277 %or23 = or <16 x i8> %or16, %src3 3278 ret <16 x i8> %or23 3279} 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: # %entry 3284; CHECK-NEXT: vno %v0, %v26, %v26 3285; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 3286; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3287; CHECK-NEXT: vo %v1, %v28, %v26 3288; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 3289; CHECK-NEXT: br %r14 3290entry: 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, %not 3294 %and10 = and <16 x i8> %not, %src2 3295 %and11 = and <16 x i8> %and10, %src3 3296 %or12 = or <16 x i8> %and11, %and 3297 %0 = or <16 x i8> %src3, %src2 3298 %1 = xor <16 x i8> %0, splat(i8 -1) 3299 %and16 = and <16 x i8> %1, %src1 3300 %or17 = or <16 x i8> %or12, %and16 3301 ret <16 x i8> %or17 3302} 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: # %entry 3307; CHECK-NEXT: voc %v0, %v28, %v26 3308; CHECK-NEXT: vnx %v1, %v26, %v28 3309; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 3310; CHECK-NEXT: br %r14 3311entry: 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, %src3 3315 %or12 = and <16 x i8> %and1138, %not 3316 %0 = xor <16 x i8> %src3, %src2 3317 %and1939 = xor <16 x i8> %0, splat(i8 -1) 3318 %1 = and <16 x i8> %and1939, %src1 3319 %or20 = or <16 x i8> %or12, %1 3320 ret <16 x i8> %or20 3321} 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: # %entry 3326; CHECK-NEXT: vno %v0, %v26, %v26 3327; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 3328; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3329; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 47 3330; CHECK-NEXT: br %r14 3331entry: 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, %not 3335 %not2 = xor <16 x i8> %src3, splat(i8 -1) 3336 %and10 = and <16 x i8> %not, %src2 3337 %and11 = and <16 x i8> %and10, %src3 3338 %or12 = or <16 x i8> %and11, %and 3339 %0 = and <16 x i8> %not2, %src1 3340 %or21 = or <16 x i8> %or12, %0 3341 ret <16 x i8> %or21 3342} 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: # %entry 3347; CHECK-NEXT: vno %v0, %v26, %v26 3348; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 3349; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3350; CHECK-NEXT: voc %v1, %v26, %v28 3351; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 3352; CHECK-NEXT: br %r14 3353entry: 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, %not 3357 %and10 = and <16 x i8> %not, %src2 3358 %and11 = and <16 x i8> %and10, %src3 3359 %or12 = or <16 x i8> %and11, %and 3360 %src3.not = xor <16 x i8> %src3, splat(i8 -1) 3361 %and1646 = or <16 x i8> %src3.not, %src2 3362 %0 = and <16 x i8> %and1646, %src1 3363 %or24 = or <16 x i8> %or12, %0 3364 ret <16 x i8> %or24 3365} 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: # %entry 3370; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 174 3371; CHECK-NEXT: br %r14 3372entry: 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, %src3 3376 %or21 = or <16 x i8> %0, %not1 3377 ret <16 x i8> %or21 3378} 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: # %entry 3383; CHECK-NEXT: voc %v24, %v28, %v26 3384; CHECK-NEXT: br %r14 3385entry: 3386 %not1 = xor <16 x i8> %src2, splat(i8 -1) 3387 %or24 = or <16 x i8> %not1, %src3 3388 ret <16 x i8> %or24 3389} 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: # %entry 3394; CHECK-NEXT: vnc %v0, %v26, %v24 3395; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 171 3396; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 47 3397; CHECK-NEXT: br %r14 3398entry: 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, %src2 3403 %and11 = and <16 x i8> %and10, %src3 3404 %or21 = or <16 x i8> %and11, %not1 3405 %0 = and <16 x i8> %not2, %src1 3406 %or25 = or <16 x i8> %or21, %0 3407 ret <16 x i8> %or25 3408} 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: # %entry 3413; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 191 3414; CHECK-NEXT: br %r14 3415entry: 3416 %not1 = xor <16 x i8> %src2, splat(i8 -1) 3417 %or21 = or <16 x i8> %not1, %src1 3418 %or28 = or <16 x i8> %or21, %src3 3419 ret <16 x i8> %or28 3420} 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: # %entry 3425; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 168 3426; CHECK-NEXT: br %r14 3427entry: 3428 %0 = and <16 x i8> %src3, %src2 3429 %1 = or <16 x i8> %0, %src1 3430 %or13 = xor <16 x i8> %1, splat(i8 -1) 3431 ret <16 x i8> %or13 3432} 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: # %entry 3437; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 169 3438; CHECK-NEXT: br %r14 3439entry: 3440 %0 = and <16 x i8> %src3, %src2 3441 %1 = xor <16 x i8> %0, %src1 3442 %or16 = xor <16 x i8> %1, splat(i8 -1) 3443 ret <16 x i8> %or16 3444} 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: # %entry 3449; CHECK-NEXT: vn %v0, %v28, %v26 3450; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 3451; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 3452; CHECK-NEXT: br %r14 3453entry: 3454 %not2 = xor <16 x i8> %src3, splat(i8 -1) 3455 %0 = and <16 x i8> %src3, %src2 3456 %1 = or <16 x i8> %0, %src1 3457 %or13 = xor <16 x i8> %1, splat(i8 -1) 3458 %2 = and <16 x i8> %not2, %src1 3459 %and16 = and <16 x i8> %2, %src2 3460 %or17 = or <16 x i8> %and16, %or13 3461 ret <16 x i8> %or17 3462} 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: # %entry 3467; CHECK-NEXT: vn %v0, %v28, %v26 3468; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 139 3469; CHECK-NEXT: br %r14 3470entry: 3471 %0 = and <16 x i8> %src3, %src2 3472 %1 = or <16 x i8> %0, %src1 3473 %or13 = xor <16 x i8> %1, splat(i8 -1) 3474 %and14 = and <16 x i8> %src2, %src1 3475 %or20 = or <16 x i8> %and14, %or13 3476 ret <16 x i8> %or20 3477} 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: # %entry 3482; CHECK-NEXT: vno %v0, %v26, %v26 3483; CHECK-NEXT: vo %v1, %v28, %v24 3484; CHECK-NEXT: veval %v2, %v24, %v28, %v26, 2 3485; CHECK-NEXT: veval %v0, %v2, %v0, %v24, 47 3486; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 3487; CHECK-NEXT: br %r14 3488entry: 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, %not 3492 %0 = or <16 x i8> %src3, %src1 3493 %1 = xor <16 x i8> %0, splat(i8 -1) 3494 %and12 = and <16 x i8> %1, %src2 3495 %and15 = and <16 x i8> %not1, %src1 3496 %and16 = and <16 x i8> %and15, %src3 3497 %or13 = or <16 x i8> %and16, %and 3498 %or17 = or <16 x i8> %or13, %and12 3499 ret <16 x i8> %or17 3500} 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: # %entry 3505; CHECK-NEXT: vn %v0, %v28, %v26 3506; CHECK-NEXT: veval %v24, %v28, %v24, %v0, 139 3507; CHECK-NEXT: br %r14 3508entry: 3509 %0 = and <16 x i8> %src3, %src2 3510 %1 = or <16 x i8> %0, %src1 3511 %or13 = xor <16 x i8> %1, splat(i8 -1) 3512 %2 = and <16 x i8> %src3, %src1 3513 %or20 = or <16 x i8> %2, %or13 3514 ret <16 x i8> %or20 3515} 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: # %entry 3520; CHECK-NEXT: vno %v0, %v26, %v26 3521; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 3522; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3523; CHECK-NEXT: veval %v24, %v0, %v26, %v28, 47 3524; CHECK-NEXT: br %r14 3525entry: 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, %not 3529 %not2 = xor <16 x i8> %src3, splat(i8 -1) 3530 %and15 = and <16 x i8> %not1, %src1 3531 %and16 = and <16 x i8> %and15, %src3 3532 %or13 = or <16 x i8> %and16, %and 3533 %0 = and <16 x i8> %not2, %src2 3534 %or21 = or <16 x i8> %or13, %0 3535 ret <16 x i8> %or21 3536} 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: # %entry 3541; CHECK-NEXT: vno %v0, %v26, %v26 3542; CHECK-NEXT: vnc %v2, %v24, %v26 3543; CHECK-NEXT: vo %v1, %v28, %v24 3544; CHECK-NEXT: vsel %v0, %v26, %v0, %v24 3545; CHECK-NEXT: veval %v0, %v0, %v2, %v28, 31 3546; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 3547; CHECK-NEXT: br %r14 3548entry: 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, %not 3552 %0 = or <16 x i8> %src3, %src1 3553 %1 = xor <16 x i8> %0, splat(i8 -1) 3554 %and12 = and <16 x i8> %1, %src2 3555 %and15 = and <16 x i8> %not1, %src1 3556 %and16 = and <16 x i8> %and15, %src3 3557 %and18 = and <16 x i8> %src2, %src1 3558 %or13 = or <16 x i8> %and18, %and 3559 %or17 = or <16 x i8> %or13, %and16 3560 %or24 = or <16 x i8> %or17, %and12 3561 ret <16 x i8> %or24 3562} 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: # %entry 3567; CHECK-NEXT: vo %v1, %v28, %v26 3568; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 31 3569; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 3570; CHECK-NEXT: br %r14 3571entry: 3572 %0 = and <16 x i8> %src3, %src2 3573 %1 = or <16 x i8> %0, %src1 3574 %or13 = xor <16 x i8> %1, splat(i8 -1) 3575 %2 = or <16 x i8> %src3, %src2 3576 %3 = xor <16 x i8> %2, splat(i8 -1) 3577 %and17 = and <16 x i8> %3, %src1 3578 %or18 = or <16 x i8> %and17, %or13 3579 ret <16 x i8> %or18 3580} 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: # %entry 3585; CHECK-NEXT: vx %v1, %v28, %v26 3586; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 31 3587; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 3588; CHECK-NEXT: br %r14 3589entry: 3590 %0 = and <16 x i8> %src3, %src2 3591 %1 = or <16 x i8> %0, %src1 3592 %or13 = xor <16 x i8> %1, splat(i8 -1) 3593 %2 = xor <16 x i8> %src3, %src2 3594 %and2039 = xor <16 x i8> %2, splat(i8 -1) 3595 %3 = and <16 x i8> %and2039, %src1 3596 %or21 = or <16 x i8> %3, %or13 3597 ret <16 x i8> %or21 3598} 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: # %entry 3603; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 31 3604; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 174 3605; CHECK-NEXT: br %r14 3606entry: 3607 %not2 = xor <16 x i8> %src3, splat(i8 -1) 3608 %0 = and <16 x i8> %src3, %src2 3609 %1 = or <16 x i8> %0, %src1 3610 %or13 = xor <16 x i8> %1, splat(i8 -1) 3611 %2 = and <16 x i8> %not2, %src1 3612 %or22 = or <16 x i8> %2, %or13 3613 ret <16 x i8> %or22 3614} 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: # %entry 3619; CHECK-NEXT: vn %v0, %v28, %v26 3620; CHECK-NEXT: voc %v1, %v26, %v28 3621; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 139 3622; CHECK-NEXT: br %r14 3623entry: 3624 %0 = and <16 x i8> %src3, %src2 3625 %1 = or <16 x i8> %0, %src1 3626 %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, %src2 3629 %2 = and <16 x i8> %and1747, %src1 3630 %or25 = or <16 x i8> %2, %or13 3631 ret <16 x i8> %or25 3632} 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: # %entry 3637; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 234 3638; CHECK-NEXT: br %r14 3639entry: 3640 %0 = or <16 x i8> %src3, %src1 3641 %or22.demorgan = and <16 x i8> %0, %src2 3642 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3643 ret <16 x i8> %or22 3644} 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: # %entry 3649; CHECK-NEXT: vo %v0, %v28, %v24 3650; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 3651; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 239 3652; CHECK-NEXT: br %r14 3653entry: 3654 %0 = or <16 x i8> %src3, %src1 3655 %or22.demorgan = and <16 x i8> %0, %src2 3656 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3657 %and23 = and <16 x i8> %src2, %src1 3658 %and24 = and <16 x i8> %and23, %src3 3659 %or25 = or <16 x i8> %and24, %or22 3660 ret <16 x i8> %or25 3661} 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: # %entry 3666; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 7 3667; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 174 3668; CHECK-NEXT: br %r14 3669entry: 3670 %not2 = xor <16 x i8> %src3, splat(i8 -1) 3671 %0 = or <16 x i8> %src3, %src1 3672 %or22.demorgan = and <16 x i8> %0, %src2 3673 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3674 %1 = and <16 x i8> %not2, %src1 3675 %or26 = or <16 x i8> %1, %or22 3676 ret <16 x i8> %or26 3677} 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: # %entry 3682; CHECK-NEXT: vo %v0, %v28, %v24 3683; CHECK-NEXT: veval %v24, %v24, %v0, %v26, 239 3684; CHECK-NEXT: br %r14 3685entry: 3686 %0 = or <16 x i8> %src3, %src1 3687 %or22.demorgan = and <16 x i8> %0, %src2 3688 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3689 %or29 = or <16 x i8> %or22, %src1 3690 ret <16 x i8> %or29 3691} 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: # %entry 3696; CHECK-NEXT: vno %v24, %v24, %v24 3697; CHECK-NEXT: br %r14 3698entry: 3699 %not = xor <16 x i8> %src1, splat(i8 -1) 3700 ret <16 x i8> %not 3701} 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: # %entry 3706; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 171 3707; CHECK-NEXT: br %r14 3708entry: 3709 %not = xor <16 x i8> %src1, splat(i8 -1) 3710 %0 = and <16 x i8> %src3, %src2 3711 %or20 = or <16 x i8> %0, %not 3712 ret <16 x i8> %or20 3713} 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: # %entry 3718; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 174 3719; CHECK-NEXT: br %r14 3720entry: 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, %src2 3724 %or21 = or <16 x i8> %0, %not 3725 ret <16 x i8> %or21 3726} 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: # %entry 3731; CHECK-NEXT: voc %v24, %v26, %v24 3732; CHECK-NEXT: br %r14 3733entry: 3734 %not = xor <16 x i8> %src1, splat(i8 -1) 3735 %or24 = or <16 x i8> %not, %src2 3736 ret <16 x i8> %or24 3737} 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: # %entry 3742; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 174 3743; CHECK-NEXT: br %r14 3744entry: 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, %src3 3748 %or21 = or <16 x i8> %0, %not 3749 ret <16 x i8> %or21 3750} 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: # %entry 3755; CHECK-NEXT: voc %v24, %v28, %v24 3756; CHECK-NEXT: br %r14 3757entry: 3758 %not = xor <16 x i8> %src1, splat(i8 -1) 3759 %or24 = or <16 x i8> %not, %src3 3760 ret <16 x i8> %or24 3761} 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: # %entry 3766; CHECK-NEXT: vnc %v0, %v24, %v26 3767; CHECK-NEXT: veval %v0, %v0, %v28, %v24, 171 3768; CHECK-NEXT: veval %v24, %v0, %v26, %v28, 47 3769; CHECK-NEXT: br %r14 3770entry: 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, %src1 3775 %and20 = and <16 x i8> %and19, %src3 3776 %or21 = or <16 x i8> %and20, %not 3777 %0 = and <16 x i8> %not2, %src2 3778 %or25 = or <16 x i8> %or21, %0 3779 ret <16 x i8> %or25 3780} 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: # %entry 3785; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 191 3786; CHECK-NEXT: br %r14 3787entry: 3788 %not = xor <16 x i8> %src1, splat(i8 -1) 3789 %or21 = or <16 x i8> %not, %src2 3790 %or28 = or <16 x i8> %or21, %src3 3791 ret <16 x i8> %or28 3792} 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: # %entry 3797; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 234 3798; CHECK-NEXT: br %r14 3799entry: 3800 %0 = or <16 x i8> %src3, %src2 3801 %or22.demorgan = and <16 x i8> %0, %src1 3802 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3803 ret <16 x i8> %or22 3804} 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: # %entry 3809; CHECK-NEXT: vo %v0, %v28, %v26 3810; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 3811; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 239 3812; CHECK-NEXT: br %r14 3813entry: 3814 %0 = or <16 x i8> %src3, %src2 3815 %or22.demorgan = and <16 x i8> %0, %src1 3816 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3817 %and23 = and <16 x i8> %src2, %src1 3818 %and24 = and <16 x i8> %and23, %src3 3819 %or25 = or <16 x i8> %and24, %or22 3820 ret <16 x i8> %or25 3821} 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: # %entry 3826; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 7 3827; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 174 3828; CHECK-NEXT: br %r14 3829entry: 3830 %not2 = xor <16 x i8> %src3, splat(i8 -1) 3831 %0 = or <16 x i8> %src3, %src2 3832 %or22.demorgan = and <16 x i8> %0, %src1 3833 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3834 %1 = and <16 x i8> %not2, %src2 3835 %or26 = or <16 x i8> %1, %or22 3836 ret <16 x i8> %or26 3837} 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: # %entry 3842; CHECK-NEXT: vo %v0, %v28, %v26 3843; CHECK-NEXT: veval %v24, %v26, %v0, %v24, 239 3844; CHECK-NEXT: br %r14 3845entry: 3846 %0 = or <16 x i8> %src3, %src2 3847 %or22.demorgan = and <16 x i8> %0, %src1 3848 %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3849 %or29 = or <16 x i8> %or22, %src2 3850 ret <16 x i8> %or29 3851} 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: # %entry 3856; CHECK-NEXT: vnn %v24, %v26, %v24 3857; CHECK-NEXT: br %r14 3858entry: 3859 %or26.demorgan = and <16 x i8> %src2, %src1 3860 %or26 = xor <16 x i8> %or26.demorgan, splat(i8 -1) 3861 ret <16 x i8> %or26 3862} 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: # %entry 3867; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 239 3868; CHECK-NEXT: br %r14 3869entry: 3870 %or26.demorgan = and <16 x i8> %src2, %src1 3871 %or26 = xor <16 x i8> %or26.demorgan, splat(i8 -1) 3872 %or29 = or <16 x i8> %or26, %src3 3873 ret <16 x i8> %or29 3874} 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: # %entry 3879; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 254 3880; CHECK-NEXT: br %r14 3881entry: 3882 %or26.demorgan = and <16 x i8> %src2, %src1 3883 %or30.demorgan = and <16 x i8> %or26.demorgan, %src3 3884 %or30 = xor <16 x i8> %or30.demorgan, splat(i8 -1) 3885 ret <16 x i8> %or30 3886} 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: # %entry 3891; CHECK-NEXT: vgbm %v24, 65535 3892; CHECK-NEXT: br %r14 3893entry: 3894 ret <16 x i8> splat(i8 -1) 3895} 3896 3897