| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 | |
| ; Test use of VECTOR EVALUATE for combined boolean operations. | |
| ; | |
| ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z17 | FileCheck %s | |
| define <16 x i8> @eval0(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval0: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vgbm %v24, 0 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| ret <16 x i8> zeroinitializer | |
| } | |
| define <16 x i8> @eval1(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval1: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and = and <16 x i8> %src2, %src1 | |
| %and1 = and <16 x i8> %and, %src3 | |
| ret <16 x i8> %and1 | |
| } | |
| define <16 x i8> @eval2(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval2: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 2 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and = and <16 x i8> %src2, %src1 | |
| %not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and1 = and <16 x i8> %and, %not | |
| ret <16 x i8> %and1 | |
| } | |
| define <16 x i8> @eval3(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval3: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v24, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and = and <16 x i8> %src2, %src1 | |
| ret <16 x i8> %and | |
| } | |
| define <16 x i8> @eval4(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval4: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src1 | |
| %and1 = and <16 x i8> %and, %src3 | |
| ret <16 x i8> %and1 | |
| } | |
| define <16 x i8> @eval5(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval5: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v24, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or4 = and <16 x i8> %src3, %src1 | |
| ret <16 x i8> %or4 | |
| } | |
| define <16 x i8> @eval6(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval6: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 6 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or5 = and <16 x i8> %0, %src1 | |
| ret <16 x i8> %or5 | |
| } | |
| define <16 x i8> @eval7(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval7: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 7 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and118 = or <16 x i8> %src3, %src2 | |
| %or8 = and <16 x i8> %and118, %src1 | |
| ret <16 x i8> %or8 | |
| } | |
| define <16 x i8> @eval8(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval8: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 8 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src1 | |
| ret <16 x i8> %and2 | |
| } | |
| define <16 x i8> @eval9(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval9: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 9 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src2, %src3 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %or5 = and <16 x i8> %1, %src1 | |
| ret <16 x i8> %or5 | |
| } | |
| define <16 x i8> @eval10(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval10: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v24, %v24, %v28 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src3, splat(i8 -1) | |
| %or6 = and <16 x i8> %not1, %src1 | |
| ret <16 x i8> %or6 | |
| } | |
| define <16 x i8> @eval11(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval11: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 11 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and219 = or <16 x i8> %src3.not, %src2 | |
| %or9 = and <16 x i8> %and219, %src1 | |
| ret <16 x i8> %or9 | |
| } | |
| define <16 x i8> @eval12(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval12: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v24, %v24, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src1 | |
| ret <16 x i8> %and | |
| } | |
| define <16 x i8> @eval13(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval13: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 11 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src2, splat(i8 -1) | |
| %and19 = or <16 x i8> %not, %src3 | |
| %or9 = and <16 x i8> %and19, %src1 | |
| ret <16 x i8> %or9 | |
| } | |
| define <16 x i8> @eval14(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval14: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 14 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and20.demorgan = and <16 x i8> %src3, %src2 | |
| %and20 = xor <16 x i8> %and20.demorgan, splat(i8 -1) | |
| %or10 = and <16 x i8> %and20, %src1 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval15(<16 x i8> returned %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval15: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| ret <16 x i8> %src1 | |
| } | |
| define <16 x i8> @eval16(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval16: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 2 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| %and1 = and <16 x i8> %and, %src3 | |
| ret <16 x i8> %and1 | |
| } | |
| define <16 x i8> @eval17(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval17: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v24, %v28, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or4 = and <16 x i8> %src3, %src2 | |
| ret <16 x i8> %or4 | |
| } | |
| define <16 x i8> @eval18(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval18: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 6 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src1 | |
| %or5 = and <16 x i8> %0, %src2 | |
| ret <16 x i8> %or5 | |
| } | |
| define <16 x i8> @eval19(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval19: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 7 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and118 = or <16 x i8> %src3, %src1 | |
| %or8 = and <16 x i8> %and118, %src2 | |
| ret <16 x i8> %or8 | |
| } | |
| define <16 x i8> @eval20(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval20: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 6 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src2, %src1 | |
| %or5 = and <16 x i8> %0, %src3 | |
| ret <16 x i8> %or5 | |
| } | |
| define <16 x i8> @eval21(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval21: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 7 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or518 = or <16 x i8> %src2, %src1 | |
| %or8 = and <16 x i8> %or518, %src3 | |
| ret <16 x i8> %or8 | |
| } | |
| define <16 x i8> @eval22(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval22: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src2, %src1 | |
| %or5 = and <16 x i8> %0, %src3 | |
| %not7 = xor <16 x i8> %src3, splat(i8 -1) | |
| %1 = and <16 x i8> %not7, %src1 | |
| %and8 = and <16 x i8> %1, %src2 | |
| %or9 = or <16 x i8> %and8, %or5 | |
| ret <16 x i8> %or9 | |
| } | |
| define <16 x i8> @eval23(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval23: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 6 | |
| ; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src2, %src1 | |
| %or5 = and <16 x i8> %0, %src3 | |
| %and6 = and <16 x i8> %src2, %src1 | |
| %or12 = or <16 x i8> %or5, %and6 | |
| ret <16 x i8> %or12 | |
| } | |
| define <16 x i8> @eval24(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval24: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 2 | |
| ; CHECK-NEXT: vo %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| %and1 = and <16 x i8> %and, %src3 | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and5 = and <16 x i8> %1, %src1 | |
| %or6 = or <16 x i8> %and5, %and1 | |
| ret <16 x i8> %or6 | |
| } | |
| define <16 x i8> @eval25(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval25: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v26 | |
| ; CHECK-NEXT: vn %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and5 = and <16 x i8> %1, %src1 | |
| %2 = and <16 x i8> %src3, %src2 | |
| %or9 = or <16 x i8> %and5, %2 | |
| ret <16 x i8> %or9 | |
| } | |
| define <16 x i8> @eval26(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval26: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v26, %v24 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v24, %v28 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| %and1 = and <16 x i8> %and, %src3 | |
| %not4 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %not4, %src1 | |
| %or10 = or <16 x i8> %and1, %0 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval27(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval27: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 11 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| %and1 = and <16 x i8> %and, %src3 | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and527 = or <16 x i8> %src3.not, %src2 | |
| %0 = and <16 x i8> %and527, %src1 | |
| %or13 = or <16 x i8> %0, %and1 | |
| ret <16 x i8> %or13 | |
| } | |
| define <16 x i8> @eval28(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval28: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v28, %v24 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v24, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %0 = and <16 x i8> %not, %src3 | |
| %and1 = and <16 x i8> %0, %src2 | |
| %not2 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and3 = and <16 x i8> %not2, %src1 | |
| %or10 = or <16 x i8> %and1, %and3 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval29(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval29: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vsel %v24, %v28, %v24, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and3 = and <16 x i8> %not2, %src1 | |
| %0 = and <16 x i8> %src3, %src2 | |
| %or13 = or <16 x i8> %0, %and3 | |
| ret <16 x i8> %or13 | |
| } | |
| define <16 x i8> @eval30(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval30: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 2 | |
| ; CHECK-NEXT: vn %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %0 = and <16 x i8> %not, %src2 | |
| %and1 = and <16 x i8> %0, %src3 | |
| %and328.demorgan = and <16 x i8> %src3, %src2 | |
| %and328 = xor <16 x i8> %and328.demorgan, splat(i8 -1) | |
| %1 = and <16 x i8> %and328, %src1 | |
| %or14 = or <16 x i8> %1, %and1 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval31(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval31: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v24, %v24, %v0, %v28, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| %and1 = and <16 x i8> %and, %src3 | |
| %or17 = or <16 x i8> %and1, %src1 | |
| ret <16 x i8> %or17 | |
| } | |
| define <16 x i8> @eval32(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval32: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 8 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src2 | |
| ret <16 x i8> %and2 | |
| } | |
| define <16 x i8> @eval33(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval33: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 9 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src1, %src3 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %or5 = and <16 x i8> %1, %src2 | |
| ret <16 x i8> %or5 | |
| } | |
| define <16 x i8> @eval34(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval34: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v24, %v26, %v28 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src3, splat(i8 -1) | |
| %or6 = and <16 x i8> %not1, %src2 | |
| ret <16 x i8> %or6 | |
| } | |
| define <16 x i8> @eval35(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval35: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 11 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and219 = or <16 x i8> %src3.not, %src1 | |
| %or9 = and <16 x i8> %and219, %src2 | |
| ret <16 x i8> %or9 | |
| } | |
| define <16 x i8> @eval36(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval36: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src2 | |
| %not3 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and4 = and <16 x i8> %not3, %src1 | |
| %and5 = and <16 x i8> %and4, %src3 | |
| %or6 = or <16 x i8> %and2, %and5 | |
| ret <16 x i8> %or6 | |
| } | |
| define <16 x i8> @eval37(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval37: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v24 | |
| ; CHECK-NEXT: vn %v1, %v28, %v24 | |
| ; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src2 | |
| %2 = and <16 x i8> %src3, %src1 | |
| %or9 = or <16 x i8> %and2, %2 | |
| ret <16 x i8> %or9 | |
| } | |
| define <16 x i8> @eval38(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval38: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v24, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v26, %v28 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src3, splat(i8 -1) | |
| %not3 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and4 = and <16 x i8> %not3, %src1 | |
| %and5 = and <16 x i8> %and4, %src3 | |
| %0 = and <16 x i8> %not1, %src2 | |
| %or10 = or <16 x i8> %0, %and5 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval39(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval39: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v24, %v26 | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 11 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not3 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and4 = and <16 x i8> %not3, %src1 | |
| %and5 = and <16 x i8> %and4, %src3 | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and227 = or <16 x i8> %src3.not, %src1 | |
| %0 = and <16 x i8> %and227, %src2 | |
| %or13 = or <16 x i8> %0, %and5 | |
| ret <16 x i8> %or13 | |
| } | |
| define <16 x i8> @eval40(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval40: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 40 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src2, %src1 | |
| %1 = xor <16 x i8> %src3, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| ret <16 x i8> %or7 | |
| } | |
| define <16 x i8> @eval41(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval41: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v26, %v24 | |
| ; CHECK-NEXT: vn %v1, %v26, %v24 | |
| ; CHECK-NEXT: vsel %v24, %v1, %v0, %v28 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src2, %src1 | |
| %1 = xor <16 x i8> %src3, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| %and8 = and <16 x i8> %src2, %src1 | |
| %and9 = and <16 x i8> %and8, %src3 | |
| %or10 = or <16 x i8> %or7, %and9 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval42(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval42: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 42 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and1021 = or <16 x i8> %src2, %src1 | |
| %or11 = and <16 x i8> %and1021, %not1 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval43(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval43: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v26, %v24 | |
| ; CHECK-NEXT: vn %v1, %v26, %v24 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src2, %src1 | |
| %1 = xor <16 x i8> %src3, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| %and8 = and <16 x i8> %src2, %src1 | |
| %or14 = or <16 x i8> %or7, %and8 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval44(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval44: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v28, %v24 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v24, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src2 | |
| %not3 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and4 = and <16 x i8> %not3, %src1 | |
| %or11 = or <16 x i8> %and2, %and4 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval45(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval45: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: vo %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 | |
| ; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src2 | |
| %not3 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and4 = and <16 x i8> %not3, %src1 | |
| %and12 = and <16 x i8> %src2, %src1 | |
| %and13 = and <16 x i8> %and12, %src3 | |
| %or11 = or <16 x i8> %and13, %and4 | |
| %or14 = or <16 x i8> %or11, %and2 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval46(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval46: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 8 | |
| ; CHECK-NEXT: vn %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src2 | |
| %and429.demorgan = and <16 x i8> %src3, %src2 | |
| %and429 = xor <16 x i8> %and429.demorgan, splat(i8 -1) | |
| %2 = and <16 x i8> %and429, %src1 | |
| %or15 = or <16 x i8> %and2, %2 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval47(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval47: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src2 | |
| %or18 = or <16 x i8> %and2, %src1 | |
| ret <16 x i8> %or18 | |
| } | |
| define <16 x i8> @eval48(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval48: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v24, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| ret <16 x i8> %and | |
| } | |
| define <16 x i8> @eval49(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval49: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 11 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and819 = or <16 x i8> %not, %src3 | |
| %or9 = and <16 x i8> %and819, %src2 | |
| ret <16 x i8> %or9 | |
| } | |
| define <16 x i8> @eval50(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval50: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 14 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and920.demorgan = and <16 x i8> %src3, %src1 | |
| %and920 = xor <16 x i8> %and920.demorgan, splat(i8 -1) | |
| %or10 = and <16 x i8> %and920, %src2 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval51(<16 x i8> %src1, <16 x i8> returned %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval51: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vlr %v24, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| ret <16 x i8> %src2 | |
| } | |
| define <16 x i8> @eval52(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval52: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v28, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| %not7 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = and <16 x i8> %not7, %src3 | |
| %and9 = and <16 x i8> %0, %src1 | |
| %or10 = or <16 x i8> %and9, %and | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval53(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval53: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vsel %v24, %v28, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| %0 = and <16 x i8> %src3, %src1 | |
| %or13 = or <16 x i8> %0, %and | |
| ret <16 x i8> %or13 | |
| } | |
| define <16 x i8> @eval54(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval54: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: vn %v1, %v28, %v24 | |
| ; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not7 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and8 = and <16 x i8> %not7, %src1 | |
| %and9 = and <16 x i8> %and8, %src3 | |
| %and28.demorgan = and <16 x i8> %src3, %src1 | |
| %and28 = xor <16 x i8> %and28.demorgan, splat(i8 -1) | |
| %0 = and <16 x i8> %and28, %src2 | |
| %or14 = or <16 x i8> %and9, %0 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval55(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval55: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v24, %v26 | |
| ; CHECK-NEXT: veval %v24, %v26, %v0, %v28, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not7 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and8 = and <16 x i8> %not7, %src1 | |
| %and9 = and <16 x i8> %and8, %src3 | |
| %or17 = or <16 x i8> %and9, %src2 | |
| ret <16 x i8> %or17 | |
| } | |
| define <16 x i8> @eval56(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval56: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v28, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and10 = and <16 x i8> %1, %src1 | |
| %or11 = or <16 x i8> %and10, %and | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval57(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval57: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: vo %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 47 | |
| ; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and10 = and <16 x i8> %1, %src1 | |
| %and12 = and <16 x i8> %src2, %src1 | |
| %and13 = and <16 x i8> %and12, %src3 | |
| %or11 = or <16 x i8> %and13, %and | |
| %or14 = or <16 x i8> %or11, %and10 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval58(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval58: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v28, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| %not1 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %not1, %src1 | |
| %or15 = or <16 x i8> %0, %and | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval59(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval59: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and = and <16 x i8> %not, %src2 | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and1036 = or <16 x i8> %src3.not, %src2 | |
| %0 = and <16 x i8> %and1036, %src1 | |
| %or18 = or <16 x i8> %0, %and | |
| ret <16 x i8> %or18 | |
| } | |
| define <16 x i8> @eval60(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval60: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v24, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or15 = xor <16 x i8> %src2, %src1 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval61(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval61: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v0, %v24, %v28 | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 61 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or15 = xor <16 x i8> %src2, %src1 | |
| %0 = and <16 x i8> %src1, %src3 | |
| %and17 = and <16 x i8> %0, %src2 | |
| %or18 = or <16 x i8> %and17, %or15 | |
| ret <16 x i8> %or18 | |
| } | |
| define <16 x i8> @eval62(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval62: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v24, %v28 | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 61 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src3, splat(i8 -1) | |
| %or15 = xor <16 x i8> %src2, %src1 | |
| %0 = and <16 x i8> %not1, %src1 | |
| %and18 = and <16 x i8> %0, %src2 | |
| %or19 = or <16 x i8> %and18, %or15 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval63(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval63: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v24, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or22 = or <16 x i8> %src2, %src1 | |
| ret <16 x i8> %or22 | |
| } | |
| define <16 x i8> @eval64(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval64: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 8 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %and2 = and <16 x i8> %and, %src3 | |
| ret <16 x i8> %and2 | |
| } | |
| define <16 x i8> @eval65(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval65: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 9 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src1, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %or5 = and <16 x i8> %1, %src3 | |
| ret <16 x i8> %or5 | |
| } | |
| define <16 x i8> @eval66(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval66: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 | |
| ; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %and2 = and <16 x i8> %and, %src3 | |
| %not4 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %not4, %src1 | |
| %and5 = and <16 x i8> %0, %src2 | |
| %or6 = or <16 x i8> %and5, %and2 | |
| ret <16 x i8> %or6 | |
| } | |
| define <16 x i8> @eval67(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval67: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v26, %v24 | |
| ; CHECK-NEXT: vn %v1, %v26, %v24 | |
| ; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %and2 = and <16 x i8> %and, %src3 | |
| %and3 = and <16 x i8> %src2, %src1 | |
| %or9 = or <16 x i8> %and2, %and3 | |
| ret <16 x i8> %or9 | |
| } | |
| define <16 x i8> @eval68(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval68: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v24, %v28, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or6 = and <16 x i8> %not1, %src3 | |
| ret <16 x i8> %or6 | |
| } | |
| define <16 x i8> @eval69(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval69: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 11 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or620 = or <16 x i8> %not1, %src1 | |
| %or9 = and <16 x i8> %or620, %src3 | |
| ret <16 x i8> %or9 | |
| } | |
| define <16 x i8> @eval70(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval70: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v24, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or6 = and <16 x i8> %not1, %src3 | |
| %not8 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %not8, %src1 | |
| %and9 = and <16 x i8> %0, %src2 | |
| %or10 = or <16 x i8> %and9, %or6 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval71(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval71: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vsel %v24, %v24, %v28, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or6 = and <16 x i8> %not1, %src3 | |
| %and7 = and <16 x i8> %src2, %src1 | |
| %or13 = or <16 x i8> %or6, %and7 | |
| ret <16 x i8> %or13 | |
| } | |
| define <16 x i8> @eval72(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval72: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 40 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| ret <16 x i8> %or7 | |
| } | |
| define <16 x i8> @eval73(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval73: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| %and8 = and <16 x i8> %src2, %src1 | |
| %and9 = and <16 x i8> %and8, %src3 | |
| %or10 = or <16 x i8> %or7, %and9 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval74(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval74: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v24 | |
| ; CHECK-NEXT: vnc %v1, %v24, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v1, %v0, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not5 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = xor <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| %2 = and <16 x i8> %not5, %src1 | |
| %and10 = and <16 x i8> %2, %src2 | |
| %or11 = or <16 x i8> %or7, %and10 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval75(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval75: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v24 | |
| ; CHECK-NEXT: vsel %v24, %v24, %v0, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| %and8 = and <16 x i8> %src2, %src1 | |
| %or14 = or <16 x i8> %or7, %and8 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval76(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval76: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 8 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = or <16 x i8> %src2, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src3 | |
| %and4 = and <16 x i8> %not1, %src1 | |
| %or11 = or <16 x i8> %and2, %and4 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval77(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval77: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vgbm %v0, 65535 | |
| ; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 | |
| ; CHECK-NEXT: vn %v1, %v26, %v24 | |
| ; CHECK-NEXT: veval %v0, %v28, %v0, %v1, 7 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and4 = and <16 x i8> %not1, %src1 | |
| %and12 = and <16 x i8> %src2, %src1 | |
| %and228 = or <16 x i8> %and, %and12 | |
| %0 = and <16 x i8> %and228, %src3 | |
| %or14 = or <16 x i8> %0, %and4 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval78(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval78: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vgbm %v0, 65535 | |
| ; CHECK-NEXT: vno %v1, %v28, %v28 | |
| ; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 | |
| ; CHECK-NEXT: veval %v1, %v24, %v1, %v26, 11 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and2 = and <16 x i8> %and, %src3 | |
| %not5 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and429 = or <16 x i8> %not5, %not1 | |
| %0 = and <16 x i8> %and429, %src1 | |
| %or15 = or <16 x i8> %0, %and2 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval79(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval79: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %and2 = and <16 x i8> %and, %src3 | |
| %or18 = or <16 x i8> %and2, %src1 | |
| ret <16 x i8> %or18 | |
| } | |
| define <16 x i8> @eval80(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval80: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v24, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %or6 = and <16 x i8> %not, %src3 | |
| ret <16 x i8> %or6 | |
| } | |
| define <16 x i8> @eval81(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval81: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 11 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %or620 = or <16 x i8> %not, %src2 | |
| %or9 = and <16 x i8> %or620, %src3 | |
| ret <16 x i8> %or9 | |
| } | |
| define <16 x i8> @eval82(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval82: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v26, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %or6 = and <16 x i8> %not, %src3 | |
| %not8 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %not8, %src2 | |
| %and9 = and <16 x i8> %0, %src1 | |
| %or10 = or <16 x i8> %and9, %or6 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval83(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval83: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vsel %v24, %v26, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %or6 = and <16 x i8> %not, %src3 | |
| %and7 = and <16 x i8> %src2, %src1 | |
| %or13 = or <16 x i8> %or6, %and7 | |
| ret <16 x i8> %or13 | |
| } | |
| define <16 x i8> @eval84(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval84: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 14 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or621.demorgan = and <16 x i8> %src2, %src1 | |
| %or621 = xor <16 x i8> %or621.demorgan, splat(i8 -1) | |
| %or10 = and <16 x i8> %or621, %src3 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval85(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> returned %src3) { | |
| ; CHECK-LABEL: eval85: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vlr %v24, %v28 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| ret <16 x i8> %src3 | |
| } | |
| define <16 x i8> @eval86(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval86: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 | |
| ; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or629.demorgan = and <16 x i8> %src2, %src1 | |
| %or629 = xor <16 x i8> %or629.demorgan, splat(i8 -1) | |
| %or10 = and <16 x i8> %or629, %src3 | |
| %not12 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %not12, %src1 | |
| %and13 = and <16 x i8> %0, %src2 | |
| %or14 = or <16 x i8> %and13, %or10 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval87(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval87: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and11 = and <16 x i8> %src2, %src1 | |
| %or17 = or <16 x i8> %and11, %src3 | |
| ret <16 x i8> %or17 | |
| } | |
| define <16 x i8> @eval88(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval88: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v28, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %or6 = and <16 x i8> %not, %src3 | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and10 = and <16 x i8> %1, %src1 | |
| %or11 = or <16 x i8> %and10, %or6 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval89(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval89: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v1, %v28, %v26, %v24, 11 | |
| ; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and10 = and <16 x i8> %1, %src1 | |
| %or629 = or <16 x i8> %not, %src2 | |
| %2 = and <16 x i8> %or629, %src3 | |
| %or14 = or <16 x i8> %and10, %2 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval90(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval90: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v24, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or15 = xor <16 x i8> %src3, %src1 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval91(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval91: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %or6 = and <16 x i8> %not, %src3 | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and1037 = or <16 x i8> %src3.not, %src2 | |
| %0 = and <16 x i8> %and1037, %src1 | |
| %or18 = or <16 x i8> %0, %or6 | |
| ret <16 x i8> %or18 | |
| } | |
| define <16 x i8> @eval92(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval92: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v26, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or6 = and <16 x i8> %not, %src3 | |
| %and8 = and <16 x i8> %not1, %src1 | |
| %or15 = or <16 x i8> %or6, %and8 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval93(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval93: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and8 = and <16 x i8> %not1, %src1 | |
| %or18 = or <16 x i8> %and8, %src3 | |
| ret <16 x i8> %or18 | |
| } | |
| define <16 x i8> @eval94(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval94: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnn %v0, %v28, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %or6 = and <16 x i8> %not, %src3 | |
| %and838.demorgan = and <16 x i8> %src3, %src2 | |
| %and838 = xor <16 x i8> %and838.demorgan, splat(i8 -1) | |
| %0 = and <16 x i8> %and838, %src1 | |
| %or19 = or <16 x i8> %0, %or6 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval95(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval95: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v24, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or22 = or <16 x i8> %src3, %src1 | |
| ret <16 x i8> %or22 | |
| } | |
| define <16 x i8> @eval96(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval96: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 40 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %src1, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| ret <16 x i8> %or7 | |
| } | |
| define <16 x i8> @eval97(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval97: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %src1, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| %and8 = and <16 x i8> %src2, %src1 | |
| %and9 = and <16 x i8> %and8, %src3 | |
| %or10 = or <16 x i8> %or7, %and9 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval98(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval98: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not5 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %src1, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| %2 = and <16 x i8> %not5, %src1 | |
| %and10 = and <16 x i8> %2, %src2 | |
| %or11 = or <16 x i8> %or7, %and10 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval99(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval99: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v26, %v0, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %src1, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| %and8 = and <16 x i8> %src2, %src1 | |
| %or14 = or <16 x i8> %or7, %and8 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval100(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval100: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v28, %v24 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and6 = and <16 x i8> %1, %src2 | |
| %2 = and <16 x i8> %not1, %src3 | |
| %or11 = or <16 x i8> %and6, %2 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval101(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval101: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v1, %v28, %v24, %v26, 11 | |
| ; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and6 = and <16 x i8> %1, %src2 | |
| %2 = or <16 x i8> %not1, %src1 | |
| %3 = and <16 x i8> %2, %src3 | |
| %or14 = or <16 x i8> %and6, %3 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval102(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval102: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v24, %v26, %v28 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or15 = xor <16 x i8> %src2, %src3 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval103(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval103: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v24, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = and <16 x i8> %not1, %src3 | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and637 = or <16 x i8> %src3.not, %src1 | |
| %1 = and <16 x i8> %and637, %src2 | |
| %or18 = or <16 x i8> %1, %0 | |
| ret <16 x i8> %or18 | |
| } | |
| define <16 x i8> @eval104(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval104: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: vno %v1, %v28, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %src1, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| %2 = or <16 x i8> %src3, %src2 | |
| %3 = xor <16 x i8> %2, splat(i8 -1) | |
| %and11 = and <16 x i8> %3, %src1 | |
| %or12 = or <16 x i8> %or7, %and11 | |
| ret <16 x i8> %or12 | |
| } | |
| define <16 x i8> @eval105(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval105: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 105 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or15 = xor <16 x i8> %0, %src1 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval106(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval106: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v28, %v28 | |
| ; CHECK-NEXT: vx %v1, %v28, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v1, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not5 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %src1, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| %2 = and <16 x i8> %not5, %src1 | |
| %or16 = or <16 x i8> %or7, %2 | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval107(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval107: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: voc %v1, %v26, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %src1, splat(i8 -1) | |
| %or7 = and <16 x i8> %0, %1 | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and1137 = or <16 x i8> %src3.not, %src2 | |
| %2 = and <16 x i8> %and1137, %src1 | |
| %or19 = or <16 x i8> %or7, %2 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval108(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval108: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v24, %v24 | |
| ; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 | |
| ; CHECK-NEXT: vo %v1, %v28, %v24 | |
| ; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 47 | |
| ; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and2 = and <16 x i8> %and, %src3 | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and6 = and <16 x i8> %1, %src2 | |
| %and9 = and <16 x i8> %not1, %src1 | |
| %or7 = or <16 x i8> %and2, %and9 | |
| %or16 = or <16 x i8> %or7, %and6 | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval109(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval109: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vgbm %v0, 65535 | |
| ; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 | |
| ; CHECK-NEXT: vn %v2, %v26, %v24 | |
| ; CHECK-NEXT: veval %v0, %v28, %v0, %v2, 7 | |
| ; CHECK-NEXT: vo %v1, %v28, %v24 | |
| ; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 47 | |
| ; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and6 = and <16 x i8> %1, %src2 | |
| %and9 = and <16 x i8> %not1, %src1 | |
| %and17 = and <16 x i8> %src2, %src1 | |
| %and237 = or <16 x i8> %and, %and17 | |
| %2 = and <16 x i8> %and237, %src3 | |
| %or16 = or <16 x i8> %2, %and9 | |
| %or19 = or <16 x i8> %or16, %and6 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval110(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval110: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v24, %v24 | |
| ; CHECK-NEXT: vgbm %v1, 65535 | |
| ; CHECK-NEXT: vo %v2, %v28, %v24 | |
| ; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v0, %v0, %v26, %v2, 47 | |
| ; CHECK-NEXT: veval %v1, %v26, %v1, %v28, 190 | |
| ; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and2 = and <16 x i8> %and, %src3 | |
| %not5 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and6 = and <16 x i8> %1, %src2 | |
| %or7 = or <16 x i8> %and6, %and2 | |
| %and938 = or <16 x i8> %not5, %not1 | |
| %2 = and <16 x i8> %and938, %src1 | |
| %or20 = or <16 x i8> %or7, %2 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval111(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval111: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 111 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or23 = or <16 x i8> %0, %src1 | |
| ret <16 x i8> %or23 | |
| } | |
| define <16 x i8> @eval112(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval112: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 8 | |
| ; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %0 = or <16 x i8> %src2, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src3 | |
| %and4 = and <16 x i8> %not, %src2 | |
| %or11 = or <16 x i8> %and2, %and4 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval113(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval113: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vgbm %v0, 65535 | |
| ; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 | |
| ; CHECK-NEXT: vn %v1, %v26, %v24 | |
| ; CHECK-NEXT: veval %v0, %v28, %v0, %v1, 7 | |
| ; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and4 = and <16 x i8> %not, %src2 | |
| %and12 = and <16 x i8> %src2, %src1 | |
| %and228 = or <16 x i8> %and, %and12 | |
| %0 = and <16 x i8> %and228, %src3 | |
| %or14 = or <16 x i8> %0, %and4 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval114(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval114: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v24, %v24 | |
| ; CHECK-NEXT: vgbm %v1, 65535 | |
| ; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v1, %v24, %v1, %v28, 190 | |
| ; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and2 = and <16 x i8> %and, %src3 | |
| %not5 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and429 = or <16 x i8> %not5, %not | |
| %0 = and <16 x i8> %and429, %src2 | |
| %or15 = or <16 x i8> %and2, %0 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval115(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval115: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %and2 = and <16 x i8> %and, %src3 | |
| %or18 = or <16 x i8> %and2, %src2 | |
| ret <16 x i8> %or18 | |
| } | |
| define <16 x i8> @eval116(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval116: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v24, %v24 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and4 = and <16 x i8> %not, %src2 | |
| %0 = and <16 x i8> %not1, %src3 | |
| %or15 = or <16 x i8> %0, %and4 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval117(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval117: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %and4 = and <16 x i8> %not, %src2 | |
| %or18 = or <16 x i8> %and4, %src3 | |
| ret <16 x i8> %or18 | |
| } | |
| define <16 x i8> @eval118(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval118: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnn %v0, %v28, %v24 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = and <16 x i8> %not1, %src3 | |
| %and438.demorgan = and <16 x i8> %src3, %src1 | |
| %and438 = xor <16 x i8> %and438.demorgan, splat(i8 -1) | |
| %1 = and <16 x i8> %and438, %src2 | |
| %or19 = or <16 x i8> %0, %1 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval119(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval119: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v24, %v28, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or22 = or <16 x i8> %src3, %src2 | |
| ret <16 x i8> %or22 | |
| } | |
| define <16 x i8> @eval120(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval120: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v24, %v24 | |
| ; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 | |
| ; CHECK-NEXT: vo %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and2 = and <16 x i8> %and, %src3 | |
| %and4 = and <16 x i8> %not, %src2 | |
| %or11 = or <16 x i8> %and2, %and4 | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and15 = and <16 x i8> %1, %src1 | |
| %or16 = or <16 x i8> %or11, %and15 | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval121(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval121: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vgbm %v0, 65535 | |
| ; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 | |
| ; CHECK-NEXT: vn %v2, %v26, %v24 | |
| ; CHECK-NEXT: veval %v0, %v28, %v0, %v2, 7 | |
| ; CHECK-NEXT: vo %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and4 = and <16 x i8> %not, %src2 | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and15 = and <16 x i8> %1, %src1 | |
| %and17 = and <16 x i8> %src2, %src1 | |
| %and237 = or <16 x i8> %and, %and17 | |
| %2 = and <16 x i8> %and237, %src3 | |
| %or16 = or <16 x i8> %2, %and4 | |
| %or19 = or <16 x i8> %or16, %and15 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval122(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval122: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v24, %v24 | |
| ; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and2 = and <16 x i8> %and, %src3 | |
| %and4 = and <16 x i8> %not, %src2 | |
| %not5 = xor <16 x i8> %src3, splat(i8 -1) | |
| %or11 = or <16 x i8> %and2, %and4 | |
| %0 = and <16 x i8> %not5, %src1 | |
| %or20 = or <16 x i8> %or11, %0 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval123(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval123: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v24, %v24 | |
| ; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 | |
| ; CHECK-NEXT: voc %v1, %v26, %v28 | |
| ; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and2 = and <16 x i8> %and, %src3 | |
| %and4 = and <16 x i8> %not, %src2 | |
| %or11 = or <16 x i8> %and2, %and4 | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and1545 = or <16 x i8> %src3.not, %src2 | |
| %0 = and <16 x i8> %and1545, %src1 | |
| %or23 = or <16 x i8> %or11, %0 | |
| ret <16 x i8> %or23 | |
| } | |
| define <16 x i8> @eval124(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval124: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v26, %v24 | |
| ; CHECK-NEXT: vx %v1, %v24, %v26 | |
| ; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src2, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src3 | |
| %or11 = xor <16 x i8> %src1, %src2 | |
| %or20 = or <16 x i8> %or11, %and2 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval125(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval125: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 111 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or11 = xor <16 x i8> %src1, %src2 | |
| %or23 = or <16 x i8> %or11, %src3 | |
| ret <16 x i8> %or23 | |
| } | |
| define <16 x i8> @eval126(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval126: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v24, %v24 | |
| ; CHECK-NEXT: vgbm %v1, 65535 | |
| ; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 | |
| ; CHECK-NEXT: veval %v1, %v26, %v1, %v28, 190 | |
| ; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and2 = and <16 x i8> %and, %src3 | |
| %and4 = and <16 x i8> %not, %src2 | |
| %not5 = xor <16 x i8> %src3, splat(i8 -1) | |
| %or11 = or <16 x i8> %and2, %and4 | |
| %and1346 = or <16 x i8> %not5, %not1 | |
| %0 = and <16 x i8> %and1346, %src1 | |
| %or24 = or <16 x i8> %or11, %0 | |
| ret <16 x i8> %or24 | |
| } | |
| define <16 x i8> @eval127(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval127: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 8 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 127 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src2, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and2 = and <16 x i8> %1, %src3 | |
| %2 = or <16 x i8> %and2, %src1 | |
| %or27 = or <16 x i8> %2, %src2 | |
| ret <16 x i8> %or27 | |
| } | |
| define <16 x i8> @eval128(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval128: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 128 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and3.demorgan = or <16 x i8> %and.demorgan, %src3 | |
| %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) | |
| ret <16 x i8> %and3 | |
| } | |
| define <16 x i8> @eval129(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval129: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v26, %v24 | |
| ; CHECK-NEXT: vn %v1, %v26, %v24 | |
| ; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and3.demorgan = or <16 x i8> %and.demorgan, %src3 | |
| %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) | |
| %and4 = and <16 x i8> %src2, %src1 | |
| %and5 = and <16 x i8> %and4, %src3 | |
| %or6 = or <16 x i8> %and5, %and3 | |
| ret <16 x i8> %or6 | |
| } | |
| define <16 x i8> @eval130(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval130: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 130 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src2, %src1 | |
| %or7.demorgan = or <16 x i8> %0, %src3 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| ret <16 x i8> %or7 | |
| } | |
| define <16 x i8> @eval131(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval131: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v0, %v26, %v24 | |
| ; CHECK-NEXT: vx %v1, %v26, %v24 | |
| ; CHECK-NEXT: veval %v24, %v0, %v28, %v1, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and4 = and <16 x i8> %src2, %src1 | |
| %0 = xor <16 x i8> %src2, %src1 | |
| %or7.demorgan = or <16 x i8> %0, %src3 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| %and9 = and <16 x i8> %and4, %src3 | |
| %or10 = or <16 x i8> %and9, %or7 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval132(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval132: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 130 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src1 | |
| %1 = or <16 x i8> %0, %src2 | |
| %or7 = xor <16 x i8> %1, splat(i8 -1) | |
| ret <16 x i8> %or7 | |
| } | |
| define <16 x i8> @eval133(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval133: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src1 | |
| %1 = or <16 x i8> %0, %src2 | |
| %or7 = xor <16 x i8> %1, splat(i8 -1) | |
| %and8 = and <16 x i8> %src2, %src1 | |
| %and9 = and <16 x i8> %and8, %src3 | |
| %or10 = or <16 x i8> %and9, %or7 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval134(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval134: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v24 | |
| ; CHECK-NEXT: vnc %v1, %v24, %v28 | |
| ; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = xor <16 x i8> %src3, %src1 | |
| %1 = or <16 x i8> %0, %src2 | |
| %or7 = xor <16 x i8> %1, splat(i8 -1) | |
| %2 = and <16 x i8> %not2, %src1 | |
| %and10 = and <16 x i8> %2, %src2 | |
| %or11 = or <16 x i8> %and10, %or7 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval135(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval135: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src1 | |
| %1 = or <16 x i8> %0, %src2 | |
| %or7 = xor <16 x i8> %1, splat(i8 -1) | |
| %and8 = and <16 x i8> %src2, %src1 | |
| %or14 = or <16 x i8> %and8, %or7 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval136(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval136: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v24, %v28, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| ret <16 x i8> %1 | |
| } | |
| define <16 x i8> @eval137(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval137: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 137 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and9 = and <16 x i8> %src2, %src1 | |
| %and10 = and <16 x i8> %and9, %src3 | |
| %or11 = or <16 x i8> %and10, %1 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval138(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval138: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 127 | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = or <16 x i8> %src2, %src1 | |
| %and3.demorgan = or <16 x i8> %0, %src3 | |
| %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) | |
| %1 = and <16 x i8> %not2, %src1 | |
| %or12 = or <16 x i8> %1, %and3 | |
| ret <16 x i8> %or12 | |
| } | |
| define <16 x i8> @eval139(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval139: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 11 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src2, %src1 | |
| %and3.demorgan = or <16 x i8> %0, %src3 | |
| %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and729 = or <16 x i8> %src3.not, %src2 | |
| %1 = and <16 x i8> %and729, %src1 | |
| %or15 = or <16 x i8> %1, %and3 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval140(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval140: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 127 | |
| ; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = or <16 x i8> %src1, %src3 | |
| %and3.demorgan = or <16 x i8> %0, %src2 | |
| %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) | |
| %and5 = and <16 x i8> %not1, %src1 | |
| %or12 = or <16 x i8> %and5, %and3 | |
| ret <16 x i8> %or12 | |
| } | |
| define <16 x i8> @eval141(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval141: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: vo %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = or <16 x i8> %src2, %src1 | |
| %and3.demorgan = or <16 x i8> %0, %src3 | |
| %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) | |
| %and5 = and <16 x i8> %not1, %src1 | |
| %and13 = and <16 x i8> %src2, %src1 | |
| %and14 = and <16 x i8> %and13, %src3 | |
| %or12 = or <16 x i8> %and14, %and5 | |
| %or15 = or <16 x i8> %or12, %and3 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval142(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval142: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 127 | |
| ; CHECK-NEXT: vn %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src2, %src1 | |
| %and3.demorgan = or <16 x i8> %0, %src3 | |
| %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) | |
| %and530.demorgan = and <16 x i8> %src3, %src2 | |
| %and530 = xor <16 x i8> %and530.demorgan, splat(i8 -1) | |
| %1 = and <16 x i8> %and530, %src1 | |
| %or16 = or <16 x i8> %1, %and3 | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval143(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval143: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src2 | |
| %.not = xor <16 x i8> %0, splat(i8 -1) | |
| %or19 = or <16 x i8> %.not, %src1 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval144(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval144: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 130 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| ret <16 x i8> %or7 | |
| } | |
| define <16 x i8> @eval145(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval145: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| %and8 = and <16 x i8> %src2, %src1 | |
| %and9 = and <16 x i8> %and8, %src3 | |
| %or10 = or <16 x i8> %and9, %or7 | |
| ret <16 x i8> %or10 | |
| } | |
| define <16 x i8> @eval146(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval146: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| %1 = and <16 x i8> %not2, %src1 | |
| %and10 = and <16 x i8> %1, %src2 | |
| %or11 = or <16 x i8> %and10, %or7 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval147(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval147: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| %and8 = and <16 x i8> %src2, %src1 | |
| %or14 = or <16 x i8> %and8, %or7 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval148(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval148: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| %and9 = and <16 x i8> %not1, %src1 | |
| %and10 = and <16 x i8> %and9, %src3 | |
| %or11 = or <16 x i8> %and10, %or7 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval149(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval149: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v0, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| %1 = and <16 x i8> %src3, %src1 | |
| %or14 = or <16 x i8> %1, %or7 | |
| ret <16 x i8> %or14 | |
| } | |
| define <16 x i8> @eval150(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval150: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 | |
| ; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 2 | |
| ; CHECK-NEXT: veval %v24, %v1, %v2, %v0, 191 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| %and9 = and <16 x i8> %not1, %src1 | |
| %and10 = and <16 x i8> %and9, %src3 | |
| %or11 = or <16 x i8> %and10, %or7 | |
| %1 = and <16 x i8> %not2, %src1 | |
| %and14 = and <16 x i8> %1, %src2 | |
| %or15 = or <16 x i8> %or11, %and14 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval151(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval151: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 31 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| %and9 = and <16 x i8> %not1, %src1 | |
| %and10 = and <16 x i8> %and9, %src3 | |
| %and12 = and <16 x i8> %src2, %src1 | |
| %or11 = or <16 x i8> %and10, %and12 | |
| %or18 = or <16 x i8> %or11, %or7 | |
| ret <16 x i8> %or18 | |
| } | |
| define <16 x i8> @eval152(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval152: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v0, 234 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %1 = or <16 x i8> %src3, %src2 | |
| %2 = and <16 x i8> %or7.demorgan, %1 | |
| %or12 = xor <16 x i8> %2, splat(i8 -1) | |
| ret <16 x i8> %or12 | |
| } | |
| define <16 x i8> @eval153(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval153: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 | |
| ; CHECK-NEXT: vo %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v2, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 239 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %1 = or <16 x i8> %src3, %src2 | |
| %2 = and <16 x i8> %or7.demorgan, %1 | |
| %or12 = xor <16 x i8> %2, splat(i8 -1) | |
| %and13 = and <16 x i8> %src2, %src1 | |
| %and14 = and <16 x i8> %and13, %src3 | |
| %or15 = or <16 x i8> %and14, %or12 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval154(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval154: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 | |
| ; CHECK-NEXT: vo %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 2 | |
| ; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 239 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %1 = or <16 x i8> %src3, %src2 | |
| %2 = and <16 x i8> %or7.demorgan, %1 | |
| %or12 = xor <16 x i8> %2, splat(i8 -1) | |
| %3 = and <16 x i8> %not2, %src1 | |
| %and15 = and <16 x i8> %3, %src2 | |
| %or16 = or <16 x i8> %and15, %or12 | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval155(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval155: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 | |
| ; CHECK-NEXT: vo %v1, %v28, %v26 | |
| ; CHECK-NEXT: vn %v2, %v26, %v24 | |
| ; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 239 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %1 = or <16 x i8> %src3, %src2 | |
| %2 = and <16 x i8> %or7.demorgan, %1 | |
| %or12 = xor <16 x i8> %2, splat(i8 -1) | |
| %and13 = and <16 x i8> %src2, %src1 | |
| %or19 = or <16 x i8> %and13, %or12 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval156(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval156: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 | |
| ; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| %and9 = and <16 x i8> %not1, %src1 | |
| %or16 = or <16 x i8> %and9, %or7 | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval157(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval157: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: vx %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| %and9 = and <16 x i8> %not1, %src1 | |
| %and17 = and <16 x i8> %src2, %src1 | |
| %and18 = and <16 x i8> %and17, %src3 | |
| %or16 = or <16 x i8> %and18, %and9 | |
| %or19 = or <16 x i8> %or16, %or7 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval158(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval158: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 | |
| ; CHECK-NEXT: vn %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %or7.demorgan = or <16 x i8> %0, %src1 | |
| %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) | |
| %and938.demorgan = and <16 x i8> %src3, %src2 | |
| %and938 = xor <16 x i8> %and938.demorgan, splat(i8 -1) | |
| %1 = and <16 x i8> %and938, %src1 | |
| %or20 = or <16 x i8> %1, %or7 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval159(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval159: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 159 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src2, %src3 | |
| %.not = xor <16 x i8> %0, splat(i8 -1) | |
| %or23 = or <16 x i8> %.not, %src1 | |
| ret <16 x i8> %or23 | |
| } | |
| define <16 x i8> @eval160(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval160: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v24, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| ret <16 x i8> %1 | |
| } | |
| define <16 x i8> @eval161(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval161: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 137 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and9 = and <16 x i8> %src2, %src1 | |
| %and10 = and <16 x i8> %and9, %src3 | |
| %or11 = or <16 x i8> %and10, %1 | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval162(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval162: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v28, %v24, %v26, 127 | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = or <16 x i8> %src3, %src1 | |
| %and3.demorgan = or <16 x i8> %0, %src2 | |
| %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) | |
| %1 = and <16 x i8> %not2, %src2 | |
| %or12 = or <16 x i8> %1, %and3 | |
| ret <16 x i8> %or12 | |
| } | |
| define <16 x i8> @eval163(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval163: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 11 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src2, %src1 | |
| %and3.demorgan = or <16 x i8> %0, %src3 | |
| %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and729 = or <16 x i8> %src3.not, %src1 | |
| %1 = and <16 x i8> %and729, %src2 | |
| %or15 = or <16 x i8> %1, %and3 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval164(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval164: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v24 | |
| ; CHECK-NEXT: vx %v1, %v28, %v24 | |
| ; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 234 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %src3, %src1 | |
| %2 = or <16 x i8> %1, %src2 | |
| %3 = and <16 x i8> %0, %2 | |
| %or12 = xor <16 x i8> %3, splat(i8 -1) | |
| ret <16 x i8> %or12 | |
| } | |
| define <16 x i8> @eval165(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval165: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnx %v24, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src3, %src1 | |
| %or15 = xor <16 x i8> %0, splat(i8 -1) | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval166(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval166: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 | |
| ; CHECK-NEXT: veval %v2, %v26, %v28, %v24, 111 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v2, 239 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = and <16 x i8> %not2, %src1 | |
| %and15 = and <16 x i8> %1, %src2 | |
| %2 = xor <16 x i8> %src3, %src1 | |
| %3 = or <16 x i8> %2, %src2 | |
| %4 = and <16 x i8> %0, %3 | |
| %or12 = xor <16 x i8> %4, splat(i8 -1) | |
| %or16 = or <16 x i8> %and15, %or12 | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval167(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval167: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 31 | |
| ; CHECK-NEXT: veval %v24, %v0, %v28, %v24, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and10 = and <16 x i8> %not1, %src1 | |
| %and11 = and <16 x i8> %and10, %src3 | |
| %and13 = and <16 x i8> %src2, %src1 | |
| %or8 = or <16 x i8> %and11, %and13 | |
| %or19 = or <16 x i8> %or8, %1 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval168(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval168: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 168 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src2, %src1 | |
| %1 = or <16 x i8> %0, %src3 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| ret <16 x i8> %or13 | |
| } | |
| define <16 x i8> @eval169(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval169: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 169 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src2, %src1 | |
| %1 = xor <16 x i8> %0, %src3 | |
| %or16 = xor <16 x i8> %1, splat(i8 -1) | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval170(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval170: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v24, %v28, %v28 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| ret <16 x i8> %not2 | |
| } | |
| define <16 x i8> @eval171(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval171: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and1238 = or <16 x i8> %src3.not, %src2 | |
| %2 = and <16 x i8> %and1238, %src1 | |
| %or20 = or <16 x i8> %2, %1 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval172(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval172: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and10 = and <16 x i8> %not1, %src1 | |
| %or17 = or <16 x i8> %and10, %1 | |
| ret <16 x i8> %or17 | |
| } | |
| define <16 x i8> @eval173(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval173: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 47 | |
| ; CHECK-NEXT: veval %v24, %v0, %v28, %v24, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and10 = and <16 x i8> %not1, %src1 | |
| %and18 = and <16 x i8> %src2, %src1 | |
| %and19 = and <16 x i8> %and18, %src3 | |
| %or8 = or <16 x i8> %and19, %and10 | |
| %or20 = or <16 x i8> %or8, %1 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval174(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval174: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v24 | |
| ; CHECK-NEXT: vn %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and1039.demorgan = and <16 x i8> %src3, %src2 | |
| %and1039 = xor <16 x i8> %and1039.demorgan, splat(i8 -1) | |
| %2 = and <16 x i8> %and1039, %src1 | |
| %or21 = or <16 x i8> %2, %1 | |
| ret <16 x i8> %or21 | |
| } | |
| define <16 x i8> @eval175(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval175: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v24, %v24, %v28 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %or24 = or <16 x i8> %src3.not, %src1 | |
| ret <16 x i8> %or24 | |
| } | |
| define <16 x i8> @eval176(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval176: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 138 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and522 = or <16 x i8> %src3.not, %src2 | |
| %or12 = and <16 x i8> %and522, %not | |
| ret <16 x i8> %or12 | |
| } | |
| define <16 x i8> @eval177(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval177: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and529 = or <16 x i8> %src3.not, %src2 | |
| %or12 = and <16 x i8> %and529, %not | |
| %and13 = and <16 x i8> %src2, %src1 | |
| %and14 = and <16 x i8> %and13, %src3 | |
| %or15 = or <16 x i8> %or12, %and14 | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval178(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval178: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 138 | |
| ; CHECK-NEXT: vn %v1, %v26, %v24 | |
| ; CHECK-NEXT: veval %v24, %v0, %v1, %v28, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and530 = or <16 x i8> %not2, %src2 | |
| %or12 = and <16 x i8> %and530, %not | |
| %0 = and <16 x i8> %src2, %src1 | |
| %and15 = and <16 x i8> %0, %not2 | |
| %or16 = or <16 x i8> %or12, %and15 | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval179(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval179: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v26, %v0, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and537 = or <16 x i8> %src3.not, %src2 | |
| %or12 = and <16 x i8> %and537, %not | |
| %and13 = and <16 x i8> %src2, %src1 | |
| %or19 = or <16 x i8> %or12, %and13 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval180(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval180: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and530 = or <16 x i8> %src3.not, %src2 | |
| %or12 = and <16 x i8> %and530, %not | |
| %and14 = and <16 x i8> %not1, %src1 | |
| %and15 = and <16 x i8> %and14, %src3 | |
| %or16 = or <16 x i8> %or12, %and15 | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval181(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval181: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v28, %v0, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and537 = or <16 x i8> %src3.not, %src2 | |
| %or12 = and <16 x i8> %and537, %not | |
| %0 = and <16 x i8> %src3, %src1 | |
| %or19 = or <16 x i8> %or12, %0 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval182(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval182: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: vn %v1, %v26, %v24 | |
| ; CHECK-NEXT: veval %v24, %v0, %v1, %v28, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and538 = or <16 x i8> %not2, %src2 | |
| %or12 = and <16 x i8> %and538, %not | |
| %and14 = and <16 x i8> %not1, %src1 | |
| %and15 = and <16 x i8> %and14, %src3 | |
| %or16 = or <16 x i8> %or12, %and15 | |
| %0 = and <16 x i8> %src2, %src1 | |
| %and19 = and <16 x i8> %0, %not2 | |
| %or20 = or <16 x i8> %or16, %and19 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval183(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval183: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 31 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and545 = or <16 x i8> %src3.not, %src2 | |
| %or12 = and <16 x i8> %and545, %not | |
| %and14 = and <16 x i8> %not1, %src1 | |
| %and15 = and <16 x i8> %and14, %src3 | |
| %and17 = and <16 x i8> %src2, %src1 | |
| %or16 = or <16 x i8> %and15, %and17 | |
| %or23 = or <16 x i8> %or16, %or12 | |
| ret <16 x i8> %or23 | |
| } | |
| define <16 x i8> @eval184(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval184: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: vno %v1, %v28, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and531 = or <16 x i8> %src3.not, %src2 | |
| %or12 = and <16 x i8> %and531, %not | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and16 = and <16 x i8> %1, %src1 | |
| %or17 = or <16 x i8> %or12, %and16 | |
| ret <16 x i8> %or17 | |
| } | |
| define <16 x i8> @eval185(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval185: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: vnx %v1, %v28, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and538 = or <16 x i8> %src3.not, %src2 | |
| %or12 = and <16 x i8> %and538, %not | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %or17 = and <16 x i8> %1, %src1 | |
| %or20 = or <16 x i8> %or17, %or12 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval186(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval186: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v28, %v28 | |
| ; CHECK-NEXT: voc %v1, %v26, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v1, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and539 = or <16 x i8> %not2, %src2 | |
| %or12 = and <16 x i8> %and539, %not | |
| %0 = and <16 x i8> %not2, %src1 | |
| %or21 = or <16 x i8> %or12, %0 | |
| ret <16 x i8> %or21 | |
| } | |
| define <16 x i8> @eval187(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval187: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v24, %v26, %v28 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and546 = or <16 x i8> %src3.not, %src2 | |
| ret <16 x i8> %and546 | |
| } | |
| define <16 x i8> @eval188(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval188: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v26, %v26 | |
| ; CHECK-NEXT: voc %v1, %v26, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v0, %v1, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and539 = or <16 x i8> %src3.not, %src2 | |
| %or12 = and <16 x i8> %and539, %not | |
| %and14 = and <16 x i8> %not1, %src1 | |
| %or21 = or <16 x i8> %or12, %and14 | |
| ret <16 x i8> %or21 | |
| } | |
| define <16 x i8> @eval189(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval189: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and546 = or <16 x i8> %src3.not, %src2 | |
| %or12 = and <16 x i8> %and546, %not | |
| %and14 = and <16 x i8> %not1, %src1 | |
| %and22 = and <16 x i8> %src2, %src1 | |
| %and23 = and <16 x i8> %and22, %src3 | |
| %or21 = or <16 x i8> %and23, %and14 | |
| %or24 = or <16 x i8> %or21, %or12 | |
| ret <16 x i8> %or24 | |
| } | |
| define <16 x i8> @eval190(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval190: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v26, %v28 | |
| ; CHECK-NEXT: vnn %v1, %v28, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and547 = or <16 x i8> %src3.not, %src2 | |
| %or12 = and <16 x i8> %and547, %not | |
| %and1448.demorgan = and <16 x i8> %src3, %src2 | |
| %and1448 = xor <16 x i8> %and1448.demorgan, splat(i8 -1) | |
| %0 = and <16 x i8> %and1448, %src1 | |
| %or25 = or <16 x i8> %or12, %0 | |
| ret <16 x i8> %or25 | |
| } | |
| define <16 x i8> @eval191(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval191: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 191 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and554 = or <16 x i8> %src2, %src1 | |
| %or28 = or <16 x i8> %and554, %src3.not | |
| ret <16 x i8> %or28 | |
| } | |
| define <16 x i8> @eval192(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval192: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v24, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| ret <16 x i8> %and | |
| } | |
| define <16 x i8> @eval193(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval193: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 137 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %0 = and <16 x i8> %src1, %src3 | |
| %and10 = and <16 x i8> %0, %src2 | |
| %or11 = or <16 x i8> %and10, %and | |
| ret <16 x i8> %or11 | |
| } | |
| define <16 x i8> @eval194(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval194: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v28, %v28 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 137 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %not2, %src1 | |
| %and11 = and <16 x i8> %0, %src2 | |
| %or12 = or <16 x i8> %and11, %and | |
| ret <16 x i8> %or12 | |
| } | |
| define <16 x i8> @eval195(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval195: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnx %v24, %v24, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src1, %src2 | |
| %or15 = xor <16 x i8> %0, splat(i8 -1) | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval196(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval196: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 138 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and22 = or <16 x i8> %not, %src3 | |
| %or12 = and <16 x i8> %and22, %not1 | |
| ret <16 x i8> %or12 | |
| } | |
| define <16 x i8> @eval197(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval197: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %0 = and <16 x i8> %src3, %src1 | |
| %or15 = or <16 x i8> %0, %and | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval198(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval198: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v26, %v26 | |
| ; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: vnc %v1, %v24, %v28 | |
| ; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and10 = and <16 x i8> %not1, %src1 | |
| %and11 = and <16 x i8> %and10, %src3 | |
| %or12 = or <16 x i8> %and11, %and | |
| %0 = and <16 x i8> %not2, %src1 | |
| %and15 = and <16 x i8> %0, %src2 | |
| %or16 = or <16 x i8> %or12, %and15 | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval199(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval199: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v28, %v24 | |
| ; CHECK-NEXT: vsel %v24, %v24, %v0, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and37 = or <16 x i8> %not, %src3 | |
| %or12 = and <16 x i8> %and37, %not1 | |
| %and13 = and <16 x i8> %src2, %src1 | |
| %or19 = or <16 x i8> %or12, %and13 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval200(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval200: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 168 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src3, %src1 | |
| %1 = or <16 x i8> %0, %src2 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| ret <16 x i8> %or13 | |
| } | |
| define <16 x i8> @eval201(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval201: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 169 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, %src2 | |
| %or16 = xor <16 x i8> %1, splat(i8 -1) | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval202(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval202: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v0, %v28, %v24 | |
| ; CHECK-NEXT: vnc %v1, %v24, %v28 | |
| ; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %src3, %src1 | |
| %1 = or <16 x i8> %0, %src2 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| %2 = and <16 x i8> %not2, %src1 | |
| %and16 = and <16 x i8> %2, %src2 | |
| %or17 = or <16 x i8> %and16, %or13 | |
| ret <16 x i8> %or17 | |
| } | |
| define <16 x i8> @eval203(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval203: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src3, %src1 | |
| %1 = or <16 x i8> %0, %src2 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| %and14 = and <16 x i8> %src2, %src1 | |
| %or20 = or <16 x i8> %and14, %or13 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval204(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval204: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v24, %v26, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| ret <16 x i8> %not1 | |
| } | |
| define <16 x i8> @eval205(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval205: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 171 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = and <16 x i8> %src3, %src1 | |
| %or20 = or <16 x i8> %0, %not1 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval206(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval206: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %not2, %src1 | |
| %or21 = or <16 x i8> %0, %not1 | |
| ret <16 x i8> %or21 | |
| } | |
| define <16 x i8> @eval207(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval207: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v24, %v24, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or24 = or <16 x i8> %not1, %src1 | |
| ret <16 x i8> %or24 | |
| } | |
| define <16 x i8> @eval208(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval208: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 138 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and1122 = or <16 x i8> %not1, %src3 | |
| %or12 = and <16 x i8> %and1122, %not | |
| ret <16 x i8> %or12 | |
| } | |
| define <16 x i8> @eval209(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval209: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %0 = and <16 x i8> %src3, %src2 | |
| %or15 = or <16 x i8> %0, %and | |
| ret <16 x i8> %or15 | |
| } | |
| define <16 x i8> @eval210(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval210: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v26, %v26 | |
| ; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 | |
| ; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: vnc %v1, %v24, %v28 | |
| ; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and10 = and <16 x i8> %not, %src2 | |
| %and11 = and <16 x i8> %and10, %src3 | |
| %or12 = or <16 x i8> %and11, %and | |
| %0 = and <16 x i8> %not2, %src1 | |
| %and15 = and <16 x i8> %0, %src2 | |
| %or16 = or <16 x i8> %or12, %and15 | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval211(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval211: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v28, %v26 | |
| ; CHECK-NEXT: vsel %v24, %v26, %v0, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and1137 = or <16 x i8> %not1, %src3 | |
| %or12 = and <16 x i8> %and1137, %not | |
| %and13 = and <16 x i8> %src2, %src1 | |
| %or19 = or <16 x i8> %or12, %and13 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval212(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval212: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 142 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %0 = xor <16 x i8> %src2, %src1 | |
| %1 = and <16 x i8> %0, %src3 | |
| %or16 = or <16 x i8> %1, %and | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval213(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval213: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %or19 = or <16 x i8> %and, %src3 | |
| ret <16 x i8> %or19 | |
| } | |
| define <16 x i8> @eval214(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval214: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v1, %v28, %v26, %v24, 6 | |
| ; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 2 | |
| ; CHECK-NEXT: veval %v24, %v1, %v2, %v0, 191 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %and.demorgan = or <16 x i8> %src2, %src1 | |
| %and = xor <16 x i8> %and.demorgan, splat(i8 -1) | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = xor <16 x i8> %src2, %src1 | |
| %1 = and <16 x i8> %0, %src3 | |
| %or16 = or <16 x i8> %1, %and | |
| %2 = and <16 x i8> %not2, %src1 | |
| %and19 = and <16 x i8> %2, %src2 | |
| %or20 = or <16 x i8> %or16, %and19 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval215(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval215: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 159 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = xor <16 x i8> %src2, %src1 | |
| %or16 = xor <16 x i8> %0, splat(i8 -1) | |
| %or23 = or <16 x i8> %or16, %src3 | |
| ret <16 x i8> %or23 | |
| } | |
| define <16 x i8> @eval216(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval216: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v26, %v26 | |
| ; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 | |
| ; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: vo %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and10 = and <16 x i8> %not, %src2 | |
| %and11 = and <16 x i8> %and10, %src3 | |
| %or12 = or <16 x i8> %and11, %and | |
| %0 = or <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and16 = and <16 x i8> %1, %src1 | |
| %or17 = or <16 x i8> %or12, %and16 | |
| ret <16 x i8> %or17 | |
| } | |
| define <16 x i8> @eval217(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval217: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v0, %v28, %v26 | |
| ; CHECK-NEXT: vnx %v1, %v26, %v28 | |
| ; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and1138 = or <16 x i8> %not1, %src3 | |
| %or12 = and <16 x i8> %and1138, %not | |
| %0 = xor <16 x i8> %src3, %src2 | |
| %and1939 = xor <16 x i8> %0, splat(i8 -1) | |
| %1 = and <16 x i8> %and1939, %src1 | |
| %or20 = or <16 x i8> %or12, %1 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval218(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval218: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v26, %v26 | |
| ; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 | |
| ; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and10 = and <16 x i8> %not, %src2 | |
| %and11 = and <16 x i8> %and10, %src3 | |
| %or12 = or <16 x i8> %and11, %and | |
| %0 = and <16 x i8> %not2, %src1 | |
| %or21 = or <16 x i8> %or12, %0 | |
| ret <16 x i8> %or21 | |
| } | |
| define <16 x i8> @eval219(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval219: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v26, %v26 | |
| ; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 | |
| ; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: voc %v1, %v26, %v28 | |
| ; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %and10 = and <16 x i8> %not, %src2 | |
| %and11 = and <16 x i8> %and10, %src3 | |
| %or12 = or <16 x i8> %and11, %and | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and1646 = or <16 x i8> %src3.not, %src2 | |
| %0 = and <16 x i8> %and1646, %src1 | |
| %or24 = or <16 x i8> %or12, %0 | |
| ret <16 x i8> %or24 | |
| } | |
| define <16 x i8> @eval220(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval220: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = and <16 x i8> %not, %src3 | |
| %or21 = or <16 x i8> %0, %not1 | |
| ret <16 x i8> %or21 | |
| } | |
| define <16 x i8> @eval221(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval221: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v24, %v28, %v26 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or24 = or <16 x i8> %not1, %src3 | |
| ret <16 x i8> %or24 | |
| } | |
| define <16 x i8> @eval222(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval222: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v26, %v24 | |
| ; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 171 | |
| ; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and10 = and <16 x i8> %not, %src2 | |
| %and11 = and <16 x i8> %and10, %src3 | |
| %or21 = or <16 x i8> %and11, %not1 | |
| %0 = and <16 x i8> %not2, %src1 | |
| %or25 = or <16 x i8> %or21, %0 | |
| ret <16 x i8> %or25 | |
| } | |
| define <16 x i8> @eval223(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval223: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 191 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %or21 = or <16 x i8> %not1, %src1 | |
| %or28 = or <16 x i8> %or21, %src3 | |
| ret <16 x i8> %or28 | |
| } | |
| define <16 x i8> @eval224(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval224: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 168 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src3, %src2 | |
| %1 = or <16 x i8> %0, %src1 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| ret <16 x i8> %or13 | |
| } | |
| define <16 x i8> @eval225(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval225: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 169 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src3, %src2 | |
| %1 = xor <16 x i8> %0, %src1 | |
| %or16 = xor <16 x i8> %1, splat(i8 -1) | |
| ret <16 x i8> %or16 | |
| } | |
| define <16 x i8> @eval226(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval226: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %src3, %src2 | |
| %1 = or <16 x i8> %0, %src1 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| %2 = and <16 x i8> %not2, %src1 | |
| %and16 = and <16 x i8> %2, %src2 | |
| %or17 = or <16 x i8> %and16, %or13 | |
| ret <16 x i8> %or17 | |
| } | |
| define <16 x i8> @eval227(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval227: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src3, %src2 | |
| %1 = or <16 x i8> %0, %src1 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| %and14 = and <16 x i8> %src2, %src1 | |
| %or20 = or <16 x i8> %and14, %or13 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval228(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval228: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v26, %v26 | |
| ; CHECK-NEXT: veval %v2, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: vo %v1, %v28, %v24 | |
| ; CHECK-NEXT: veval %v0, %v2, %v0, %v24, 47 | |
| ; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and12 = and <16 x i8> %1, %src2 | |
| %and15 = and <16 x i8> %not1, %src1 | |
| %and16 = and <16 x i8> %and15, %src3 | |
| %or13 = or <16 x i8> %and16, %and | |
| %or17 = or <16 x i8> %or13, %and12 | |
| ret <16 x i8> %or17 | |
| } | |
| define <16 x i8> @eval229(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval229: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v0, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src3, %src2 | |
| %1 = or <16 x i8> %0, %src1 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| %2 = and <16 x i8> %src3, %src1 | |
| %or20 = or <16 x i8> %2, %or13 | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval230(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval230: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v26, %v26 | |
| ; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 | |
| ; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 | |
| ; CHECK-NEXT: veval %v24, %v0, %v26, %v28, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and15 = and <16 x i8> %not1, %src1 | |
| %and16 = and <16 x i8> %and15, %src3 | |
| %or13 = or <16 x i8> %and16, %and | |
| %0 = and <16 x i8> %not2, %src2 | |
| %or21 = or <16 x i8> %or13, %0 | |
| ret <16 x i8> %or21 | |
| } | |
| define <16 x i8> @eval231(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval231: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v0, %v26, %v26 | |
| ; CHECK-NEXT: vnc %v2, %v24, %v26 | |
| ; CHECK-NEXT: vo %v1, %v28, %v24 | |
| ; CHECK-NEXT: vsel %v0, %v26, %v0, %v24 | |
| ; CHECK-NEXT: veval %v0, %v0, %v2, %v28, 31 | |
| ; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %and = and <16 x i8> %not1, %not | |
| %0 = or <16 x i8> %src3, %src1 | |
| %1 = xor <16 x i8> %0, splat(i8 -1) | |
| %and12 = and <16 x i8> %1, %src2 | |
| %and15 = and <16 x i8> %not1, %src1 | |
| %and16 = and <16 x i8> %and15, %src3 | |
| %and18 = and <16 x i8> %src2, %src1 | |
| %or13 = or <16 x i8> %and18, %and | |
| %or17 = or <16 x i8> %or13, %and16 | |
| %or24 = or <16 x i8> %or17, %and12 | |
| ret <16 x i8> %or24 | |
| } | |
| define <16 x i8> @eval232(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval232: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 31 | |
| ; CHECK-NEXT: vo %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src3, %src2 | |
| %1 = or <16 x i8> %0, %src1 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| %2 = or <16 x i8> %src3, %src2 | |
| %3 = xor <16 x i8> %2, splat(i8 -1) | |
| %and17 = and <16 x i8> %3, %src1 | |
| %or18 = or <16 x i8> %and17, %or13 | |
| ret <16 x i8> %or18 | |
| } | |
| define <16 x i8> @eval233(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval233: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 31 | |
| ; CHECK-NEXT: vx %v1, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src3, %src2 | |
| %1 = or <16 x i8> %0, %src1 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| %2 = xor <16 x i8> %src3, %src2 | |
| %and2039 = xor <16 x i8> %2, splat(i8 -1) | |
| %3 = and <16 x i8> %and2039, %src1 | |
| %or21 = or <16 x i8> %3, %or13 | |
| ret <16 x i8> %or21 | |
| } | |
| define <16 x i8> @eval234(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval234: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 31 | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %src3, %src2 | |
| %1 = or <16 x i8> %0, %src1 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| %2 = and <16 x i8> %not2, %src1 | |
| %or22 = or <16 x i8> %2, %or13 | |
| ret <16 x i8> %or22 | |
| } | |
| define <16 x i8> @eval235(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval235: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vn %v0, %v28, %v26 | |
| ; CHECK-NEXT: voc %v1, %v26, %v28 | |
| ; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 139 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = and <16 x i8> %src3, %src2 | |
| %1 = or <16 x i8> %0, %src1 | |
| %or13 = xor <16 x i8> %1, splat(i8 -1) | |
| %src3.not = xor <16 x i8> %src3, splat(i8 -1) | |
| %and1747 = or <16 x i8> %src3.not, %src2 | |
| %2 = and <16 x i8> %and1747, %src1 | |
| %or25 = or <16 x i8> %2, %or13 | |
| ret <16 x i8> %or25 | |
| } | |
| define <16 x i8> @eval236(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval236: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 234 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %or22.demorgan = and <16 x i8> %0, %src2 | |
| %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) | |
| ret <16 x i8> %or22 | |
| } | |
| define <16 x i8> @eval237(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval237: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 239 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %or22.demorgan = and <16 x i8> %0, %src2 | |
| %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) | |
| %and23 = and <16 x i8> %src2, %src1 | |
| %and24 = and <16 x i8> %and23, %src3 | |
| %or25 = or <16 x i8> %and24, %or22 | |
| ret <16 x i8> %or25 | |
| } | |
| define <16 x i8> @eval238(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval238: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 7 | |
| ; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = or <16 x i8> %src3, %src1 | |
| %or22.demorgan = and <16 x i8> %0, %src2 | |
| %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) | |
| %1 = and <16 x i8> %not2, %src1 | |
| %or26 = or <16 x i8> %1, %or22 | |
| ret <16 x i8> %or26 | |
| } | |
| define <16 x i8> @eval239(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval239: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v24 | |
| ; CHECK-NEXT: veval %v24, %v24, %v0, %v26, 239 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src1 | |
| %or22.demorgan = and <16 x i8> %0, %src2 | |
| %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) | |
| %or29 = or <16 x i8> %or22, %src1 | |
| ret <16 x i8> %or29 | |
| } | |
| define <16 x i8> @eval240(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval240: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vno %v24, %v24, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| ret <16 x i8> %not | |
| } | |
| define <16 x i8> @eval241(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval241: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 171 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %0 = and <16 x i8> %src3, %src2 | |
| %or20 = or <16 x i8> %0, %not | |
| ret <16 x i8> %or20 | |
| } | |
| define <16 x i8> @eval242(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval242: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = and <16 x i8> %not2, %src2 | |
| %or21 = or <16 x i8> %0, %not | |
| ret <16 x i8> %or21 | |
| } | |
| define <16 x i8> @eval243(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval243: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v24, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %or24 = or <16 x i8> %not, %src2 | |
| ret <16 x i8> %or24 | |
| } | |
| define <16 x i8> @eval244(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval244: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %0 = and <16 x i8> %not1, %src3 | |
| %or21 = or <16 x i8> %0, %not | |
| ret <16 x i8> %or21 | |
| } | |
| define <16 x i8> @eval245(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval245: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: voc %v24, %v28, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %or24 = or <16 x i8> %not, %src3 | |
| ret <16 x i8> %or24 | |
| } | |
| define <16 x i8> @eval246(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval246: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnc %v0, %v24, %v26 | |
| ; CHECK-NEXT: veval %v0, %v0, %v28, %v24, 171 | |
| ; CHECK-NEXT: veval %v24, %v0, %v26, %v28, 47 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %not1 = xor <16 x i8> %src2, splat(i8 -1) | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %and19 = and <16 x i8> %not1, %src1 | |
| %and20 = and <16 x i8> %and19, %src3 | |
| %or21 = or <16 x i8> %and20, %not | |
| %0 = and <16 x i8> %not2, %src2 | |
| %or25 = or <16 x i8> %or21, %0 | |
| ret <16 x i8> %or25 | |
| } | |
| define <16 x i8> @eval247(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval247: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 191 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not = xor <16 x i8> %src1, splat(i8 -1) | |
| %or21 = or <16 x i8> %not, %src2 | |
| %or28 = or <16 x i8> %or21, %src3 | |
| ret <16 x i8> %or28 | |
| } | |
| define <16 x i8> @eval248(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval248: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 234 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src2 | |
| %or22.demorgan = and <16 x i8> %0, %src1 | |
| %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) | |
| ret <16 x i8> %or22 | |
| } | |
| define <16 x i8> @eval249(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval249: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 | |
| ; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 239 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src2 | |
| %or22.demorgan = and <16 x i8> %0, %src1 | |
| %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) | |
| %and23 = and <16 x i8> %src2, %src1 | |
| %and24 = and <16 x i8> %and23, %src3 | |
| %or25 = or <16 x i8> %and24, %or22 | |
| ret <16 x i8> %or25 | |
| } | |
| define <16 x i8> @eval250(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval250: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 7 | |
| ; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 174 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %not2 = xor <16 x i8> %src3, splat(i8 -1) | |
| %0 = or <16 x i8> %src3, %src2 | |
| %or22.demorgan = and <16 x i8> %0, %src1 | |
| %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) | |
| %1 = and <16 x i8> %not2, %src2 | |
| %or26 = or <16 x i8> %1, %or22 | |
| ret <16 x i8> %or26 | |
| } | |
| define <16 x i8> @eval251(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval251: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vo %v0, %v28, %v26 | |
| ; CHECK-NEXT: veval %v24, %v26, %v0, %v24, 239 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %0 = or <16 x i8> %src3, %src2 | |
| %or22.demorgan = and <16 x i8> %0, %src1 | |
| %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) | |
| %or29 = or <16 x i8> %or22, %src2 | |
| ret <16 x i8> %or29 | |
| } | |
| define <16 x i8> @eval252(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval252: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vnn %v24, %v26, %v24 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or26.demorgan = and <16 x i8> %src2, %src1 | |
| %or26 = xor <16 x i8> %or26.demorgan, splat(i8 -1) | |
| ret <16 x i8> %or26 | |
| } | |
| define <16 x i8> @eval253(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval253: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 239 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or26.demorgan = and <16 x i8> %src2, %src1 | |
| %or26 = xor <16 x i8> %or26.demorgan, splat(i8 -1) | |
| %or29 = or <16 x i8> %or26, %src3 | |
| ret <16 x i8> %or29 | |
| } | |
| define <16 x i8> @eval254(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval254: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 254 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| %or26.demorgan = and <16 x i8> %src2, %src1 | |
| %or30.demorgan = and <16 x i8> %or26.demorgan, %src3 | |
| %or30 = xor <16 x i8> %or30.demorgan, splat(i8 -1) | |
| ret <16 x i8> %or30 | |
| } | |
| define <16 x i8> @eval255(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { | |
| ; CHECK-LABEL: eval255: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: vgbm %v24, 65535 | |
| ; CHECK-NEXT: br %r14 | |
| entry: | |
| ret <16 x i8> splat(i8 -1) | |
| } | |