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