blob: 262ab0ea8bb2be558047eaceed1dbbab739c27dc [file] [log] [blame]
; 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)
}