| ; 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=arch15 | 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: vo %v1, %v28, %v26 |
| ; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 2 |
| ; 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: vn %v1, %v28, %v26 |
| ; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 2 |
| ; 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: vo %v0, %v28, %v24 |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 |
| ; 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: vn %v1, %v28, %v26 |
| ; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 8 |
| ; 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: vn %v1, %v28, %v24 |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 2 |
| ; 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: vo %v0, %v28, %v26 |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 |
| ; 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: vn %v1, %v26, %v24 |
| ; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 |
| ; 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: vn %v2, %v26, %v24 |
| ; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 |
| ; CHECK-NEXT: vo %v1, %v28, %v24 |
| ; CHECK-NEXT: veval %v0, %v28, %v0, %v2, 7 |
| ; 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: vn %v1, %v26, %v24 |
| ; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 |
| ; 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: 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 |
| %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: vn %v2, %v26, %v24 |
| ; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 |
| ; CHECK-NEXT: vo %v1, %v28, %v26 |
| ; CHECK-NEXT: veval %v0, %v28, %v0, %v2, 7 |
| ; 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: voc %v1, %v26, %v28 |
| ; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 |
| ; 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: vo %v0, %v26, %v24 |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 |
| ; 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: vn %v1, %v28, %v26 |
| ; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 127 |
| ; 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: vx %v0, %v28, %v26 |
| ; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 |
| ; 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: vo %v1, %v28, %v26 |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 |
| ; 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: vo %v1, %v28, %v26 |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 |
| ; 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: vo %v1, %v28, %v26 |
| ; CHECK-NEXT: vn %v2, %v26, %v24 |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 |
| ; 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: vx %v0, %v28, %v26 |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 |
| ; 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: vn %v1, %v28, %v26 |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 |
| ; 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: vn %v1, %v26, %v24 |
| ; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 138 |
| ; 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: voc %v0, %v26, %v28 |
| ; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 |
| ; 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: voc %v0, %v26, %v28 |
| ; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 |
| ; 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: vo %v1, %v28, %v24 |
| ; CHECK-NEXT: veval %v2, %v24, %v28, %v26, 2 |
| ; 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: vo %v1, %v28, %v26 |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 31 |
| ; 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: vx %v1, %v28, %v26 |
| ; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 31 |
| ; 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) |
| } |
| |