1*8424bf20SUlrich Weigand; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2*8424bf20SUlrich Weigand; Test use of VECTOR EVALUATE for combined boolean operations. 3*8424bf20SUlrich Weigand; 4*8424bf20SUlrich Weigand; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=arch15 | FileCheck %s 5*8424bf20SUlrich Weigand 6*8424bf20SUlrich Weiganddefine <16 x i8> @eval0(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 7*8424bf20SUlrich Weigand; CHECK-LABEL: eval0: 8*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 9*8424bf20SUlrich Weigand; CHECK-NEXT: vgbm %v24, 0 10*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 11*8424bf20SUlrich Weigandentry: 12*8424bf20SUlrich Weigand ret <16 x i8> zeroinitializer 13*8424bf20SUlrich Weigand} 14*8424bf20SUlrich Weigand 15*8424bf20SUlrich Weiganddefine <16 x i8> @eval1(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 16*8424bf20SUlrich Weigand; CHECK-LABEL: eval1: 17*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 18*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 1 19*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 20*8424bf20SUlrich Weigandentry: 21*8424bf20SUlrich Weigand %and = and <16 x i8> %src2, %src1 22*8424bf20SUlrich Weigand %and1 = and <16 x i8> %and, %src3 23*8424bf20SUlrich Weigand ret <16 x i8> %and1 24*8424bf20SUlrich Weigand} 25*8424bf20SUlrich Weigand 26*8424bf20SUlrich Weiganddefine <16 x i8> @eval2(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 27*8424bf20SUlrich Weigand; CHECK-LABEL: eval2: 28*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 29*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 2 30*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 31*8424bf20SUlrich Weigandentry: 32*8424bf20SUlrich Weigand %and = and <16 x i8> %src2, %src1 33*8424bf20SUlrich Weigand %not = xor <16 x i8> %src3, splat(i8 -1) 34*8424bf20SUlrich Weigand %and1 = and <16 x i8> %and, %not 35*8424bf20SUlrich Weigand ret <16 x i8> %and1 36*8424bf20SUlrich Weigand} 37*8424bf20SUlrich Weigand 38*8424bf20SUlrich Weiganddefine <16 x i8> @eval3(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 39*8424bf20SUlrich Weigand; CHECK-LABEL: eval3: 40*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 41*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v24, %v26, %v24 42*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 43*8424bf20SUlrich Weigandentry: 44*8424bf20SUlrich Weigand %and = and <16 x i8> %src2, %src1 45*8424bf20SUlrich Weigand ret <16 x i8> %and 46*8424bf20SUlrich Weigand} 47*8424bf20SUlrich Weigand 48*8424bf20SUlrich Weiganddefine <16 x i8> @eval4(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 49*8424bf20SUlrich Weigand; CHECK-LABEL: eval4: 50*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 51*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 2 52*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 53*8424bf20SUlrich Weigandentry: 54*8424bf20SUlrich Weigand %not = xor <16 x i8> %src2, splat(i8 -1) 55*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src1 56*8424bf20SUlrich Weigand %and1 = and <16 x i8> %and, %src3 57*8424bf20SUlrich Weigand ret <16 x i8> %and1 58*8424bf20SUlrich Weigand} 59*8424bf20SUlrich Weigand 60*8424bf20SUlrich Weiganddefine <16 x i8> @eval5(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 61*8424bf20SUlrich Weigand; CHECK-LABEL: eval5: 62*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 63*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v24, %v28, %v24 64*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 65*8424bf20SUlrich Weigandentry: 66*8424bf20SUlrich Weigand %or4 = and <16 x i8> %src3, %src1 67*8424bf20SUlrich Weigand ret <16 x i8> %or4 68*8424bf20SUlrich Weigand} 69*8424bf20SUlrich Weigand 70*8424bf20SUlrich Weiganddefine <16 x i8> @eval6(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 71*8424bf20SUlrich Weigand; CHECK-LABEL: eval6: 72*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 73*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 6 74*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 75*8424bf20SUlrich Weigandentry: 76*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 77*8424bf20SUlrich Weigand %or5 = and <16 x i8> %0, %src1 78*8424bf20SUlrich Weigand ret <16 x i8> %or5 79*8424bf20SUlrich Weigand} 80*8424bf20SUlrich Weigand 81*8424bf20SUlrich Weiganddefine <16 x i8> @eval7(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 82*8424bf20SUlrich Weigand; CHECK-LABEL: eval7: 83*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 84*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 7 85*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 86*8424bf20SUlrich Weigandentry: 87*8424bf20SUlrich Weigand %and118 = or <16 x i8> %src3, %src2 88*8424bf20SUlrich Weigand %or8 = and <16 x i8> %and118, %src1 89*8424bf20SUlrich Weigand ret <16 x i8> %or8 90*8424bf20SUlrich Weigand} 91*8424bf20SUlrich Weigand 92*8424bf20SUlrich Weiganddefine <16 x i8> @eval8(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 93*8424bf20SUlrich Weigand; CHECK-LABEL: eval8: 94*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 95*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 8 96*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 97*8424bf20SUlrich Weigandentry: 98*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 99*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 100*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src1 101*8424bf20SUlrich Weigand ret <16 x i8> %and2 102*8424bf20SUlrich Weigand} 103*8424bf20SUlrich Weigand 104*8424bf20SUlrich Weiganddefine <16 x i8> @eval9(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 105*8424bf20SUlrich Weigand; CHECK-LABEL: eval9: 106*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 107*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 9 108*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 109*8424bf20SUlrich Weigandentry: 110*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src3 111*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 112*8424bf20SUlrich Weigand %or5 = and <16 x i8> %1, %src1 113*8424bf20SUlrich Weigand ret <16 x i8> %or5 114*8424bf20SUlrich Weigand} 115*8424bf20SUlrich Weigand 116*8424bf20SUlrich Weiganddefine <16 x i8> @eval10(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 117*8424bf20SUlrich Weigand; CHECK-LABEL: eval10: 118*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 119*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v24, %v24, %v28 120*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 121*8424bf20SUlrich Weigandentry: 122*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src3, splat(i8 -1) 123*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not1, %src1 124*8424bf20SUlrich Weigand ret <16 x i8> %or6 125*8424bf20SUlrich Weigand} 126*8424bf20SUlrich Weigand 127*8424bf20SUlrich Weiganddefine <16 x i8> @eval11(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 128*8424bf20SUlrich Weigand; CHECK-LABEL: eval11: 129*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 130*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 11 131*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 132*8424bf20SUlrich Weigandentry: 133*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 134*8424bf20SUlrich Weigand %and219 = or <16 x i8> %src3.not, %src2 135*8424bf20SUlrich Weigand %or9 = and <16 x i8> %and219, %src1 136*8424bf20SUlrich Weigand ret <16 x i8> %or9 137*8424bf20SUlrich Weigand} 138*8424bf20SUlrich Weigand 139*8424bf20SUlrich Weiganddefine <16 x i8> @eval12(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 140*8424bf20SUlrich Weigand; CHECK-LABEL: eval12: 141*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 142*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v24, %v24, %v26 143*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 144*8424bf20SUlrich Weigandentry: 145*8424bf20SUlrich Weigand %not = xor <16 x i8> %src2, splat(i8 -1) 146*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src1 147*8424bf20SUlrich Weigand ret <16 x i8> %and 148*8424bf20SUlrich Weigand} 149*8424bf20SUlrich Weigand 150*8424bf20SUlrich Weiganddefine <16 x i8> @eval13(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 151*8424bf20SUlrich Weigand; CHECK-LABEL: eval13: 152*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 153*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 11 154*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 155*8424bf20SUlrich Weigandentry: 156*8424bf20SUlrich Weigand %not = xor <16 x i8> %src2, splat(i8 -1) 157*8424bf20SUlrich Weigand %and19 = or <16 x i8> %not, %src3 158*8424bf20SUlrich Weigand %or9 = and <16 x i8> %and19, %src1 159*8424bf20SUlrich Weigand ret <16 x i8> %or9 160*8424bf20SUlrich Weigand} 161*8424bf20SUlrich Weigand 162*8424bf20SUlrich Weiganddefine <16 x i8> @eval14(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 163*8424bf20SUlrich Weigand; CHECK-LABEL: eval14: 164*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 165*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 14 166*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 167*8424bf20SUlrich Weigandentry: 168*8424bf20SUlrich Weigand %and20.demorgan = and <16 x i8> %src3, %src2 169*8424bf20SUlrich Weigand %and20 = xor <16 x i8> %and20.demorgan, splat(i8 -1) 170*8424bf20SUlrich Weigand %or10 = and <16 x i8> %and20, %src1 171*8424bf20SUlrich Weigand ret <16 x i8> %or10 172*8424bf20SUlrich Weigand} 173*8424bf20SUlrich Weigand 174*8424bf20SUlrich Weiganddefine <16 x i8> @eval15(<16 x i8> returned %src1, <16 x i8> %src2, <16 x i8> %src3) { 175*8424bf20SUlrich Weigand; CHECK-LABEL: eval15: 176*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 177*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 178*8424bf20SUlrich Weigandentry: 179*8424bf20SUlrich Weigand ret <16 x i8> %src1 180*8424bf20SUlrich Weigand} 181*8424bf20SUlrich Weigand 182*8424bf20SUlrich Weiganddefine <16 x i8> @eval16(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 183*8424bf20SUlrich Weigand; CHECK-LABEL: eval16: 184*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 185*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 2 186*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 187*8424bf20SUlrich Weigandentry: 188*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 189*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 190*8424bf20SUlrich Weigand %and1 = and <16 x i8> %and, %src3 191*8424bf20SUlrich Weigand ret <16 x i8> %and1 192*8424bf20SUlrich Weigand} 193*8424bf20SUlrich Weigand 194*8424bf20SUlrich Weiganddefine <16 x i8> @eval17(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 195*8424bf20SUlrich Weigand; CHECK-LABEL: eval17: 196*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 197*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v24, %v28, %v26 198*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 199*8424bf20SUlrich Weigandentry: 200*8424bf20SUlrich Weigand %or4 = and <16 x i8> %src3, %src2 201*8424bf20SUlrich Weigand ret <16 x i8> %or4 202*8424bf20SUlrich Weigand} 203*8424bf20SUlrich Weigand 204*8424bf20SUlrich Weiganddefine <16 x i8> @eval18(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 205*8424bf20SUlrich Weigand; CHECK-LABEL: eval18: 206*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 207*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 6 208*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 209*8424bf20SUlrich Weigandentry: 210*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src1 211*8424bf20SUlrich Weigand %or5 = and <16 x i8> %0, %src2 212*8424bf20SUlrich Weigand ret <16 x i8> %or5 213*8424bf20SUlrich Weigand} 214*8424bf20SUlrich Weigand 215*8424bf20SUlrich Weiganddefine <16 x i8> @eval19(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 216*8424bf20SUlrich Weigand; CHECK-LABEL: eval19: 217*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 218*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 7 219*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 220*8424bf20SUlrich Weigandentry: 221*8424bf20SUlrich Weigand %and118 = or <16 x i8> %src3, %src1 222*8424bf20SUlrich Weigand %or8 = and <16 x i8> %and118, %src2 223*8424bf20SUlrich Weigand ret <16 x i8> %or8 224*8424bf20SUlrich Weigand} 225*8424bf20SUlrich Weigand 226*8424bf20SUlrich Weiganddefine <16 x i8> @eval20(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 227*8424bf20SUlrich Weigand; CHECK-LABEL: eval20: 228*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 229*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 6 230*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 231*8424bf20SUlrich Weigandentry: 232*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src1 233*8424bf20SUlrich Weigand %or5 = and <16 x i8> %0, %src3 234*8424bf20SUlrich Weigand ret <16 x i8> %or5 235*8424bf20SUlrich Weigand} 236*8424bf20SUlrich Weigand 237*8424bf20SUlrich Weiganddefine <16 x i8> @eval21(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 238*8424bf20SUlrich Weigand; CHECK-LABEL: eval21: 239*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 240*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 7 241*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 242*8424bf20SUlrich Weigandentry: 243*8424bf20SUlrich Weigand %or518 = or <16 x i8> %src2, %src1 244*8424bf20SUlrich Weigand %or8 = and <16 x i8> %or518, %src3 245*8424bf20SUlrich Weigand ret <16 x i8> %or8 246*8424bf20SUlrich Weigand} 247*8424bf20SUlrich Weigand 248*8424bf20SUlrich Weiganddefine <16 x i8> @eval22(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 249*8424bf20SUlrich Weigand; CHECK-LABEL: eval22: 250*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 251*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v26, %v24 252*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 253*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 254*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 255*8424bf20SUlrich Weigandentry: 256*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src1 257*8424bf20SUlrich Weigand %or5 = and <16 x i8> %0, %src3 258*8424bf20SUlrich Weigand %not7 = xor <16 x i8> %src3, splat(i8 -1) 259*8424bf20SUlrich Weigand %1 = and <16 x i8> %not7, %src1 260*8424bf20SUlrich Weigand %and8 = and <16 x i8> %1, %src2 261*8424bf20SUlrich Weigand %or9 = or <16 x i8> %and8, %or5 262*8424bf20SUlrich Weigand ret <16 x i8> %or9 263*8424bf20SUlrich Weigand} 264*8424bf20SUlrich Weigand 265*8424bf20SUlrich Weiganddefine <16 x i8> @eval23(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 266*8424bf20SUlrich Weigand; CHECK-LABEL: eval23: 267*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 268*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 6 269*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 31 270*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 271*8424bf20SUlrich Weigandentry: 272*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src1 273*8424bf20SUlrich Weigand %or5 = and <16 x i8> %0, %src3 274*8424bf20SUlrich Weigand %and6 = and <16 x i8> %src2, %src1 275*8424bf20SUlrich Weigand %or12 = or <16 x i8> %or5, %and6 276*8424bf20SUlrich Weigand ret <16 x i8> %or12 277*8424bf20SUlrich Weigand} 278*8424bf20SUlrich Weigand 279*8424bf20SUlrich Weiganddefine <16 x i8> @eval24(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 280*8424bf20SUlrich Weigand; CHECK-LABEL: eval24: 281*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 282*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v26 283*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 2 284*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 285*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 286*8424bf20SUlrich Weigandentry: 287*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 288*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 289*8424bf20SUlrich Weigand %and1 = and <16 x i8> %and, %src3 290*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 291*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 292*8424bf20SUlrich Weigand %and5 = and <16 x i8> %1, %src1 293*8424bf20SUlrich Weigand %or6 = or <16 x i8> %and5, %and1 294*8424bf20SUlrich Weigand ret <16 x i8> %or6 295*8424bf20SUlrich Weigand} 296*8424bf20SUlrich Weigand 297*8424bf20SUlrich Weiganddefine <16 x i8> @eval25(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 298*8424bf20SUlrich Weigand; CHECK-LABEL: eval25: 299*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 300*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v26 301*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v28, %v26 302*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 47 303*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 304*8424bf20SUlrich Weigandentry: 305*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 306*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 307*8424bf20SUlrich Weigand %and5 = and <16 x i8> %1, %src1 308*8424bf20SUlrich Weigand %2 = and <16 x i8> %src3, %src2 309*8424bf20SUlrich Weigand %or9 = or <16 x i8> %and5, %2 310*8424bf20SUlrich Weigand ret <16 x i8> %or9 311*8424bf20SUlrich Weigand} 312*8424bf20SUlrich Weigand 313*8424bf20SUlrich Weiganddefine <16 x i8> @eval26(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 314*8424bf20SUlrich Weigand; CHECK-LABEL: eval26: 315*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 316*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v26, %v24 317*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v24, %v28 318*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 319*8424bf20SUlrich Weigandentry: 320*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 321*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 322*8424bf20SUlrich Weigand %and1 = and <16 x i8> %and, %src3 323*8424bf20SUlrich Weigand %not4 = xor <16 x i8> %src3, splat(i8 -1) 324*8424bf20SUlrich Weigand %0 = and <16 x i8> %not4, %src1 325*8424bf20SUlrich Weigand %or10 = or <16 x i8> %and1, %0 326*8424bf20SUlrich Weigand ret <16 x i8> %or10 327*8424bf20SUlrich Weigand} 328*8424bf20SUlrich Weigand 329*8424bf20SUlrich Weiganddefine <16 x i8> @eval27(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 330*8424bf20SUlrich Weigand; CHECK-LABEL: eval27: 331*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 332*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v26, %v24 333*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 11 334*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 335*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 336*8424bf20SUlrich Weigandentry: 337*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 338*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 339*8424bf20SUlrich Weigand %and1 = and <16 x i8> %and, %src3 340*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 341*8424bf20SUlrich Weigand %and527 = or <16 x i8> %src3.not, %src2 342*8424bf20SUlrich Weigand %0 = and <16 x i8> %and527, %src1 343*8424bf20SUlrich Weigand %or13 = or <16 x i8> %0, %and1 344*8424bf20SUlrich Weigand ret <16 x i8> %or13 345*8424bf20SUlrich Weigand} 346*8424bf20SUlrich Weigand 347*8424bf20SUlrich Weiganddefine <16 x i8> @eval28(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 348*8424bf20SUlrich Weigand; CHECK-LABEL: eval28: 349*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 350*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v28, %v24 351*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v24, %v26 352*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 353*8424bf20SUlrich Weigandentry: 354*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 355*8424bf20SUlrich Weigand %0 = and <16 x i8> %not, %src3 356*8424bf20SUlrich Weigand %and1 = and <16 x i8> %0, %src2 357*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src2, splat(i8 -1) 358*8424bf20SUlrich Weigand %and3 = and <16 x i8> %not2, %src1 359*8424bf20SUlrich Weigand %or10 = or <16 x i8> %and1, %and3 360*8424bf20SUlrich Weigand ret <16 x i8> %or10 361*8424bf20SUlrich Weigand} 362*8424bf20SUlrich Weigand 363*8424bf20SUlrich Weiganddefine <16 x i8> @eval29(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 364*8424bf20SUlrich Weigand; CHECK-LABEL: eval29: 365*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 366*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v28, %v24, %v26 367*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 368*8424bf20SUlrich Weigandentry: 369*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src2, splat(i8 -1) 370*8424bf20SUlrich Weigand %and3 = and <16 x i8> %not2, %src1 371*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 372*8424bf20SUlrich Weigand %or13 = or <16 x i8> %0, %and3 373*8424bf20SUlrich Weigand ret <16 x i8> %or13 374*8424bf20SUlrich Weigand} 375*8424bf20SUlrich Weigand 376*8424bf20SUlrich Weiganddefine <16 x i8> @eval30(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 377*8424bf20SUlrich Weigand; CHECK-LABEL: eval30: 378*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 379*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v28, %v26 380*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 2 381*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 382*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 383*8424bf20SUlrich Weigandentry: 384*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 385*8424bf20SUlrich Weigand %0 = and <16 x i8> %not, %src2 386*8424bf20SUlrich Weigand %and1 = and <16 x i8> %0, %src3 387*8424bf20SUlrich Weigand %and328.demorgan = and <16 x i8> %src3, %src2 388*8424bf20SUlrich Weigand %and328 = xor <16 x i8> %and328.demorgan, splat(i8 -1) 389*8424bf20SUlrich Weigand %1 = and <16 x i8> %and328, %src1 390*8424bf20SUlrich Weigand %or14 = or <16 x i8> %1, %and1 391*8424bf20SUlrich Weigand ret <16 x i8> %or14 392*8424bf20SUlrich Weigand} 393*8424bf20SUlrich Weigand 394*8424bf20SUlrich Weiganddefine <16 x i8> @eval31(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 395*8424bf20SUlrich Weigand; CHECK-LABEL: eval31: 396*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 397*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v26, %v24 398*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v0, %v28, 31 399*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 400*8424bf20SUlrich Weigandentry: 401*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 402*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 403*8424bf20SUlrich Weigand %and1 = and <16 x i8> %and, %src3 404*8424bf20SUlrich Weigand %or17 = or <16 x i8> %and1, %src1 405*8424bf20SUlrich Weigand ret <16 x i8> %or17 406*8424bf20SUlrich Weigand} 407*8424bf20SUlrich Weigand 408*8424bf20SUlrich Weiganddefine <16 x i8> @eval32(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 409*8424bf20SUlrich Weigand; CHECK-LABEL: eval32: 410*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 411*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 8 412*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 413*8424bf20SUlrich Weigandentry: 414*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 415*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 416*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src2 417*8424bf20SUlrich Weigand ret <16 x i8> %and2 418*8424bf20SUlrich Weigand} 419*8424bf20SUlrich Weigand 420*8424bf20SUlrich Weiganddefine <16 x i8> @eval33(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 421*8424bf20SUlrich Weigand; CHECK-LABEL: eval33: 422*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 423*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 9 424*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 425*8424bf20SUlrich Weigandentry: 426*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src1, %src3 427*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 428*8424bf20SUlrich Weigand %or5 = and <16 x i8> %1, %src2 429*8424bf20SUlrich Weigand ret <16 x i8> %or5 430*8424bf20SUlrich Weigand} 431*8424bf20SUlrich Weigand 432*8424bf20SUlrich Weiganddefine <16 x i8> @eval34(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 433*8424bf20SUlrich Weigand; CHECK-LABEL: eval34: 434*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 435*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v24, %v26, %v28 436*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 437*8424bf20SUlrich Weigandentry: 438*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src3, splat(i8 -1) 439*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not1, %src2 440*8424bf20SUlrich Weigand ret <16 x i8> %or6 441*8424bf20SUlrich Weigand} 442*8424bf20SUlrich Weigand 443*8424bf20SUlrich Weiganddefine <16 x i8> @eval35(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 444*8424bf20SUlrich Weigand; CHECK-LABEL: eval35: 445*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 446*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 11 447*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 448*8424bf20SUlrich Weigandentry: 449*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 450*8424bf20SUlrich Weigand %and219 = or <16 x i8> %src3.not, %src1 451*8424bf20SUlrich Weigand %or9 = and <16 x i8> %and219, %src2 452*8424bf20SUlrich Weigand ret <16 x i8> %or9 453*8424bf20SUlrich Weigand} 454*8424bf20SUlrich Weigand 455*8424bf20SUlrich Weiganddefine <16 x i8> @eval36(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 456*8424bf20SUlrich Weigand; CHECK-LABEL: eval36: 457*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 458*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v24 459*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 460*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 461*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 462*8424bf20SUlrich Weigandentry: 463*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 464*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 465*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src2 466*8424bf20SUlrich Weigand %not3 = xor <16 x i8> %src2, splat(i8 -1) 467*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not3, %src1 468*8424bf20SUlrich Weigand %and5 = and <16 x i8> %and4, %src3 469*8424bf20SUlrich Weigand %or6 = or <16 x i8> %and2, %and5 470*8424bf20SUlrich Weigand ret <16 x i8> %or6 471*8424bf20SUlrich Weigand} 472*8424bf20SUlrich Weigand 473*8424bf20SUlrich Weiganddefine <16 x i8> @eval37(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 474*8424bf20SUlrich Weigand; CHECK-LABEL: eval37: 475*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 476*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v24 477*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v28, %v24 478*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 479*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 480*8424bf20SUlrich Weigandentry: 481*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 482*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 483*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src2 484*8424bf20SUlrich Weigand %2 = and <16 x i8> %src3, %src1 485*8424bf20SUlrich Weigand %or9 = or <16 x i8> %and2, %2 486*8424bf20SUlrich Weigand ret <16 x i8> %or9 487*8424bf20SUlrich Weigand} 488*8424bf20SUlrich Weigand 489*8424bf20SUlrich Weiganddefine <16 x i8> @eval38(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 490*8424bf20SUlrich Weigand; CHECK-LABEL: eval38: 491*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 492*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v24, %v26 493*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v26, %v28 494*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 495*8424bf20SUlrich Weigandentry: 496*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src3, splat(i8 -1) 497*8424bf20SUlrich Weigand %not3 = xor <16 x i8> %src2, splat(i8 -1) 498*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not3, %src1 499*8424bf20SUlrich Weigand %and5 = and <16 x i8> %and4, %src3 500*8424bf20SUlrich Weigand %0 = and <16 x i8> %not1, %src2 501*8424bf20SUlrich Weigand %or10 = or <16 x i8> %0, %and5 502*8424bf20SUlrich Weigand ret <16 x i8> %or10 503*8424bf20SUlrich Weigand} 504*8424bf20SUlrich Weigand 505*8424bf20SUlrich Weiganddefine <16 x i8> @eval39(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 506*8424bf20SUlrich Weigand; CHECK-LABEL: eval39: 507*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 508*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v24, %v26 509*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 11 510*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 511*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 512*8424bf20SUlrich Weigandentry: 513*8424bf20SUlrich Weigand %not3 = xor <16 x i8> %src2, splat(i8 -1) 514*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not3, %src1 515*8424bf20SUlrich Weigand %and5 = and <16 x i8> %and4, %src3 516*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 517*8424bf20SUlrich Weigand %and227 = or <16 x i8> %src3.not, %src1 518*8424bf20SUlrich Weigand %0 = and <16 x i8> %and227, %src2 519*8424bf20SUlrich Weigand %or13 = or <16 x i8> %0, %and5 520*8424bf20SUlrich Weigand ret <16 x i8> %or13 521*8424bf20SUlrich Weigand} 522*8424bf20SUlrich Weigand 523*8424bf20SUlrich Weiganddefine <16 x i8> @eval40(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 524*8424bf20SUlrich Weigand; CHECK-LABEL: eval40: 525*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 526*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 40 527*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 528*8424bf20SUlrich Weigandentry: 529*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src1 530*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src3, splat(i8 -1) 531*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 532*8424bf20SUlrich Weigand ret <16 x i8> %or7 533*8424bf20SUlrich Weigand} 534*8424bf20SUlrich Weigand 535*8424bf20SUlrich Weiganddefine <16 x i8> @eval41(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 536*8424bf20SUlrich Weigand; CHECK-LABEL: eval41: 537*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 538*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v26, %v24 539*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v26, %v24 540*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v1, %v0, %v28 541*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 542*8424bf20SUlrich Weigandentry: 543*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src1 544*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src3, splat(i8 -1) 545*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 546*8424bf20SUlrich Weigand %and8 = and <16 x i8> %src2, %src1 547*8424bf20SUlrich Weigand %and9 = and <16 x i8> %and8, %src3 548*8424bf20SUlrich Weigand %or10 = or <16 x i8> %or7, %and9 549*8424bf20SUlrich Weigand ret <16 x i8> %or10 550*8424bf20SUlrich Weigand} 551*8424bf20SUlrich Weigand 552*8424bf20SUlrich Weiganddefine <16 x i8> @eval42(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 553*8424bf20SUlrich Weigand; CHECK-LABEL: eval42: 554*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 555*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 42 556*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 557*8424bf20SUlrich Weigandentry: 558*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src3, splat(i8 -1) 559*8424bf20SUlrich Weigand %and1021 = or <16 x i8> %src2, %src1 560*8424bf20SUlrich Weigand %or11 = and <16 x i8> %and1021, %not1 561*8424bf20SUlrich Weigand ret <16 x i8> %or11 562*8424bf20SUlrich Weigand} 563*8424bf20SUlrich Weigand 564*8424bf20SUlrich Weiganddefine <16 x i8> @eval43(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 565*8424bf20SUlrich Weigand; CHECK-LABEL: eval43: 566*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 567*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v26, %v24 568*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v26, %v24 569*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 47 570*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 571*8424bf20SUlrich Weigandentry: 572*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src1 573*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src3, splat(i8 -1) 574*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 575*8424bf20SUlrich Weigand %and8 = and <16 x i8> %src2, %src1 576*8424bf20SUlrich Weigand %or14 = or <16 x i8> %or7, %and8 577*8424bf20SUlrich Weigand ret <16 x i8> %or14 578*8424bf20SUlrich Weigand} 579*8424bf20SUlrich Weigand 580*8424bf20SUlrich Weiganddefine <16 x i8> @eval44(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 581*8424bf20SUlrich Weigand; CHECK-LABEL: eval44: 582*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 583*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v28, %v24 584*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v24, %v26 585*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 586*8424bf20SUlrich Weigandentry: 587*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 588*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 589*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src2 590*8424bf20SUlrich Weigand %not3 = xor <16 x i8> %src2, splat(i8 -1) 591*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not3, %src1 592*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and2, %and4 593*8424bf20SUlrich Weigand ret <16 x i8> %or11 594*8424bf20SUlrich Weigand} 595*8424bf20SUlrich Weigand 596*8424bf20SUlrich Weiganddefine <16 x i8> @eval45(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 597*8424bf20SUlrich Weigand; CHECK-LABEL: eval45: 598*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 599*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v24 600*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 601*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 602*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 603*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 604*8424bf20SUlrich Weigandentry: 605*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 606*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 607*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src2 608*8424bf20SUlrich Weigand %not3 = xor <16 x i8> %src2, splat(i8 -1) 609*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not3, %src1 610*8424bf20SUlrich Weigand %and12 = and <16 x i8> %src2, %src1 611*8424bf20SUlrich Weigand %and13 = and <16 x i8> %and12, %src3 612*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and13, %and4 613*8424bf20SUlrich Weigand %or14 = or <16 x i8> %or11, %and2 614*8424bf20SUlrich Weigand ret <16 x i8> %or14 615*8424bf20SUlrich Weigand} 616*8424bf20SUlrich Weigand 617*8424bf20SUlrich Weiganddefine <16 x i8> @eval46(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 618*8424bf20SUlrich Weigand; CHECK-LABEL: eval46: 619*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 620*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v28, %v26 621*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 8 622*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 623*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 624*8424bf20SUlrich Weigandentry: 625*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 626*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 627*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src2 628*8424bf20SUlrich Weigand %and429.demorgan = and <16 x i8> %src3, %src2 629*8424bf20SUlrich Weigand %and429 = xor <16 x i8> %and429.demorgan, splat(i8 -1) 630*8424bf20SUlrich Weigand %2 = and <16 x i8> %and429, %src1 631*8424bf20SUlrich Weigand %or15 = or <16 x i8> %and2, %2 632*8424bf20SUlrich Weigand ret <16 x i8> %or15 633*8424bf20SUlrich Weigand} 634*8424bf20SUlrich Weigand 635*8424bf20SUlrich Weiganddefine <16 x i8> @eval47(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 636*8424bf20SUlrich Weigand; CHECK-LABEL: eval47: 637*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 638*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v24 639*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 47 640*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 641*8424bf20SUlrich Weigandentry: 642*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 643*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 644*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src2 645*8424bf20SUlrich Weigand %or18 = or <16 x i8> %and2, %src1 646*8424bf20SUlrich Weigand ret <16 x i8> %or18 647*8424bf20SUlrich Weigand} 648*8424bf20SUlrich Weigand 649*8424bf20SUlrich Weiganddefine <16 x i8> @eval48(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 650*8424bf20SUlrich Weigand; CHECK-LABEL: eval48: 651*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 652*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v24, %v26, %v24 653*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 654*8424bf20SUlrich Weigandentry: 655*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 656*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 657*8424bf20SUlrich Weigand ret <16 x i8> %and 658*8424bf20SUlrich Weigand} 659*8424bf20SUlrich Weigand 660*8424bf20SUlrich Weiganddefine <16 x i8> @eval49(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 661*8424bf20SUlrich Weigand; CHECK-LABEL: eval49: 662*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 663*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 11 664*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 665*8424bf20SUlrich Weigandentry: 666*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 667*8424bf20SUlrich Weigand %and819 = or <16 x i8> %not, %src3 668*8424bf20SUlrich Weigand %or9 = and <16 x i8> %and819, %src2 669*8424bf20SUlrich Weigand ret <16 x i8> %or9 670*8424bf20SUlrich Weigand} 671*8424bf20SUlrich Weigand 672*8424bf20SUlrich Weiganddefine <16 x i8> @eval50(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 673*8424bf20SUlrich Weigand; CHECK-LABEL: eval50: 674*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 675*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 14 676*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 677*8424bf20SUlrich Weigandentry: 678*8424bf20SUlrich Weigand %and920.demorgan = and <16 x i8> %src3, %src1 679*8424bf20SUlrich Weigand %and920 = xor <16 x i8> %and920.demorgan, splat(i8 -1) 680*8424bf20SUlrich Weigand %or10 = and <16 x i8> %and920, %src2 681*8424bf20SUlrich Weigand ret <16 x i8> %or10 682*8424bf20SUlrich Weigand} 683*8424bf20SUlrich Weigand 684*8424bf20SUlrich Weiganddefine <16 x i8> @eval51(<16 x i8> %src1, <16 x i8> returned %src2, <16 x i8> %src3) { 685*8424bf20SUlrich Weigand; CHECK-LABEL: eval51: 686*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 687*8424bf20SUlrich Weigand; CHECK-NEXT: vlr %v24, %v26 688*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 689*8424bf20SUlrich Weigandentry: 690*8424bf20SUlrich Weigand ret <16 x i8> %src2 691*8424bf20SUlrich Weigand} 692*8424bf20SUlrich Weigand 693*8424bf20SUlrich Weiganddefine <16 x i8> @eval52(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 694*8424bf20SUlrich Weigand; CHECK-LABEL: eval52: 695*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 696*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v28, %v26 697*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 698*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 699*8424bf20SUlrich Weigandentry: 700*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 701*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 702*8424bf20SUlrich Weigand %not7 = xor <16 x i8> %src2, splat(i8 -1) 703*8424bf20SUlrich Weigand %0 = and <16 x i8> %not7, %src3 704*8424bf20SUlrich Weigand %and9 = and <16 x i8> %0, %src1 705*8424bf20SUlrich Weigand %or10 = or <16 x i8> %and9, %and 706*8424bf20SUlrich Weigand ret <16 x i8> %or10 707*8424bf20SUlrich Weigand} 708*8424bf20SUlrich Weigand 709*8424bf20SUlrich Weiganddefine <16 x i8> @eval53(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 710*8424bf20SUlrich Weigand; CHECK-LABEL: eval53: 711*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 712*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v28, %v26, %v24 713*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 714*8424bf20SUlrich Weigandentry: 715*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 716*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 717*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src1 718*8424bf20SUlrich Weigand %or13 = or <16 x i8> %0, %and 719*8424bf20SUlrich Weigand ret <16 x i8> %or13 720*8424bf20SUlrich Weigand} 721*8424bf20SUlrich Weigand 722*8424bf20SUlrich Weiganddefine <16 x i8> @eval54(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 723*8424bf20SUlrich Weigand; CHECK-LABEL: eval54: 724*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 725*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v28, %v24 726*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 2 727*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 728*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 729*8424bf20SUlrich Weigandentry: 730*8424bf20SUlrich Weigand %not7 = xor <16 x i8> %src2, splat(i8 -1) 731*8424bf20SUlrich Weigand %and8 = and <16 x i8> %not7, %src1 732*8424bf20SUlrich Weigand %and9 = and <16 x i8> %and8, %src3 733*8424bf20SUlrich Weigand %and28.demorgan = and <16 x i8> %src3, %src1 734*8424bf20SUlrich Weigand %and28 = xor <16 x i8> %and28.demorgan, splat(i8 -1) 735*8424bf20SUlrich Weigand %0 = and <16 x i8> %and28, %src2 736*8424bf20SUlrich Weigand %or14 = or <16 x i8> %and9, %0 737*8424bf20SUlrich Weigand ret <16 x i8> %or14 738*8424bf20SUlrich Weigand} 739*8424bf20SUlrich Weigand 740*8424bf20SUlrich Weiganddefine <16 x i8> @eval55(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 741*8424bf20SUlrich Weigand; CHECK-LABEL: eval55: 742*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 743*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v24, %v26 744*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v0, %v28, 31 745*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 746*8424bf20SUlrich Weigandentry: 747*8424bf20SUlrich Weigand %not7 = xor <16 x i8> %src2, splat(i8 -1) 748*8424bf20SUlrich Weigand %and8 = and <16 x i8> %not7, %src1 749*8424bf20SUlrich Weigand %and9 = and <16 x i8> %and8, %src3 750*8424bf20SUlrich Weigand %or17 = or <16 x i8> %and9, %src2 751*8424bf20SUlrich Weigand ret <16 x i8> %or17 752*8424bf20SUlrich Weigand} 753*8424bf20SUlrich Weigand 754*8424bf20SUlrich Weiganddefine <16 x i8> @eval56(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 755*8424bf20SUlrich Weigand; CHECK-LABEL: eval56: 756*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 757*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v28, %v26 758*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 759*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 760*8424bf20SUlrich Weigandentry: 761*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 762*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 763*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 764*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 765*8424bf20SUlrich Weigand %and10 = and <16 x i8> %1, %src1 766*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and10, %and 767*8424bf20SUlrich Weigand ret <16 x i8> %or11 768*8424bf20SUlrich Weigand} 769*8424bf20SUlrich Weigand 770*8424bf20SUlrich Weiganddefine <16 x i8> @eval57(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 771*8424bf20SUlrich Weigand; CHECK-LABEL: eval57: 772*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 773*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v26 774*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 775*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 47 776*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 47 777*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 778*8424bf20SUlrich Weigandentry: 779*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 780*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 781*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 782*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 783*8424bf20SUlrich Weigand %and10 = and <16 x i8> %1, %src1 784*8424bf20SUlrich Weigand %and12 = and <16 x i8> %src2, %src1 785*8424bf20SUlrich Weigand %and13 = and <16 x i8> %and12, %src3 786*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and13, %and 787*8424bf20SUlrich Weigand %or14 = or <16 x i8> %or11, %and10 788*8424bf20SUlrich Weigand ret <16 x i8> %or14 789*8424bf20SUlrich Weigand} 790*8424bf20SUlrich Weigand 791*8424bf20SUlrich Weiganddefine <16 x i8> @eval58(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 792*8424bf20SUlrich Weigand; CHECK-LABEL: eval58: 793*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 794*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v28, %v28 795*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 796*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 797*8424bf20SUlrich Weigandentry: 798*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 799*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 800*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src3, splat(i8 -1) 801*8424bf20SUlrich Weigand %0 = and <16 x i8> %not1, %src1 802*8424bf20SUlrich Weigand %or15 = or <16 x i8> %0, %and 803*8424bf20SUlrich Weigand ret <16 x i8> %or15 804*8424bf20SUlrich Weigand} 805*8424bf20SUlrich Weigand 806*8424bf20SUlrich Weiganddefine <16 x i8> @eval59(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 807*8424bf20SUlrich Weigand; CHECK-LABEL: eval59: 808*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 809*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 810*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v26, %v24 811*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 812*8424bf20SUlrich Weigandentry: 813*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 814*8424bf20SUlrich Weigand %and = and <16 x i8> %not, %src2 815*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 816*8424bf20SUlrich Weigand %and1036 = or <16 x i8> %src3.not, %src2 817*8424bf20SUlrich Weigand %0 = and <16 x i8> %and1036, %src1 818*8424bf20SUlrich Weigand %or18 = or <16 x i8> %0, %and 819*8424bf20SUlrich Weigand ret <16 x i8> %or18 820*8424bf20SUlrich Weigand} 821*8424bf20SUlrich Weigand 822*8424bf20SUlrich Weiganddefine <16 x i8> @eval60(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 823*8424bf20SUlrich Weigand; CHECK-LABEL: eval60: 824*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 825*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v24, %v26, %v24 826*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 827*8424bf20SUlrich Weigandentry: 828*8424bf20SUlrich Weigand %or15 = xor <16 x i8> %src2, %src1 829*8424bf20SUlrich Weigand ret <16 x i8> %or15 830*8424bf20SUlrich Weigand} 831*8424bf20SUlrich Weigand 832*8424bf20SUlrich Weiganddefine <16 x i8> @eval61(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 833*8424bf20SUlrich Weigand; CHECK-LABEL: eval61: 834*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 835*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v0, %v24, %v28 836*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 61 837*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 838*8424bf20SUlrich Weigandentry: 839*8424bf20SUlrich Weigand %or15 = xor <16 x i8> %src2, %src1 840*8424bf20SUlrich Weigand %0 = and <16 x i8> %src1, %src3 841*8424bf20SUlrich Weigand %and17 = and <16 x i8> %0, %src2 842*8424bf20SUlrich Weigand %or18 = or <16 x i8> %and17, %or15 843*8424bf20SUlrich Weigand ret <16 x i8> %or18 844*8424bf20SUlrich Weigand} 845*8424bf20SUlrich Weigand 846*8424bf20SUlrich Weiganddefine <16 x i8> @eval62(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 847*8424bf20SUlrich Weigand; CHECK-LABEL: eval62: 848*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 849*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v24, %v28 850*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 61 851*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 852*8424bf20SUlrich Weigandentry: 853*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src3, splat(i8 -1) 854*8424bf20SUlrich Weigand %or15 = xor <16 x i8> %src2, %src1 855*8424bf20SUlrich Weigand %0 = and <16 x i8> %not1, %src1 856*8424bf20SUlrich Weigand %and18 = and <16 x i8> %0, %src2 857*8424bf20SUlrich Weigand %or19 = or <16 x i8> %and18, %or15 858*8424bf20SUlrich Weigand ret <16 x i8> %or19 859*8424bf20SUlrich Weigand} 860*8424bf20SUlrich Weigand 861*8424bf20SUlrich Weiganddefine <16 x i8> @eval63(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 862*8424bf20SUlrich Weigand; CHECK-LABEL: eval63: 863*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 864*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v24, %v26, %v24 865*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 866*8424bf20SUlrich Weigandentry: 867*8424bf20SUlrich Weigand %or22 = or <16 x i8> %src2, %src1 868*8424bf20SUlrich Weigand ret <16 x i8> %or22 869*8424bf20SUlrich Weigand} 870*8424bf20SUlrich Weigand 871*8424bf20SUlrich Weiganddefine <16 x i8> @eval64(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 872*8424bf20SUlrich Weigand; CHECK-LABEL: eval64: 873*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 874*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 8 875*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 876*8424bf20SUlrich Weigandentry: 877*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 878*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 879*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 880*8424bf20SUlrich Weigand ret <16 x i8> %and2 881*8424bf20SUlrich Weigand} 882*8424bf20SUlrich Weigand 883*8424bf20SUlrich Weiganddefine <16 x i8> @eval65(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 884*8424bf20SUlrich Weigand; CHECK-LABEL: eval65: 885*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 886*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 9 887*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 888*8424bf20SUlrich Weigandentry: 889*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src1, %src2 890*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 891*8424bf20SUlrich Weigand %or5 = and <16 x i8> %1, %src3 892*8424bf20SUlrich Weigand ret <16 x i8> %or5 893*8424bf20SUlrich Weigand} 894*8424bf20SUlrich Weigand 895*8424bf20SUlrich Weiganddefine <16 x i8> @eval66(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 896*8424bf20SUlrich Weigand; CHECK-LABEL: eval66: 897*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 898*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v26, %v24 899*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 900*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 901*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 902*8424bf20SUlrich Weigandentry: 903*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 904*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 905*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 906*8424bf20SUlrich Weigand %not4 = xor <16 x i8> %src3, splat(i8 -1) 907*8424bf20SUlrich Weigand %0 = and <16 x i8> %not4, %src1 908*8424bf20SUlrich Weigand %and5 = and <16 x i8> %0, %src2 909*8424bf20SUlrich Weigand %or6 = or <16 x i8> %and5, %and2 910*8424bf20SUlrich Weigand ret <16 x i8> %or6 911*8424bf20SUlrich Weigand} 912*8424bf20SUlrich Weigand 913*8424bf20SUlrich Weiganddefine <16 x i8> @eval67(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 914*8424bf20SUlrich Weigand; CHECK-LABEL: eval67: 915*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 916*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v26, %v24 917*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v26, %v24 918*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 919*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 920*8424bf20SUlrich Weigandentry: 921*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 922*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 923*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 924*8424bf20SUlrich Weigand %and3 = and <16 x i8> %src2, %src1 925*8424bf20SUlrich Weigand %or9 = or <16 x i8> %and2, %and3 926*8424bf20SUlrich Weigand ret <16 x i8> %or9 927*8424bf20SUlrich Weigand} 928*8424bf20SUlrich Weigand 929*8424bf20SUlrich Weiganddefine <16 x i8> @eval68(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 930*8424bf20SUlrich Weigand; CHECK-LABEL: eval68: 931*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 932*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v24, %v28, %v26 933*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 934*8424bf20SUlrich Weigandentry: 935*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 936*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not1, %src3 937*8424bf20SUlrich Weigand ret <16 x i8> %or6 938*8424bf20SUlrich Weigand} 939*8424bf20SUlrich Weigand 940*8424bf20SUlrich Weiganddefine <16 x i8> @eval69(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 941*8424bf20SUlrich Weigand; CHECK-LABEL: eval69: 942*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 943*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 11 944*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 945*8424bf20SUlrich Weigandentry: 946*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 947*8424bf20SUlrich Weigand %or620 = or <16 x i8> %not1, %src1 948*8424bf20SUlrich Weigand %or9 = and <16 x i8> %or620, %src3 949*8424bf20SUlrich Weigand ret <16 x i8> %or9 950*8424bf20SUlrich Weigand} 951*8424bf20SUlrich Weigand 952*8424bf20SUlrich Weiganddefine <16 x i8> @eval70(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 953*8424bf20SUlrich Weigand; CHECK-LABEL: eval70: 954*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 955*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v24, %v28 956*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 957*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 958*8424bf20SUlrich Weigandentry: 959*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 960*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not1, %src3 961*8424bf20SUlrich Weigand %not8 = xor <16 x i8> %src3, splat(i8 -1) 962*8424bf20SUlrich Weigand %0 = and <16 x i8> %not8, %src1 963*8424bf20SUlrich Weigand %and9 = and <16 x i8> %0, %src2 964*8424bf20SUlrich Weigand %or10 = or <16 x i8> %and9, %or6 965*8424bf20SUlrich Weigand ret <16 x i8> %or10 966*8424bf20SUlrich Weigand} 967*8424bf20SUlrich Weigand 968*8424bf20SUlrich Weiganddefine <16 x i8> @eval71(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 969*8424bf20SUlrich Weigand; CHECK-LABEL: eval71: 970*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 971*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v24, %v28, %v26 972*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 973*8424bf20SUlrich Weigandentry: 974*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 975*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not1, %src3 976*8424bf20SUlrich Weigand %and7 = and <16 x i8> %src2, %src1 977*8424bf20SUlrich Weigand %or13 = or <16 x i8> %or6, %and7 978*8424bf20SUlrich Weigand ret <16 x i8> %or13 979*8424bf20SUlrich Weigand} 980*8424bf20SUlrich Weigand 981*8424bf20SUlrich Weiganddefine <16 x i8> @eval72(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 982*8424bf20SUlrich Weigand; CHECK-LABEL: eval72: 983*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 984*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 40 985*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 986*8424bf20SUlrich Weigandentry: 987*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src1 988*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src2, splat(i8 -1) 989*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 990*8424bf20SUlrich Weigand ret <16 x i8> %or7 991*8424bf20SUlrich Weigand} 992*8424bf20SUlrich Weigand 993*8424bf20SUlrich Weiganddefine <16 x i8> @eval73(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 994*8424bf20SUlrich Weigand; CHECK-LABEL: eval73: 995*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 996*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v24 997*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 998*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 47 999*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1000*8424bf20SUlrich Weigandentry: 1001*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src1 1002*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src2, splat(i8 -1) 1003*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 1004*8424bf20SUlrich Weigand %and8 = and <16 x i8> %src2, %src1 1005*8424bf20SUlrich Weigand %and9 = and <16 x i8> %and8, %src3 1006*8424bf20SUlrich Weigand %or10 = or <16 x i8> %or7, %and9 1007*8424bf20SUlrich Weigand ret <16 x i8> %or10 1008*8424bf20SUlrich Weigand} 1009*8424bf20SUlrich Weigand 1010*8424bf20SUlrich Weiganddefine <16 x i8> @eval74(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1011*8424bf20SUlrich Weigand; CHECK-LABEL: eval74: 1012*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1013*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v24 1014*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v1, %v24, %v28 1015*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v1, %v0, %v26 1016*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1017*8424bf20SUlrich Weigandentry: 1018*8424bf20SUlrich Weigand %not5 = xor <16 x i8> %src3, splat(i8 -1) 1019*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src1 1020*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src2, splat(i8 -1) 1021*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 1022*8424bf20SUlrich Weigand %2 = and <16 x i8> %not5, %src1 1023*8424bf20SUlrich Weigand %and10 = and <16 x i8> %2, %src2 1024*8424bf20SUlrich Weigand %or11 = or <16 x i8> %or7, %and10 1025*8424bf20SUlrich Weigand ret <16 x i8> %or11 1026*8424bf20SUlrich Weigand} 1027*8424bf20SUlrich Weigand 1028*8424bf20SUlrich Weiganddefine <16 x i8> @eval75(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1029*8424bf20SUlrich Weigand; CHECK-LABEL: eval75: 1030*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1031*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v24 1032*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v24, %v0, %v26 1033*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1034*8424bf20SUlrich Weigandentry: 1035*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src1 1036*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src2, splat(i8 -1) 1037*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 1038*8424bf20SUlrich Weigand %and8 = and <16 x i8> %src2, %src1 1039*8424bf20SUlrich Weigand %or14 = or <16 x i8> %or7, %and8 1040*8424bf20SUlrich Weigand ret <16 x i8> %or14 1041*8424bf20SUlrich Weigand} 1042*8424bf20SUlrich Weigand 1043*8424bf20SUlrich Weiganddefine <16 x i8> @eval76(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1044*8424bf20SUlrich Weigand; CHECK-LABEL: eval76: 1045*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1046*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 8 1047*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 47 1048*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1049*8424bf20SUlrich Weigandentry: 1050*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1051*8424bf20SUlrich Weigand %0 = or <16 x i8> %src2, %src1 1052*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1053*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src3 1054*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not1, %src1 1055*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and2, %and4 1056*8424bf20SUlrich Weigand ret <16 x i8> %or11 1057*8424bf20SUlrich Weigand} 1058*8424bf20SUlrich Weigand 1059*8424bf20SUlrich Weiganddefine <16 x i8> @eval77(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1060*8424bf20SUlrich Weigand; CHECK-LABEL: eval77: 1061*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1062*8424bf20SUlrich Weigand; CHECK-NEXT: vgbm %v0, 65535 1063*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v26, %v24 1064*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 1065*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v28, %v0, %v1, 7 1066*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 47 1067*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1068*8424bf20SUlrich Weigandentry: 1069*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1070*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1071*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1072*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not1, %src1 1073*8424bf20SUlrich Weigand %and12 = and <16 x i8> %src2, %src1 1074*8424bf20SUlrich Weigand %and228 = or <16 x i8> %and, %and12 1075*8424bf20SUlrich Weigand %0 = and <16 x i8> %and228, %src3 1076*8424bf20SUlrich Weigand %or14 = or <16 x i8> %0, %and4 1077*8424bf20SUlrich Weigand ret <16 x i8> %or14 1078*8424bf20SUlrich Weigand} 1079*8424bf20SUlrich Weigand 1080*8424bf20SUlrich Weiganddefine <16 x i8> @eval78(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1081*8424bf20SUlrich Weigand; CHECK-LABEL: eval78: 1082*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1083*8424bf20SUlrich Weigand; CHECK-NEXT: vgbm %v0, 65535 1084*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v1, %v28, %v28 1085*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 1086*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v1, %v26, 11 1087*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 31 1088*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1089*8424bf20SUlrich Weigandentry: 1090*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1091*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1092*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1093*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 1094*8424bf20SUlrich Weigand %not5 = xor <16 x i8> %src3, splat(i8 -1) 1095*8424bf20SUlrich Weigand %and429 = or <16 x i8> %not5, %not1 1096*8424bf20SUlrich Weigand %0 = and <16 x i8> %and429, %src1 1097*8424bf20SUlrich Weigand %or15 = or <16 x i8> %0, %and2 1098*8424bf20SUlrich Weigand ret <16 x i8> %or15 1099*8424bf20SUlrich Weigand} 1100*8424bf20SUlrich Weigand 1101*8424bf20SUlrich Weiganddefine <16 x i8> @eval79(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1102*8424bf20SUlrich Weigand; CHECK-LABEL: eval79: 1103*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1104*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v26, %v24 1105*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 47 1106*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1107*8424bf20SUlrich Weigandentry: 1108*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 1109*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 1110*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 1111*8424bf20SUlrich Weigand %or18 = or <16 x i8> %and2, %src1 1112*8424bf20SUlrich Weigand ret <16 x i8> %or18 1113*8424bf20SUlrich Weigand} 1114*8424bf20SUlrich Weigand 1115*8424bf20SUlrich Weiganddefine <16 x i8> @eval80(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1116*8424bf20SUlrich Weigand; CHECK-LABEL: eval80: 1117*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1118*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v24, %v28, %v24 1119*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1120*8424bf20SUlrich Weigandentry: 1121*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1122*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not, %src3 1123*8424bf20SUlrich Weigand ret <16 x i8> %or6 1124*8424bf20SUlrich Weigand} 1125*8424bf20SUlrich Weigand 1126*8424bf20SUlrich Weiganddefine <16 x i8> @eval81(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1127*8424bf20SUlrich Weigand; CHECK-LABEL: eval81: 1128*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1129*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 11 1130*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1131*8424bf20SUlrich Weigandentry: 1132*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1133*8424bf20SUlrich Weigand %or620 = or <16 x i8> %not, %src2 1134*8424bf20SUlrich Weigand %or9 = and <16 x i8> %or620, %src3 1135*8424bf20SUlrich Weigand ret <16 x i8> %or9 1136*8424bf20SUlrich Weigand} 1137*8424bf20SUlrich Weigand 1138*8424bf20SUlrich Weiganddefine <16 x i8> @eval82(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1139*8424bf20SUlrich Weigand; CHECK-LABEL: eval82: 1140*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1141*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v26, %v28 1142*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 1143*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1144*8424bf20SUlrich Weigandentry: 1145*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1146*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not, %src3 1147*8424bf20SUlrich Weigand %not8 = xor <16 x i8> %src3, splat(i8 -1) 1148*8424bf20SUlrich Weigand %0 = and <16 x i8> %not8, %src2 1149*8424bf20SUlrich Weigand %and9 = and <16 x i8> %0, %src1 1150*8424bf20SUlrich Weigand %or10 = or <16 x i8> %and9, %or6 1151*8424bf20SUlrich Weigand ret <16 x i8> %or10 1152*8424bf20SUlrich Weigand} 1153*8424bf20SUlrich Weigand 1154*8424bf20SUlrich Weiganddefine <16 x i8> @eval83(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1155*8424bf20SUlrich Weigand; CHECK-LABEL: eval83: 1156*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1157*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v26, %v28, %v24 1158*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1159*8424bf20SUlrich Weigandentry: 1160*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1161*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not, %src3 1162*8424bf20SUlrich Weigand %and7 = and <16 x i8> %src2, %src1 1163*8424bf20SUlrich Weigand %or13 = or <16 x i8> %or6, %and7 1164*8424bf20SUlrich Weigand ret <16 x i8> %or13 1165*8424bf20SUlrich Weigand} 1166*8424bf20SUlrich Weigand 1167*8424bf20SUlrich Weiganddefine <16 x i8> @eval84(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1168*8424bf20SUlrich Weigand; CHECK-LABEL: eval84: 1169*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1170*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 14 1171*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1172*8424bf20SUlrich Weigandentry: 1173*8424bf20SUlrich Weigand %or621.demorgan = and <16 x i8> %src2, %src1 1174*8424bf20SUlrich Weigand %or621 = xor <16 x i8> %or621.demorgan, splat(i8 -1) 1175*8424bf20SUlrich Weigand %or10 = and <16 x i8> %or621, %src3 1176*8424bf20SUlrich Weigand ret <16 x i8> %or10 1177*8424bf20SUlrich Weigand} 1178*8424bf20SUlrich Weigand 1179*8424bf20SUlrich Weiganddefine <16 x i8> @eval85(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> returned %src3) { 1180*8424bf20SUlrich Weigand; CHECK-LABEL: eval85: 1181*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1182*8424bf20SUlrich Weigand; CHECK-NEXT: vlr %v24, %v28 1183*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1184*8424bf20SUlrich Weigandentry: 1185*8424bf20SUlrich Weigand ret <16 x i8> %src3 1186*8424bf20SUlrich Weigand} 1187*8424bf20SUlrich Weigand 1188*8424bf20SUlrich Weiganddefine <16 x i8> @eval86(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1189*8424bf20SUlrich Weigand; CHECK-LABEL: eval86: 1190*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1191*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v0, %v26, %v24 1192*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 1193*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 1194*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1195*8424bf20SUlrich Weigandentry: 1196*8424bf20SUlrich Weigand %or629.demorgan = and <16 x i8> %src2, %src1 1197*8424bf20SUlrich Weigand %or629 = xor <16 x i8> %or629.demorgan, splat(i8 -1) 1198*8424bf20SUlrich Weigand %or10 = and <16 x i8> %or629, %src3 1199*8424bf20SUlrich Weigand %not12 = xor <16 x i8> %src3, splat(i8 -1) 1200*8424bf20SUlrich Weigand %0 = and <16 x i8> %not12, %src1 1201*8424bf20SUlrich Weigand %and13 = and <16 x i8> %0, %src2 1202*8424bf20SUlrich Weigand %or14 = or <16 x i8> %and13, %or10 1203*8424bf20SUlrich Weigand ret <16 x i8> %or14 1204*8424bf20SUlrich Weigand} 1205*8424bf20SUlrich Weigand 1206*8424bf20SUlrich Weiganddefine <16 x i8> @eval87(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1207*8424bf20SUlrich Weigand; CHECK-LABEL: eval87: 1208*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1209*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 31 1210*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1211*8424bf20SUlrich Weigandentry: 1212*8424bf20SUlrich Weigand %and11 = and <16 x i8> %src2, %src1 1213*8424bf20SUlrich Weigand %or17 = or <16 x i8> %and11, %src3 1214*8424bf20SUlrich Weigand ret <16 x i8> %or17 1215*8424bf20SUlrich Weigand} 1216*8424bf20SUlrich Weigand 1217*8424bf20SUlrich Weiganddefine <16 x i8> @eval88(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1218*8424bf20SUlrich Weigand; CHECK-LABEL: eval88: 1219*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1220*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v28, %v26 1221*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 1222*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1223*8424bf20SUlrich Weigandentry: 1224*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1225*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not, %src3 1226*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 1227*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1228*8424bf20SUlrich Weigand %and10 = and <16 x i8> %1, %src1 1229*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and10, %or6 1230*8424bf20SUlrich Weigand ret <16 x i8> %or11 1231*8424bf20SUlrich Weigand} 1232*8424bf20SUlrich Weigand 1233*8424bf20SUlrich Weiganddefine <16 x i8> @eval89(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1234*8424bf20SUlrich Weigand; CHECK-LABEL: eval89: 1235*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1236*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v26 1237*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v28, %v26, %v24, 11 1238*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 47 1239*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1240*8424bf20SUlrich Weigandentry: 1241*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1242*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 1243*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1244*8424bf20SUlrich Weigand %and10 = and <16 x i8> %1, %src1 1245*8424bf20SUlrich Weigand %or629 = or <16 x i8> %not, %src2 1246*8424bf20SUlrich Weigand %2 = and <16 x i8> %or629, %src3 1247*8424bf20SUlrich Weigand %or14 = or <16 x i8> %and10, %2 1248*8424bf20SUlrich Weigand ret <16 x i8> %or14 1249*8424bf20SUlrich Weigand} 1250*8424bf20SUlrich Weigand 1251*8424bf20SUlrich Weiganddefine <16 x i8> @eval90(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1252*8424bf20SUlrich Weigand; CHECK-LABEL: eval90: 1253*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1254*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v24, %v28, %v24 1255*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1256*8424bf20SUlrich Weigandentry: 1257*8424bf20SUlrich Weigand %or15 = xor <16 x i8> %src3, %src1 1258*8424bf20SUlrich Weigand ret <16 x i8> %or15 1259*8424bf20SUlrich Weigand} 1260*8424bf20SUlrich Weigand 1261*8424bf20SUlrich Weiganddefine <16 x i8> @eval91(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1262*8424bf20SUlrich Weigand; CHECK-LABEL: eval91: 1263*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1264*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 1265*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 1266*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1267*8424bf20SUlrich Weigandentry: 1268*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1269*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not, %src3 1270*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 1271*8424bf20SUlrich Weigand %and1037 = or <16 x i8> %src3.not, %src2 1272*8424bf20SUlrich Weigand %0 = and <16 x i8> %and1037, %src1 1273*8424bf20SUlrich Weigand %or18 = or <16 x i8> %0, %or6 1274*8424bf20SUlrich Weigand ret <16 x i8> %or18 1275*8424bf20SUlrich Weigand} 1276*8424bf20SUlrich Weigand 1277*8424bf20SUlrich Weiganddefine <16 x i8> @eval92(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1278*8424bf20SUlrich Weigand; CHECK-LABEL: eval92: 1279*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1280*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v26, %v26 1281*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 1282*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1283*8424bf20SUlrich Weigandentry: 1284*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1285*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1286*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not, %src3 1287*8424bf20SUlrich Weigand %and8 = and <16 x i8> %not1, %src1 1288*8424bf20SUlrich Weigand %or15 = or <16 x i8> %or6, %and8 1289*8424bf20SUlrich Weigand ret <16 x i8> %or15 1290*8424bf20SUlrich Weigand} 1291*8424bf20SUlrich Weigand 1292*8424bf20SUlrich Weiganddefine <16 x i8> @eval93(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1293*8424bf20SUlrich Weigand; CHECK-LABEL: eval93: 1294*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1295*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 47 1296*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1297*8424bf20SUlrich Weigandentry: 1298*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1299*8424bf20SUlrich Weigand %and8 = and <16 x i8> %not1, %src1 1300*8424bf20SUlrich Weigand %or18 = or <16 x i8> %and8, %src3 1301*8424bf20SUlrich Weigand ret <16 x i8> %or18 1302*8424bf20SUlrich Weigand} 1303*8424bf20SUlrich Weigand 1304*8424bf20SUlrich Weiganddefine <16 x i8> @eval94(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1305*8424bf20SUlrich Weigand; CHECK-LABEL: eval94: 1306*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1307*8424bf20SUlrich Weigand; CHECK-NEXT: vnn %v0, %v28, %v26 1308*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v28, %v24 1309*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1310*8424bf20SUlrich Weigandentry: 1311*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1312*8424bf20SUlrich Weigand %or6 = and <16 x i8> %not, %src3 1313*8424bf20SUlrich Weigand %and838.demorgan = and <16 x i8> %src3, %src2 1314*8424bf20SUlrich Weigand %and838 = xor <16 x i8> %and838.demorgan, splat(i8 -1) 1315*8424bf20SUlrich Weigand %0 = and <16 x i8> %and838, %src1 1316*8424bf20SUlrich Weigand %or19 = or <16 x i8> %0, %or6 1317*8424bf20SUlrich Weigand ret <16 x i8> %or19 1318*8424bf20SUlrich Weigand} 1319*8424bf20SUlrich Weigand 1320*8424bf20SUlrich Weiganddefine <16 x i8> @eval95(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1321*8424bf20SUlrich Weigand; CHECK-LABEL: eval95: 1322*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1323*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v24, %v28, %v24 1324*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1325*8424bf20SUlrich Weigandentry: 1326*8424bf20SUlrich Weigand %or22 = or <16 x i8> %src3, %src1 1327*8424bf20SUlrich Weigand ret <16 x i8> %or22 1328*8424bf20SUlrich Weigand} 1329*8424bf20SUlrich Weigand 1330*8424bf20SUlrich Weiganddefine <16 x i8> @eval96(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1331*8424bf20SUlrich Weigand; CHECK-LABEL: eval96: 1332*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1333*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 40 1334*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1335*8424bf20SUlrich Weigandentry: 1336*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 1337*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src1, splat(i8 -1) 1338*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 1339*8424bf20SUlrich Weigand ret <16 x i8> %or7 1340*8424bf20SUlrich Weigand} 1341*8424bf20SUlrich Weigand 1342*8424bf20SUlrich Weiganddefine <16 x i8> @eval97(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1343*8424bf20SUlrich Weigand; CHECK-LABEL: eval97: 1344*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1345*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 1346*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 1347*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 1348*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1349*8424bf20SUlrich Weigandentry: 1350*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 1351*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src1, splat(i8 -1) 1352*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 1353*8424bf20SUlrich Weigand %and8 = and <16 x i8> %src2, %src1 1354*8424bf20SUlrich Weigand %and9 = and <16 x i8> %and8, %src3 1355*8424bf20SUlrich Weigand %or10 = or <16 x i8> %or7, %and9 1356*8424bf20SUlrich Weigand ret <16 x i8> %or10 1357*8424bf20SUlrich Weigand} 1358*8424bf20SUlrich Weigand 1359*8424bf20SUlrich Weiganddefine <16 x i8> @eval98(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1360*8424bf20SUlrich Weigand; CHECK-LABEL: eval98: 1361*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1362*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 1363*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 1364*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 1365*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1366*8424bf20SUlrich Weigandentry: 1367*8424bf20SUlrich Weigand %not5 = xor <16 x i8> %src3, splat(i8 -1) 1368*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 1369*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src1, splat(i8 -1) 1370*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 1371*8424bf20SUlrich Weigand %2 = and <16 x i8> %not5, %src1 1372*8424bf20SUlrich Weigand %and10 = and <16 x i8> %2, %src2 1373*8424bf20SUlrich Weigand %or11 = or <16 x i8> %or7, %and10 1374*8424bf20SUlrich Weigand ret <16 x i8> %or11 1375*8424bf20SUlrich Weigand} 1376*8424bf20SUlrich Weigand 1377*8424bf20SUlrich Weiganddefine <16 x i8> @eval99(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1378*8424bf20SUlrich Weigand; CHECK-LABEL: eval99: 1379*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1380*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 1381*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v26, %v0, %v24 1382*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1383*8424bf20SUlrich Weigandentry: 1384*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 1385*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src1, splat(i8 -1) 1386*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 1387*8424bf20SUlrich Weigand %and8 = and <16 x i8> %src2, %src1 1388*8424bf20SUlrich Weigand %or14 = or <16 x i8> %or7, %and8 1389*8424bf20SUlrich Weigand ret <16 x i8> %or14 1390*8424bf20SUlrich Weigand} 1391*8424bf20SUlrich Weigand 1392*8424bf20SUlrich Weiganddefine <16 x i8> @eval100(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1393*8424bf20SUlrich Weigand; CHECK-LABEL: eval100: 1394*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1395*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v28, %v24 1396*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 1397*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1398*8424bf20SUlrich Weigandentry: 1399*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1400*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 1401*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1402*8424bf20SUlrich Weigand %and6 = and <16 x i8> %1, %src2 1403*8424bf20SUlrich Weigand %2 = and <16 x i8> %not1, %src3 1404*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and6, %2 1405*8424bf20SUlrich Weigand ret <16 x i8> %or11 1406*8424bf20SUlrich Weigand} 1407*8424bf20SUlrich Weigand 1408*8424bf20SUlrich Weiganddefine <16 x i8> @eval101(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1409*8424bf20SUlrich Weigand; CHECK-LABEL: eval101: 1410*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1411*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v24 1412*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v28, %v24, %v26, 11 1413*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 47 1414*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1415*8424bf20SUlrich Weigandentry: 1416*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1417*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 1418*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1419*8424bf20SUlrich Weigand %and6 = and <16 x i8> %1, %src2 1420*8424bf20SUlrich Weigand %2 = or <16 x i8> %not1, %src1 1421*8424bf20SUlrich Weigand %3 = and <16 x i8> %2, %src3 1422*8424bf20SUlrich Weigand %or14 = or <16 x i8> %and6, %3 1423*8424bf20SUlrich Weigand ret <16 x i8> %or14 1424*8424bf20SUlrich Weigand} 1425*8424bf20SUlrich Weigand 1426*8424bf20SUlrich Weiganddefine <16 x i8> @eval102(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1427*8424bf20SUlrich Weigand; CHECK-LABEL: eval102: 1428*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1429*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v24, %v26, %v28 1430*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1431*8424bf20SUlrich Weigandentry: 1432*8424bf20SUlrich Weigand %or15 = xor <16 x i8> %src2, %src3 1433*8424bf20SUlrich Weigand ret <16 x i8> %or15 1434*8424bf20SUlrich Weigand} 1435*8424bf20SUlrich Weigand 1436*8424bf20SUlrich Weiganddefine <16 x i8> @eval103(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1437*8424bf20SUlrich Weigand; CHECK-LABEL: eval103: 1438*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1439*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v24, %v28 1440*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 1441*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1442*8424bf20SUlrich Weigandentry: 1443*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1444*8424bf20SUlrich Weigand %0 = and <16 x i8> %not1, %src3 1445*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 1446*8424bf20SUlrich Weigand %and637 = or <16 x i8> %src3.not, %src1 1447*8424bf20SUlrich Weigand %1 = and <16 x i8> %and637, %src2 1448*8424bf20SUlrich Weigand %or18 = or <16 x i8> %1, %0 1449*8424bf20SUlrich Weigand ret <16 x i8> %or18 1450*8424bf20SUlrich Weigand} 1451*8424bf20SUlrich Weigand 1452*8424bf20SUlrich Weiganddefine <16 x i8> @eval104(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1453*8424bf20SUlrich Weigand; CHECK-LABEL: eval104: 1454*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1455*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 1456*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v1, %v28, %v26 1457*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 1458*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1459*8424bf20SUlrich Weigandentry: 1460*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 1461*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src1, splat(i8 -1) 1462*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 1463*8424bf20SUlrich Weigand %2 = or <16 x i8> %src3, %src2 1464*8424bf20SUlrich Weigand %3 = xor <16 x i8> %2, splat(i8 -1) 1465*8424bf20SUlrich Weigand %and11 = and <16 x i8> %3, %src1 1466*8424bf20SUlrich Weigand %or12 = or <16 x i8> %or7, %and11 1467*8424bf20SUlrich Weigand ret <16 x i8> %or12 1468*8424bf20SUlrich Weigand} 1469*8424bf20SUlrich Weigand 1470*8424bf20SUlrich Weiganddefine <16 x i8> @eval105(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1471*8424bf20SUlrich Weigand; CHECK-LABEL: eval105: 1472*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1473*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 105 1474*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1475*8424bf20SUlrich Weigandentry: 1476*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 1477*8424bf20SUlrich Weigand %or15 = xor <16 x i8> %0, %src1 1478*8424bf20SUlrich Weigand ret <16 x i8> %or15 1479*8424bf20SUlrich Weigand} 1480*8424bf20SUlrich Weigand 1481*8424bf20SUlrich Weiganddefine <16 x i8> @eval106(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1482*8424bf20SUlrich Weigand; CHECK-LABEL: eval106: 1483*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1484*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v28, %v28 1485*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v1, %v28, %v26 1486*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v1, %v24 1487*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1488*8424bf20SUlrich Weigandentry: 1489*8424bf20SUlrich Weigand %not5 = xor <16 x i8> %src3, splat(i8 -1) 1490*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 1491*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src1, splat(i8 -1) 1492*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 1493*8424bf20SUlrich Weigand %2 = and <16 x i8> %not5, %src1 1494*8424bf20SUlrich Weigand %or16 = or <16 x i8> %or7, %2 1495*8424bf20SUlrich Weigand ret <16 x i8> %or16 1496*8424bf20SUlrich Weigand} 1497*8424bf20SUlrich Weigand 1498*8424bf20SUlrich Weiganddefine <16 x i8> @eval107(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1499*8424bf20SUlrich Weigand; CHECK-LABEL: eval107: 1500*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1501*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 1502*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v1, %v26, %v28 1503*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 1504*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1505*8424bf20SUlrich Weigandentry: 1506*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 1507*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src1, splat(i8 -1) 1508*8424bf20SUlrich Weigand %or7 = and <16 x i8> %0, %1 1509*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 1510*8424bf20SUlrich Weigand %and1137 = or <16 x i8> %src3.not, %src2 1511*8424bf20SUlrich Weigand %2 = and <16 x i8> %and1137, %src1 1512*8424bf20SUlrich Weigand %or19 = or <16 x i8> %or7, %2 1513*8424bf20SUlrich Weigand ret <16 x i8> %or19 1514*8424bf20SUlrich Weigand} 1515*8424bf20SUlrich Weigand 1516*8424bf20SUlrich Weiganddefine <16 x i8> @eval108(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1517*8424bf20SUlrich Weigand; CHECK-LABEL: eval108: 1518*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1519*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v24, %v24 1520*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1521*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v24 1522*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 47 1523*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 1524*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1525*8424bf20SUlrich Weigandentry: 1526*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1527*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1528*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1529*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 1530*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 1531*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1532*8424bf20SUlrich Weigand %and6 = and <16 x i8> %1, %src2 1533*8424bf20SUlrich Weigand %and9 = and <16 x i8> %not1, %src1 1534*8424bf20SUlrich Weigand %or7 = or <16 x i8> %and2, %and9 1535*8424bf20SUlrich Weigand %or16 = or <16 x i8> %or7, %and6 1536*8424bf20SUlrich Weigand ret <16 x i8> %or16 1537*8424bf20SUlrich Weigand} 1538*8424bf20SUlrich Weigand 1539*8424bf20SUlrich Weiganddefine <16 x i8> @eval109(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1540*8424bf20SUlrich Weigand; CHECK-LABEL: eval109: 1541*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1542*8424bf20SUlrich Weigand; CHECK-NEXT: vgbm %v0, 65535 1543*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v2, %v26, %v24 1544*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 1545*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v24 1546*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v28, %v0, %v2, 7 1547*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 47 1548*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 1549*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1550*8424bf20SUlrich Weigandentry: 1551*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1552*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1553*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1554*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 1555*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1556*8424bf20SUlrich Weigand %and6 = and <16 x i8> %1, %src2 1557*8424bf20SUlrich Weigand %and9 = and <16 x i8> %not1, %src1 1558*8424bf20SUlrich Weigand %and17 = and <16 x i8> %src2, %src1 1559*8424bf20SUlrich Weigand %and237 = or <16 x i8> %and, %and17 1560*8424bf20SUlrich Weigand %2 = and <16 x i8> %and237, %src3 1561*8424bf20SUlrich Weigand %or16 = or <16 x i8> %2, %and9 1562*8424bf20SUlrich Weigand %or19 = or <16 x i8> %or16, %and6 1563*8424bf20SUlrich Weigand ret <16 x i8> %or19 1564*8424bf20SUlrich Weigand} 1565*8424bf20SUlrich Weigand 1566*8424bf20SUlrich Weiganddefine <16 x i8> @eval110(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1567*8424bf20SUlrich Weigand; CHECK-LABEL: eval110: 1568*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1569*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v24, %v24 1570*8424bf20SUlrich Weigand; CHECK-NEXT: vgbm %v1, 65535 1571*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v2, %v28, %v24 1572*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1573*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v26, %v2, 47 1574*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v1, %v28, 190 1575*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 1576*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1577*8424bf20SUlrich Weigandentry: 1578*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1579*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1580*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1581*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 1582*8424bf20SUlrich Weigand %not5 = xor <16 x i8> %src3, splat(i8 -1) 1583*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 1584*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1585*8424bf20SUlrich Weigand %and6 = and <16 x i8> %1, %src2 1586*8424bf20SUlrich Weigand %or7 = or <16 x i8> %and6, %and2 1587*8424bf20SUlrich Weigand %and938 = or <16 x i8> %not5, %not1 1588*8424bf20SUlrich Weigand %2 = and <16 x i8> %and938, %src1 1589*8424bf20SUlrich Weigand %or20 = or <16 x i8> %or7, %2 1590*8424bf20SUlrich Weigand ret <16 x i8> %or20 1591*8424bf20SUlrich Weigand} 1592*8424bf20SUlrich Weigand 1593*8424bf20SUlrich Weiganddefine <16 x i8> @eval111(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1594*8424bf20SUlrich Weigand; CHECK-LABEL: eval111: 1595*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1596*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 111 1597*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1598*8424bf20SUlrich Weigandentry: 1599*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 1600*8424bf20SUlrich Weigand %or23 = or <16 x i8> %0, %src1 1601*8424bf20SUlrich Weigand ret <16 x i8> %or23 1602*8424bf20SUlrich Weigand} 1603*8424bf20SUlrich Weigand 1604*8424bf20SUlrich Weiganddefine <16 x i8> @eval112(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1605*8424bf20SUlrich Weigand; CHECK-LABEL: eval112: 1606*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1607*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 8 1608*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 47 1609*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1610*8424bf20SUlrich Weigandentry: 1611*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1612*8424bf20SUlrich Weigand %0 = or <16 x i8> %src2, %src1 1613*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1614*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src3 1615*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not, %src2 1616*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and2, %and4 1617*8424bf20SUlrich Weigand ret <16 x i8> %or11 1618*8424bf20SUlrich Weigand} 1619*8424bf20SUlrich Weigand 1620*8424bf20SUlrich Weiganddefine <16 x i8> @eval113(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1621*8424bf20SUlrich Weigand; CHECK-LABEL: eval113: 1622*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1623*8424bf20SUlrich Weigand; CHECK-NEXT: vgbm %v0, 65535 1624*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v26, %v24 1625*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 1626*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v28, %v0, %v1, 7 1627*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v26, %v24, 47 1628*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1629*8424bf20SUlrich Weigandentry: 1630*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1631*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1632*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1633*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not, %src2 1634*8424bf20SUlrich Weigand %and12 = and <16 x i8> %src2, %src1 1635*8424bf20SUlrich Weigand %and228 = or <16 x i8> %and, %and12 1636*8424bf20SUlrich Weigand %0 = and <16 x i8> %and228, %src3 1637*8424bf20SUlrich Weigand %or14 = or <16 x i8> %0, %and4 1638*8424bf20SUlrich Weigand ret <16 x i8> %or14 1639*8424bf20SUlrich Weigand} 1640*8424bf20SUlrich Weigand 1641*8424bf20SUlrich Weiganddefine <16 x i8> @eval114(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1642*8424bf20SUlrich Weigand; CHECK-LABEL: eval114: 1643*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1644*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v24, %v24 1645*8424bf20SUlrich Weigand; CHECK-NEXT: vgbm %v1, 65535 1646*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1647*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v1, %v28, 190 1648*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 31 1649*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1650*8424bf20SUlrich Weigandentry: 1651*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1652*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1653*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1654*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 1655*8424bf20SUlrich Weigand %not5 = xor <16 x i8> %src3, splat(i8 -1) 1656*8424bf20SUlrich Weigand %and429 = or <16 x i8> %not5, %not 1657*8424bf20SUlrich Weigand %0 = and <16 x i8> %and429, %src2 1658*8424bf20SUlrich Weigand %or15 = or <16 x i8> %and2, %0 1659*8424bf20SUlrich Weigand ret <16 x i8> %or15 1660*8424bf20SUlrich Weigand} 1661*8424bf20SUlrich Weigand 1662*8424bf20SUlrich Weiganddefine <16 x i8> @eval115(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1663*8424bf20SUlrich Weigand; CHECK-LABEL: eval115: 1664*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1665*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v26, %v24 1666*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 47 1667*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1668*8424bf20SUlrich Weigandentry: 1669*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 1670*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 1671*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 1672*8424bf20SUlrich Weigand %or18 = or <16 x i8> %and2, %src2 1673*8424bf20SUlrich Weigand ret <16 x i8> %or18 1674*8424bf20SUlrich Weigand} 1675*8424bf20SUlrich Weigand 1676*8424bf20SUlrich Weiganddefine <16 x i8> @eval116(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1677*8424bf20SUlrich Weigand; CHECK-LABEL: eval116: 1678*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1679*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v24, %v24 1680*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 1681*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1682*8424bf20SUlrich Weigandentry: 1683*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1684*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1685*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not, %src2 1686*8424bf20SUlrich Weigand %0 = and <16 x i8> %not1, %src3 1687*8424bf20SUlrich Weigand %or15 = or <16 x i8> %0, %and4 1688*8424bf20SUlrich Weigand ret <16 x i8> %or15 1689*8424bf20SUlrich Weigand} 1690*8424bf20SUlrich Weigand 1691*8424bf20SUlrich Weiganddefine <16 x i8> @eval117(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1692*8424bf20SUlrich Weigand; CHECK-LABEL: eval117: 1693*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1694*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 47 1695*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1696*8424bf20SUlrich Weigandentry: 1697*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1698*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not, %src2 1699*8424bf20SUlrich Weigand %or18 = or <16 x i8> %and4, %src3 1700*8424bf20SUlrich Weigand ret <16 x i8> %or18 1701*8424bf20SUlrich Weigand} 1702*8424bf20SUlrich Weigand 1703*8424bf20SUlrich Weiganddefine <16 x i8> @eval118(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1704*8424bf20SUlrich Weigand; CHECK-LABEL: eval118: 1705*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1706*8424bf20SUlrich Weigand; CHECK-NEXT: vnn %v0, %v28, %v24 1707*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v28, %v26 1708*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1709*8424bf20SUlrich Weigandentry: 1710*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1711*8424bf20SUlrich Weigand %0 = and <16 x i8> %not1, %src3 1712*8424bf20SUlrich Weigand %and438.demorgan = and <16 x i8> %src3, %src1 1713*8424bf20SUlrich Weigand %and438 = xor <16 x i8> %and438.demorgan, splat(i8 -1) 1714*8424bf20SUlrich Weigand %1 = and <16 x i8> %and438, %src2 1715*8424bf20SUlrich Weigand %or19 = or <16 x i8> %0, %1 1716*8424bf20SUlrich Weigand ret <16 x i8> %or19 1717*8424bf20SUlrich Weigand} 1718*8424bf20SUlrich Weigand 1719*8424bf20SUlrich Weiganddefine <16 x i8> @eval119(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1720*8424bf20SUlrich Weigand; CHECK-LABEL: eval119: 1721*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1722*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v24, %v28, %v26 1723*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1724*8424bf20SUlrich Weigandentry: 1725*8424bf20SUlrich Weigand %or22 = or <16 x i8> %src3, %src2 1726*8424bf20SUlrich Weigand ret <16 x i8> %or22 1727*8424bf20SUlrich Weigand} 1728*8424bf20SUlrich Weigand 1729*8424bf20SUlrich Weiganddefine <16 x i8> @eval120(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1730*8424bf20SUlrich Weigand; CHECK-LABEL: eval120: 1731*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1732*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v24, %v24 1733*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1734*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v26 1735*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 1736*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 1737*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1738*8424bf20SUlrich Weigandentry: 1739*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1740*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1741*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1742*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 1743*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not, %src2 1744*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and2, %and4 1745*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 1746*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1747*8424bf20SUlrich Weigand %and15 = and <16 x i8> %1, %src1 1748*8424bf20SUlrich Weigand %or16 = or <16 x i8> %or11, %and15 1749*8424bf20SUlrich Weigand ret <16 x i8> %or16 1750*8424bf20SUlrich Weigand} 1751*8424bf20SUlrich Weigand 1752*8424bf20SUlrich Weiganddefine <16 x i8> @eval121(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1753*8424bf20SUlrich Weigand; CHECK-LABEL: eval121: 1754*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1755*8424bf20SUlrich Weigand; CHECK-NEXT: vgbm %v0, 65535 1756*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v2, %v26, %v24 1757*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v0, %v26, 40 1758*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v26 1759*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v28, %v0, %v2, 7 1760*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 1761*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 1762*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1763*8424bf20SUlrich Weigandentry: 1764*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1765*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1766*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1767*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not, %src2 1768*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 1769*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1770*8424bf20SUlrich Weigand %and15 = and <16 x i8> %1, %src1 1771*8424bf20SUlrich Weigand %and17 = and <16 x i8> %src2, %src1 1772*8424bf20SUlrich Weigand %and237 = or <16 x i8> %and, %and17 1773*8424bf20SUlrich Weigand %2 = and <16 x i8> %and237, %src3 1774*8424bf20SUlrich Weigand %or16 = or <16 x i8> %2, %and4 1775*8424bf20SUlrich Weigand %or19 = or <16 x i8> %or16, %and15 1776*8424bf20SUlrich Weigand ret <16 x i8> %or19 1777*8424bf20SUlrich Weigand} 1778*8424bf20SUlrich Weigand 1779*8424bf20SUlrich Weiganddefine <16 x i8> @eval122(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1780*8424bf20SUlrich Weigand; CHECK-LABEL: eval122: 1781*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1782*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v24, %v24 1783*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1784*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 1785*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 47 1786*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1787*8424bf20SUlrich Weigandentry: 1788*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1789*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1790*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1791*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 1792*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not, %src2 1793*8424bf20SUlrich Weigand %not5 = xor <16 x i8> %src3, splat(i8 -1) 1794*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and2, %and4 1795*8424bf20SUlrich Weigand %0 = and <16 x i8> %not5, %src1 1796*8424bf20SUlrich Weigand %or20 = or <16 x i8> %or11, %0 1797*8424bf20SUlrich Weigand ret <16 x i8> %or20 1798*8424bf20SUlrich Weigand} 1799*8424bf20SUlrich Weigand 1800*8424bf20SUlrich Weiganddefine <16 x i8> @eval123(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1801*8424bf20SUlrich Weigand; CHECK-LABEL: eval123: 1802*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1803*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v24, %v24 1804*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1805*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v1, %v26, %v28 1806*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 1807*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 1808*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1809*8424bf20SUlrich Weigandentry: 1810*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1811*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1812*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1813*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 1814*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not, %src2 1815*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and2, %and4 1816*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 1817*8424bf20SUlrich Weigand %and1545 = or <16 x i8> %src3.not, %src2 1818*8424bf20SUlrich Weigand %0 = and <16 x i8> %and1545, %src1 1819*8424bf20SUlrich Weigand %or23 = or <16 x i8> %or11, %0 1820*8424bf20SUlrich Weigand ret <16 x i8> %or23 1821*8424bf20SUlrich Weigand} 1822*8424bf20SUlrich Weigand 1823*8424bf20SUlrich Weiganddefine <16 x i8> @eval124(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1824*8424bf20SUlrich Weigand; CHECK-LABEL: eval124: 1825*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1826*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v26, %v24 1827*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v1, %v24, %v26 1828*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 47 1829*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1830*8424bf20SUlrich Weigandentry: 1831*8424bf20SUlrich Weigand %0 = or <16 x i8> %src2, %src1 1832*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1833*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src3 1834*8424bf20SUlrich Weigand %or11 = xor <16 x i8> %src1, %src2 1835*8424bf20SUlrich Weigand %or20 = or <16 x i8> %or11, %and2 1836*8424bf20SUlrich Weigand ret <16 x i8> %or20 1837*8424bf20SUlrich Weigand} 1838*8424bf20SUlrich Weigand 1839*8424bf20SUlrich Weiganddefine <16 x i8> @eval125(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1840*8424bf20SUlrich Weigand; CHECK-LABEL: eval125: 1841*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1842*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 111 1843*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1844*8424bf20SUlrich Weigandentry: 1845*8424bf20SUlrich Weigand %or11 = xor <16 x i8> %src1, %src2 1846*8424bf20SUlrich Weigand %or23 = or <16 x i8> %or11, %src3 1847*8424bf20SUlrich Weigand ret <16 x i8> %or23 1848*8424bf20SUlrich Weigand} 1849*8424bf20SUlrich Weigand 1850*8424bf20SUlrich Weiganddefine <16 x i8> @eval126(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1851*8424bf20SUlrich Weigand; CHECK-LABEL: eval126: 1852*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1853*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v24, %v24 1854*8424bf20SUlrich Weigand; CHECK-NEXT: vgbm %v1, 65535 1855*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 2 1856*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 47 1857*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v1, %v28, 190 1858*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 1859*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1860*8424bf20SUlrich Weigandentry: 1861*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 1862*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 1863*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 1864*8424bf20SUlrich Weigand %and2 = and <16 x i8> %and, %src3 1865*8424bf20SUlrich Weigand %and4 = and <16 x i8> %not, %src2 1866*8424bf20SUlrich Weigand %not5 = xor <16 x i8> %src3, splat(i8 -1) 1867*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and2, %and4 1868*8424bf20SUlrich Weigand %and1346 = or <16 x i8> %not5, %not1 1869*8424bf20SUlrich Weigand %0 = and <16 x i8> %and1346, %src1 1870*8424bf20SUlrich Weigand %or24 = or <16 x i8> %or11, %0 1871*8424bf20SUlrich Weigand ret <16 x i8> %or24 1872*8424bf20SUlrich Weigand} 1873*8424bf20SUlrich Weigand 1874*8424bf20SUlrich Weiganddefine <16 x i8> @eval127(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1875*8424bf20SUlrich Weigand; CHECK-LABEL: eval127: 1876*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1877*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v28, %v26, %v24, 8 1878*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 127 1879*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1880*8424bf20SUlrich Weigandentry: 1881*8424bf20SUlrich Weigand %0 = or <16 x i8> %src2, %src1 1882*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 1883*8424bf20SUlrich Weigand %and2 = and <16 x i8> %1, %src3 1884*8424bf20SUlrich Weigand %2 = or <16 x i8> %and2, %src1 1885*8424bf20SUlrich Weigand %or27 = or <16 x i8> %2, %src2 1886*8424bf20SUlrich Weigand ret <16 x i8> %or27 1887*8424bf20SUlrich Weigand} 1888*8424bf20SUlrich Weigand 1889*8424bf20SUlrich Weiganddefine <16 x i8> @eval128(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1890*8424bf20SUlrich Weigand; CHECK-LABEL: eval128: 1891*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1892*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 128 1893*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1894*8424bf20SUlrich Weigandentry: 1895*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 1896*8424bf20SUlrich Weigand %and3.demorgan = or <16 x i8> %and.demorgan, %src3 1897*8424bf20SUlrich Weigand %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 1898*8424bf20SUlrich Weigand ret <16 x i8> %and3 1899*8424bf20SUlrich Weigand} 1900*8424bf20SUlrich Weigand 1901*8424bf20SUlrich Weiganddefine <16 x i8> @eval129(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1902*8424bf20SUlrich Weigand; CHECK-LABEL: eval129: 1903*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1904*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v26, %v24 1905*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v26, %v24 1906*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v28, %v0, 139 1907*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1908*8424bf20SUlrich Weigandentry: 1909*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 1910*8424bf20SUlrich Weigand %and3.demorgan = or <16 x i8> %and.demorgan, %src3 1911*8424bf20SUlrich Weigand %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 1912*8424bf20SUlrich Weigand %and4 = and <16 x i8> %src2, %src1 1913*8424bf20SUlrich Weigand %and5 = and <16 x i8> %and4, %src3 1914*8424bf20SUlrich Weigand %or6 = or <16 x i8> %and5, %and3 1915*8424bf20SUlrich Weigand ret <16 x i8> %or6 1916*8424bf20SUlrich Weigand} 1917*8424bf20SUlrich Weigand 1918*8424bf20SUlrich Weiganddefine <16 x i8> @eval130(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1919*8424bf20SUlrich Weigand; CHECK-LABEL: eval130: 1920*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1921*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 130 1922*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1923*8424bf20SUlrich Weigandentry: 1924*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src1 1925*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src3 1926*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 1927*8424bf20SUlrich Weigand ret <16 x i8> %or7 1928*8424bf20SUlrich Weigand} 1929*8424bf20SUlrich Weigand 1930*8424bf20SUlrich Weiganddefine <16 x i8> @eval131(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1931*8424bf20SUlrich Weigand; CHECK-LABEL: eval131: 1932*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1933*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v0, %v26, %v24 1934*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v1, %v26, %v24 1935*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v28, %v1, 139 1936*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1937*8424bf20SUlrich Weigandentry: 1938*8424bf20SUlrich Weigand %and4 = and <16 x i8> %src2, %src1 1939*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src1 1940*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src3 1941*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 1942*8424bf20SUlrich Weigand %and9 = and <16 x i8> %and4, %src3 1943*8424bf20SUlrich Weigand %or10 = or <16 x i8> %and9, %or7 1944*8424bf20SUlrich Weigand ret <16 x i8> %or10 1945*8424bf20SUlrich Weigand} 1946*8424bf20SUlrich Weigand 1947*8424bf20SUlrich Weiganddefine <16 x i8> @eval132(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1948*8424bf20SUlrich Weigand; CHECK-LABEL: eval132: 1949*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1950*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 130 1951*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1952*8424bf20SUlrich Weigandentry: 1953*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src1 1954*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src2 1955*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %1, splat(i8 -1) 1956*8424bf20SUlrich Weigand ret <16 x i8> %or7 1957*8424bf20SUlrich Weigand} 1958*8424bf20SUlrich Weigand 1959*8424bf20SUlrich Weiganddefine <16 x i8> @eval133(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1960*8424bf20SUlrich Weigand; CHECK-LABEL: eval133: 1961*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1962*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v24 1963*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 1964*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 143 1965*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1966*8424bf20SUlrich Weigandentry: 1967*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src1 1968*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src2 1969*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %1, splat(i8 -1) 1970*8424bf20SUlrich Weigand %and8 = and <16 x i8> %src2, %src1 1971*8424bf20SUlrich Weigand %and9 = and <16 x i8> %and8, %src3 1972*8424bf20SUlrich Weigand %or10 = or <16 x i8> %and9, %or7 1973*8424bf20SUlrich Weigand ret <16 x i8> %or10 1974*8424bf20SUlrich Weigand} 1975*8424bf20SUlrich Weigand 1976*8424bf20SUlrich Weiganddefine <16 x i8> @eval134(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1977*8424bf20SUlrich Weigand; CHECK-LABEL: eval134: 1978*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1979*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v24 1980*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v1, %v24, %v28 1981*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 139 1982*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 1983*8424bf20SUlrich Weigandentry: 1984*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 1985*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src1 1986*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src2 1987*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %1, splat(i8 -1) 1988*8424bf20SUlrich Weigand %2 = and <16 x i8> %not2, %src1 1989*8424bf20SUlrich Weigand %and10 = and <16 x i8> %2, %src2 1990*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and10, %or7 1991*8424bf20SUlrich Weigand ret <16 x i8> %or11 1992*8424bf20SUlrich Weigand} 1993*8424bf20SUlrich Weigand 1994*8424bf20SUlrich Weiganddefine <16 x i8> @eval135(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 1995*8424bf20SUlrich Weigand; CHECK-LABEL: eval135: 1996*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 1997*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v24 1998*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 139 1999*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2000*8424bf20SUlrich Weigandentry: 2001*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src1 2002*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src2 2003*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %1, splat(i8 -1) 2004*8424bf20SUlrich Weigand %and8 = and <16 x i8> %src2, %src1 2005*8424bf20SUlrich Weigand %or14 = or <16 x i8> %and8, %or7 2006*8424bf20SUlrich Weigand ret <16 x i8> %or14 2007*8424bf20SUlrich Weigand} 2008*8424bf20SUlrich Weigand 2009*8424bf20SUlrich Weiganddefine <16 x i8> @eval136(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2010*8424bf20SUlrich Weigand; CHECK-LABEL: eval136: 2011*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2012*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v24, %v28, %v26 2013*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2014*8424bf20SUlrich Weigandentry: 2015*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 2016*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 2017*8424bf20SUlrich Weigand ret <16 x i8> %1 2018*8424bf20SUlrich Weigand} 2019*8424bf20SUlrich Weigand 2020*8424bf20SUlrich Weiganddefine <16 x i8> @eval137(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2021*8424bf20SUlrich Weigand; CHECK-LABEL: eval137: 2022*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2023*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 137 2024*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2025*8424bf20SUlrich Weigandentry: 2026*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 2027*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 2028*8424bf20SUlrich Weigand %and9 = and <16 x i8> %src2, %src1 2029*8424bf20SUlrich Weigand %and10 = and <16 x i8> %and9, %src3 2030*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and10, %1 2031*8424bf20SUlrich Weigand ret <16 x i8> %or11 2032*8424bf20SUlrich Weigand} 2033*8424bf20SUlrich Weigand 2034*8424bf20SUlrich Weiganddefine <16 x i8> @eval138(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2035*8424bf20SUlrich Weigand; CHECK-LABEL: eval138: 2036*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2037*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 127 2038*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 174 2039*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2040*8424bf20SUlrich Weigandentry: 2041*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 2042*8424bf20SUlrich Weigand %0 = or <16 x i8> %src2, %src1 2043*8424bf20SUlrich Weigand %and3.demorgan = or <16 x i8> %0, %src3 2044*8424bf20SUlrich Weigand %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2045*8424bf20SUlrich Weigand %1 = and <16 x i8> %not2, %src1 2046*8424bf20SUlrich Weigand %or12 = or <16 x i8> %1, %and3 2047*8424bf20SUlrich Weigand ret <16 x i8> %or12 2048*8424bf20SUlrich Weigand} 2049*8424bf20SUlrich Weigand 2050*8424bf20SUlrich Weiganddefine <16 x i8> @eval139(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2051*8424bf20SUlrich Weigand; CHECK-LABEL: eval139: 2052*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2053*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v26, %v24 2054*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 11 2055*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 143 2056*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2057*8424bf20SUlrich Weigandentry: 2058*8424bf20SUlrich Weigand %0 = or <16 x i8> %src2, %src1 2059*8424bf20SUlrich Weigand %and3.demorgan = or <16 x i8> %0, %src3 2060*8424bf20SUlrich Weigand %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2061*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2062*8424bf20SUlrich Weigand %and729 = or <16 x i8> %src3.not, %src2 2063*8424bf20SUlrich Weigand %1 = and <16 x i8> %and729, %src1 2064*8424bf20SUlrich Weigand %or15 = or <16 x i8> %1, %and3 2065*8424bf20SUlrich Weigand ret <16 x i8> %or15 2066*8424bf20SUlrich Weigand} 2067*8424bf20SUlrich Weigand 2068*8424bf20SUlrich Weiganddefine <16 x i8> @eval140(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2069*8424bf20SUlrich Weigand; CHECK-LABEL: eval140: 2070*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2071*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 127 2072*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 174 2073*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2074*8424bf20SUlrich Weigandentry: 2075*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2076*8424bf20SUlrich Weigand %0 = or <16 x i8> %src1, %src3 2077*8424bf20SUlrich Weigand %and3.demorgan = or <16 x i8> %0, %src2 2078*8424bf20SUlrich Weigand %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2079*8424bf20SUlrich Weigand %and5 = and <16 x i8> %not1, %src1 2080*8424bf20SUlrich Weigand %or12 = or <16 x i8> %and5, %and3 2081*8424bf20SUlrich Weigand ret <16 x i8> %or12 2082*8424bf20SUlrich Weigand} 2083*8424bf20SUlrich Weigand 2084*8424bf20SUlrich Weiganddefine <16 x i8> @eval141(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2085*8424bf20SUlrich Weigand; CHECK-LABEL: eval141: 2086*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2087*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v26, %v24 2088*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 2089*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 2090*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 143 2091*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2092*8424bf20SUlrich Weigandentry: 2093*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2094*8424bf20SUlrich Weigand %0 = or <16 x i8> %src2, %src1 2095*8424bf20SUlrich Weigand %and3.demorgan = or <16 x i8> %0, %src3 2096*8424bf20SUlrich Weigand %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2097*8424bf20SUlrich Weigand %and5 = and <16 x i8> %not1, %src1 2098*8424bf20SUlrich Weigand %and13 = and <16 x i8> %src2, %src1 2099*8424bf20SUlrich Weigand %and14 = and <16 x i8> %and13, %src3 2100*8424bf20SUlrich Weigand %or12 = or <16 x i8> %and14, %and5 2101*8424bf20SUlrich Weigand %or15 = or <16 x i8> %or12, %and3 2102*8424bf20SUlrich Weigand ret <16 x i8> %or15 2103*8424bf20SUlrich Weigand} 2104*8424bf20SUlrich Weigand 2105*8424bf20SUlrich Weiganddefine <16 x i8> @eval142(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2106*8424bf20SUlrich Weigand; CHECK-LABEL: eval142: 2107*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2108*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v28, %v26 2109*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 127 2110*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 2111*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2112*8424bf20SUlrich Weigandentry: 2113*8424bf20SUlrich Weigand %0 = or <16 x i8> %src2, %src1 2114*8424bf20SUlrich Weigand %and3.demorgan = or <16 x i8> %0, %src3 2115*8424bf20SUlrich Weigand %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2116*8424bf20SUlrich Weigand %and530.demorgan = and <16 x i8> %src3, %src2 2117*8424bf20SUlrich Weigand %and530 = xor <16 x i8> %and530.demorgan, splat(i8 -1) 2118*8424bf20SUlrich Weigand %1 = and <16 x i8> %and530, %src1 2119*8424bf20SUlrich Weigand %or16 = or <16 x i8> %1, %and3 2120*8424bf20SUlrich Weigand ret <16 x i8> %or16 2121*8424bf20SUlrich Weigand} 2122*8424bf20SUlrich Weigand 2123*8424bf20SUlrich Weiganddefine <16 x i8> @eval143(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2124*8424bf20SUlrich Weigand; CHECK-LABEL: eval143: 2125*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2126*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 143 2127*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2128*8424bf20SUlrich Weigandentry: 2129*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 2130*8424bf20SUlrich Weigand %.not = xor <16 x i8> %0, splat(i8 -1) 2131*8424bf20SUlrich Weigand %or19 = or <16 x i8> %.not, %src1 2132*8424bf20SUlrich Weigand ret <16 x i8> %or19 2133*8424bf20SUlrich Weigand} 2134*8424bf20SUlrich Weigand 2135*8424bf20SUlrich Weiganddefine <16 x i8> @eval144(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2136*8424bf20SUlrich Weigand; CHECK-LABEL: eval144: 2137*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2138*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 130 2139*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2140*8424bf20SUlrich Weigandentry: 2141*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2142*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2143*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2144*8424bf20SUlrich Weigand ret <16 x i8> %or7 2145*8424bf20SUlrich Weigand} 2146*8424bf20SUlrich Weigand 2147*8424bf20SUlrich Weiganddefine <16 x i8> @eval145(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2148*8424bf20SUlrich Weigand; CHECK-LABEL: eval145: 2149*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2150*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 2151*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 2152*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 2153*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2154*8424bf20SUlrich Weigandentry: 2155*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2156*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2157*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2158*8424bf20SUlrich Weigand %and8 = and <16 x i8> %src2, %src1 2159*8424bf20SUlrich Weigand %and9 = and <16 x i8> %and8, %src3 2160*8424bf20SUlrich Weigand %or10 = or <16 x i8> %and9, %or7 2161*8424bf20SUlrich Weigand ret <16 x i8> %or10 2162*8424bf20SUlrich Weigand} 2163*8424bf20SUlrich Weigand 2164*8424bf20SUlrich Weiganddefine <16 x i8> @eval146(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2165*8424bf20SUlrich Weigand; CHECK-LABEL: eval146: 2166*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2167*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 2168*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 2169*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 2170*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2171*8424bf20SUlrich Weigandentry: 2172*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 2173*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2174*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2175*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2176*8424bf20SUlrich Weigand %1 = and <16 x i8> %not2, %src1 2177*8424bf20SUlrich Weigand %and10 = and <16 x i8> %1, %src2 2178*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and10, %or7 2179*8424bf20SUlrich Weigand ret <16 x i8> %or11 2180*8424bf20SUlrich Weigand} 2181*8424bf20SUlrich Weigand 2182*8424bf20SUlrich Weiganddefine <16 x i8> @eval147(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2183*8424bf20SUlrich Weigand; CHECK-LABEL: eval147: 2184*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2185*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 2186*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 139 2187*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2188*8424bf20SUlrich Weigandentry: 2189*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2190*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2191*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2192*8424bf20SUlrich Weigand %and8 = and <16 x i8> %src2, %src1 2193*8424bf20SUlrich Weigand %or14 = or <16 x i8> %and8, %or7 2194*8424bf20SUlrich Weigand ret <16 x i8> %or14 2195*8424bf20SUlrich Weigand} 2196*8424bf20SUlrich Weigand 2197*8424bf20SUlrich Weiganddefine <16 x i8> @eval148(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2198*8424bf20SUlrich Weigand; CHECK-LABEL: eval148: 2199*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2200*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 2201*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2202*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 2203*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2204*8424bf20SUlrich Weigandentry: 2205*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2206*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2207*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2208*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2209*8424bf20SUlrich Weigand %and9 = and <16 x i8> %not1, %src1 2210*8424bf20SUlrich Weigand %and10 = and <16 x i8> %and9, %src3 2211*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and10, %or7 2212*8424bf20SUlrich Weigand ret <16 x i8> %or11 2213*8424bf20SUlrich Weigand} 2214*8424bf20SUlrich Weigand 2215*8424bf20SUlrich Weiganddefine <16 x i8> @eval149(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2216*8424bf20SUlrich Weigand; CHECK-LABEL: eval149: 2217*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2218*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 2219*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v0, 139 2220*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2221*8424bf20SUlrich Weigandentry: 2222*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2223*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2224*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2225*8424bf20SUlrich Weigand %1 = and <16 x i8> %src3, %src1 2226*8424bf20SUlrich Weigand %or14 = or <16 x i8> %1, %or7 2227*8424bf20SUlrich Weigand ret <16 x i8> %or14 2228*8424bf20SUlrich Weigand} 2229*8424bf20SUlrich Weigand 2230*8424bf20SUlrich Weiganddefine <16 x i8> @eval150(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2231*8424bf20SUlrich Weigand; CHECK-LABEL: eval150: 2232*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2233*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2234*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2235*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 2 2236*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v2, %v0, 191 2237*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2238*8424bf20SUlrich Weigandentry: 2239*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2240*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 2241*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2242*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2243*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2244*8424bf20SUlrich Weigand %and9 = and <16 x i8> %not1, %src1 2245*8424bf20SUlrich Weigand %and10 = and <16 x i8> %and9, %src3 2246*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and10, %or7 2247*8424bf20SUlrich Weigand %1 = and <16 x i8> %not2, %src1 2248*8424bf20SUlrich Weigand %and14 = and <16 x i8> %1, %src2 2249*8424bf20SUlrich Weigand %or15 = or <16 x i8> %or11, %and14 2250*8424bf20SUlrich Weigand ret <16 x i8> %or15 2251*8424bf20SUlrich Weigand} 2252*8424bf20SUlrich Weigand 2253*8424bf20SUlrich Weiganddefine <16 x i8> @eval151(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2254*8424bf20SUlrich Weigand; CHECK-LABEL: eval151: 2255*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2256*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 2257*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2258*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 31 2259*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 2260*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2261*8424bf20SUlrich Weigandentry: 2262*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2263*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2264*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2265*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2266*8424bf20SUlrich Weigand %and9 = and <16 x i8> %not1, %src1 2267*8424bf20SUlrich Weigand %and10 = and <16 x i8> %and9, %src3 2268*8424bf20SUlrich Weigand %and12 = and <16 x i8> %src2, %src1 2269*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and10, %and12 2270*8424bf20SUlrich Weigand %or18 = or <16 x i8> %or11, %or7 2271*8424bf20SUlrich Weigand ret <16 x i8> %or18 2272*8424bf20SUlrich Weigand} 2273*8424bf20SUlrich Weigand 2274*8424bf20SUlrich Weiganddefine <16 x i8> @eval152(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2275*8424bf20SUlrich Weigand; CHECK-LABEL: eval152: 2276*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2277*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2278*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v0, 234 2279*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2280*8424bf20SUlrich Weigandentry: 2281*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2282*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2283*8424bf20SUlrich Weigand %1 = or <16 x i8> %src3, %src2 2284*8424bf20SUlrich Weigand %2 = and <16 x i8> %or7.demorgan, %1 2285*8424bf20SUlrich Weigand %or12 = xor <16 x i8> %2, splat(i8 -1) 2286*8424bf20SUlrich Weigand ret <16 x i8> %or12 2287*8424bf20SUlrich Weigand} 2288*8424bf20SUlrich Weigand 2289*8424bf20SUlrich Weiganddefine <16 x i8> @eval153(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2290*8424bf20SUlrich Weigand; CHECK-LABEL: eval153: 2291*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2292*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v26 2293*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2294*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v2, %v26, %v24, %v28, 1 2295*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 239 2296*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2297*8424bf20SUlrich Weigandentry: 2298*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2299*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2300*8424bf20SUlrich Weigand %1 = or <16 x i8> %src3, %src2 2301*8424bf20SUlrich Weigand %2 = and <16 x i8> %or7.demorgan, %1 2302*8424bf20SUlrich Weigand %or12 = xor <16 x i8> %2, splat(i8 -1) 2303*8424bf20SUlrich Weigand %and13 = and <16 x i8> %src2, %src1 2304*8424bf20SUlrich Weigand %and14 = and <16 x i8> %and13, %src3 2305*8424bf20SUlrich Weigand %or15 = or <16 x i8> %and14, %or12 2306*8424bf20SUlrich Weigand ret <16 x i8> %or15 2307*8424bf20SUlrich Weigand} 2308*8424bf20SUlrich Weigand 2309*8424bf20SUlrich Weiganddefine <16 x i8> @eval154(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2310*8424bf20SUlrich Weigand; CHECK-LABEL: eval154: 2311*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2312*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v26 2313*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2314*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 2 2315*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 239 2316*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2317*8424bf20SUlrich Weigandentry: 2318*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 2319*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2320*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2321*8424bf20SUlrich Weigand %1 = or <16 x i8> %src3, %src2 2322*8424bf20SUlrich Weigand %2 = and <16 x i8> %or7.demorgan, %1 2323*8424bf20SUlrich Weigand %or12 = xor <16 x i8> %2, splat(i8 -1) 2324*8424bf20SUlrich Weigand %3 = and <16 x i8> %not2, %src1 2325*8424bf20SUlrich Weigand %and15 = and <16 x i8> %3, %src2 2326*8424bf20SUlrich Weigand %or16 = or <16 x i8> %and15, %or12 2327*8424bf20SUlrich Weigand ret <16 x i8> %or16 2328*8424bf20SUlrich Weigand} 2329*8424bf20SUlrich Weigand 2330*8424bf20SUlrich Weiganddefine <16 x i8> @eval155(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2331*8424bf20SUlrich Weigand; CHECK-LABEL: eval155: 2332*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2333*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v26 2334*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v2, %v26, %v24 2335*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2336*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v2, %v0, %v1, 239 2337*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2338*8424bf20SUlrich Weigandentry: 2339*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2340*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2341*8424bf20SUlrich Weigand %1 = or <16 x i8> %src3, %src2 2342*8424bf20SUlrich Weigand %2 = and <16 x i8> %or7.demorgan, %1 2343*8424bf20SUlrich Weigand %or12 = xor <16 x i8> %2, splat(i8 -1) 2344*8424bf20SUlrich Weigand %and13 = and <16 x i8> %src2, %src1 2345*8424bf20SUlrich Weigand %or19 = or <16 x i8> %and13, %or12 2346*8424bf20SUlrich Weigand ret <16 x i8> %or19 2347*8424bf20SUlrich Weigand} 2348*8424bf20SUlrich Weigand 2349*8424bf20SUlrich Weiganddefine <16 x i8> @eval156(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2350*8424bf20SUlrich Weigand; CHECK-LABEL: eval156: 2351*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2352*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2353*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 174 2354*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2355*8424bf20SUlrich Weigandentry: 2356*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2357*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2358*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2359*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2360*8424bf20SUlrich Weigand %and9 = and <16 x i8> %not1, %src1 2361*8424bf20SUlrich Weigand %or16 = or <16 x i8> %and9, %or7 2362*8424bf20SUlrich Weigand ret <16 x i8> %or16 2363*8424bf20SUlrich Weigand} 2364*8424bf20SUlrich Weigand 2365*8424bf20SUlrich Weiganddefine <16 x i8> @eval157(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2366*8424bf20SUlrich Weigand; CHECK-LABEL: eval157: 2367*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2368*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v0, %v28, %v26 2369*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 2370*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 2371*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 2372*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2373*8424bf20SUlrich Weigandentry: 2374*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2375*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2376*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2377*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2378*8424bf20SUlrich Weigand %and9 = and <16 x i8> %not1, %src1 2379*8424bf20SUlrich Weigand %and17 = and <16 x i8> %src2, %src1 2380*8424bf20SUlrich Weigand %and18 = and <16 x i8> %and17, %src3 2381*8424bf20SUlrich Weigand %or16 = or <16 x i8> %and18, %and9 2382*8424bf20SUlrich Weigand %or19 = or <16 x i8> %or16, %or7 2383*8424bf20SUlrich Weigand ret <16 x i8> %or19 2384*8424bf20SUlrich Weigand} 2385*8424bf20SUlrich Weigand 2386*8424bf20SUlrich Weiganddefine <16 x i8> @eval158(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2387*8424bf20SUlrich Weigand; CHECK-LABEL: eval158: 2388*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2389*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v28, %v26 2390*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 111 2391*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 2392*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2393*8424bf20SUlrich Weigandentry: 2394*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2395*8424bf20SUlrich Weigand %or7.demorgan = or <16 x i8> %0, %src1 2396*8424bf20SUlrich Weigand %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1) 2397*8424bf20SUlrich Weigand %and938.demorgan = and <16 x i8> %src3, %src2 2398*8424bf20SUlrich Weigand %and938 = xor <16 x i8> %and938.demorgan, splat(i8 -1) 2399*8424bf20SUlrich Weigand %1 = and <16 x i8> %and938, %src1 2400*8424bf20SUlrich Weigand %or20 = or <16 x i8> %1, %or7 2401*8424bf20SUlrich Weigand ret <16 x i8> %or20 2402*8424bf20SUlrich Weigand} 2403*8424bf20SUlrich Weigand 2404*8424bf20SUlrich Weiganddefine <16 x i8> @eval159(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2405*8424bf20SUlrich Weigand; CHECK-LABEL: eval159: 2406*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2407*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v26, %v28, 159 2408*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2409*8424bf20SUlrich Weigandentry: 2410*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src3 2411*8424bf20SUlrich Weigand %.not = xor <16 x i8> %0, splat(i8 -1) 2412*8424bf20SUlrich Weigand %or23 = or <16 x i8> %.not, %src1 2413*8424bf20SUlrich Weigand ret <16 x i8> %or23 2414*8424bf20SUlrich Weigand} 2415*8424bf20SUlrich Weigand 2416*8424bf20SUlrich Weiganddefine <16 x i8> @eval160(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2417*8424bf20SUlrich Weigand; CHECK-LABEL: eval160: 2418*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2419*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v24, %v28, %v24 2420*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2421*8424bf20SUlrich Weigandentry: 2422*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 2423*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 2424*8424bf20SUlrich Weigand ret <16 x i8> %1 2425*8424bf20SUlrich Weigand} 2426*8424bf20SUlrich Weigand 2427*8424bf20SUlrich Weiganddefine <16 x i8> @eval161(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2428*8424bf20SUlrich Weigand; CHECK-LABEL: eval161: 2429*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2430*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 137 2431*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2432*8424bf20SUlrich Weigandentry: 2433*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 2434*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 2435*8424bf20SUlrich Weigand %and9 = and <16 x i8> %src2, %src1 2436*8424bf20SUlrich Weigand %and10 = and <16 x i8> %and9, %src3 2437*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and10, %1 2438*8424bf20SUlrich Weigand ret <16 x i8> %or11 2439*8424bf20SUlrich Weigand} 2440*8424bf20SUlrich Weigand 2441*8424bf20SUlrich Weiganddefine <16 x i8> @eval162(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2442*8424bf20SUlrich Weigand; CHECK-LABEL: eval162: 2443*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2444*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v28, %v24, %v26, 127 2445*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 174 2446*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2447*8424bf20SUlrich Weigandentry: 2448*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 2449*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 2450*8424bf20SUlrich Weigand %and3.demorgan = or <16 x i8> %0, %src2 2451*8424bf20SUlrich Weigand %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2452*8424bf20SUlrich Weigand %1 = and <16 x i8> %not2, %src2 2453*8424bf20SUlrich Weigand %or12 = or <16 x i8> %1, %and3 2454*8424bf20SUlrich Weigand ret <16 x i8> %or12 2455*8424bf20SUlrich Weigand} 2456*8424bf20SUlrich Weigand 2457*8424bf20SUlrich Weiganddefine <16 x i8> @eval163(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2458*8424bf20SUlrich Weigand; CHECK-LABEL: eval163: 2459*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2460*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v26, %v24 2461*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 11 2462*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v28, 143 2463*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2464*8424bf20SUlrich Weigandentry: 2465*8424bf20SUlrich Weigand %0 = or <16 x i8> %src2, %src1 2466*8424bf20SUlrich Weigand %and3.demorgan = or <16 x i8> %0, %src3 2467*8424bf20SUlrich Weigand %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1) 2468*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2469*8424bf20SUlrich Weigand %and729 = or <16 x i8> %src3.not, %src1 2470*8424bf20SUlrich Weigand %1 = and <16 x i8> %and729, %src2 2471*8424bf20SUlrich Weigand %or15 = or <16 x i8> %1, %and3 2472*8424bf20SUlrich Weigand ret <16 x i8> %or15 2473*8424bf20SUlrich Weigand} 2474*8424bf20SUlrich Weigand 2475*8424bf20SUlrich Weiganddefine <16 x i8> @eval164(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2476*8424bf20SUlrich Weigand; CHECK-LABEL: eval164: 2477*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2478*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v24 2479*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v1, %v28, %v24 2480*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 234 2481*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2482*8424bf20SUlrich Weigandentry: 2483*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 2484*8424bf20SUlrich Weigand %1 = xor <16 x i8> %src3, %src1 2485*8424bf20SUlrich Weigand %2 = or <16 x i8> %1, %src2 2486*8424bf20SUlrich Weigand %3 = and <16 x i8> %0, %2 2487*8424bf20SUlrich Weigand %or12 = xor <16 x i8> %3, splat(i8 -1) 2488*8424bf20SUlrich Weigand ret <16 x i8> %or12 2489*8424bf20SUlrich Weigand} 2490*8424bf20SUlrich Weigand 2491*8424bf20SUlrich Weiganddefine <16 x i8> @eval165(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2492*8424bf20SUlrich Weigand; CHECK-LABEL: eval165: 2493*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2494*8424bf20SUlrich Weigand; CHECK-NEXT: vnx %v24, %v28, %v24 2495*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2496*8424bf20SUlrich Weigandentry: 2497*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src1 2498*8424bf20SUlrich Weigand %or15 = xor <16 x i8> %0, splat(i8 -1) 2499*8424bf20SUlrich Weigand ret <16 x i8> %or15 2500*8424bf20SUlrich Weigand} 2501*8424bf20SUlrich Weigand 2502*8424bf20SUlrich Weiganddefine <16 x i8> @eval166(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2503*8424bf20SUlrich Weigand; CHECK-LABEL: eval166: 2504*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2505*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v24 2506*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 2507*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v2, %v26, %v28, %v24, 111 2508*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v2, 239 2509*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2510*8424bf20SUlrich Weigandentry: 2511*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 2512*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 2513*8424bf20SUlrich Weigand %1 = and <16 x i8> %not2, %src1 2514*8424bf20SUlrich Weigand %and15 = and <16 x i8> %1, %src2 2515*8424bf20SUlrich Weigand %2 = xor <16 x i8> %src3, %src1 2516*8424bf20SUlrich Weigand %3 = or <16 x i8> %2, %src2 2517*8424bf20SUlrich Weigand %4 = and <16 x i8> %0, %3 2518*8424bf20SUlrich Weigand %or12 = xor <16 x i8> %4, splat(i8 -1) 2519*8424bf20SUlrich Weigand %or16 = or <16 x i8> %and15, %or12 2520*8424bf20SUlrich Weigand ret <16 x i8> %or16 2521*8424bf20SUlrich Weigand} 2522*8424bf20SUlrich Weigand 2523*8424bf20SUlrich Weiganddefine <16 x i8> @eval167(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2524*8424bf20SUlrich Weigand; CHECK-LABEL: eval167: 2525*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2526*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 2 2527*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v26, %v24, 31 2528*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v28, %v24, 143 2529*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2530*8424bf20SUlrich Weigandentry: 2531*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2532*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 2533*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 2534*8424bf20SUlrich Weigand %and10 = and <16 x i8> %not1, %src1 2535*8424bf20SUlrich Weigand %and11 = and <16 x i8> %and10, %src3 2536*8424bf20SUlrich Weigand %and13 = and <16 x i8> %src2, %src1 2537*8424bf20SUlrich Weigand %or8 = or <16 x i8> %and11, %and13 2538*8424bf20SUlrich Weigand %or19 = or <16 x i8> %or8, %1 2539*8424bf20SUlrich Weigand ret <16 x i8> %or19 2540*8424bf20SUlrich Weigand} 2541*8424bf20SUlrich Weigand 2542*8424bf20SUlrich Weiganddefine <16 x i8> @eval168(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2543*8424bf20SUlrich Weigand; CHECK-LABEL: eval168: 2544*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2545*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 168 2546*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2547*8424bf20SUlrich Weigandentry: 2548*8424bf20SUlrich Weigand %0 = and <16 x i8> %src2, %src1 2549*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src3 2550*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 2551*8424bf20SUlrich Weigand ret <16 x i8> %or13 2552*8424bf20SUlrich Weigand} 2553*8424bf20SUlrich Weigand 2554*8424bf20SUlrich Weiganddefine <16 x i8> @eval169(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2555*8424bf20SUlrich Weigand; CHECK-LABEL: eval169: 2556*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2557*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 169 2558*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2559*8424bf20SUlrich Weigandentry: 2560*8424bf20SUlrich Weigand %0 = and <16 x i8> %src2, %src1 2561*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, %src3 2562*8424bf20SUlrich Weigand %or16 = xor <16 x i8> %1, splat(i8 -1) 2563*8424bf20SUlrich Weigand ret <16 x i8> %or16 2564*8424bf20SUlrich Weigand} 2565*8424bf20SUlrich Weigand 2566*8424bf20SUlrich Weiganddefine <16 x i8> @eval170(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2567*8424bf20SUlrich Weigand; CHECK-LABEL: eval170: 2568*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2569*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v24, %v28, %v28 2570*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2571*8424bf20SUlrich Weigandentry: 2572*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 2573*8424bf20SUlrich Weigand ret <16 x i8> %not2 2574*8424bf20SUlrich Weigand} 2575*8424bf20SUlrich Weigand 2576*8424bf20SUlrich Weiganddefine <16 x i8> @eval171(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2577*8424bf20SUlrich Weigand; CHECK-LABEL: eval171: 2578*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2579*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 2580*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 139 2581*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2582*8424bf20SUlrich Weigandentry: 2583*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 2584*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 2585*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2586*8424bf20SUlrich Weigand %and1238 = or <16 x i8> %src3.not, %src2 2587*8424bf20SUlrich Weigand %2 = and <16 x i8> %and1238, %src1 2588*8424bf20SUlrich Weigand %or20 = or <16 x i8> %2, %1 2589*8424bf20SUlrich Weigand ret <16 x i8> %or20 2590*8424bf20SUlrich Weigand} 2591*8424bf20SUlrich Weigand 2592*8424bf20SUlrich Weiganddefine <16 x i8> @eval172(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2593*8424bf20SUlrich Weigand; CHECK-LABEL: eval172: 2594*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2595*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v24 2596*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 174 2597*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2598*8424bf20SUlrich Weigandentry: 2599*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2600*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 2601*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 2602*8424bf20SUlrich Weigand %and10 = and <16 x i8> %not1, %src1 2603*8424bf20SUlrich Weigand %or17 = or <16 x i8> %and10, %1 2604*8424bf20SUlrich Weigand ret <16 x i8> %or17 2605*8424bf20SUlrich Weigand} 2606*8424bf20SUlrich Weigand 2607*8424bf20SUlrich Weiganddefine <16 x i8> @eval173(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2608*8424bf20SUlrich Weigand; CHECK-LABEL: eval173: 2609*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2610*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v26, %v24, %v28, 1 2611*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v24, %v26, 47 2612*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v28, %v24, 143 2613*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2614*8424bf20SUlrich Weigandentry: 2615*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2616*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 2617*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 2618*8424bf20SUlrich Weigand %and10 = and <16 x i8> %not1, %src1 2619*8424bf20SUlrich Weigand %and18 = and <16 x i8> %src2, %src1 2620*8424bf20SUlrich Weigand %and19 = and <16 x i8> %and18, %src3 2621*8424bf20SUlrich Weigand %or8 = or <16 x i8> %and19, %and10 2622*8424bf20SUlrich Weigand %or20 = or <16 x i8> %or8, %1 2623*8424bf20SUlrich Weigand ret <16 x i8> %or20 2624*8424bf20SUlrich Weigand} 2625*8424bf20SUlrich Weigand 2626*8424bf20SUlrich Weiganddefine <16 x i8> @eval174(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2627*8424bf20SUlrich Weigand; CHECK-LABEL: eval174: 2628*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2629*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v24 2630*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v28, %v26 2631*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 2632*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2633*8424bf20SUlrich Weigandentry: 2634*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 2635*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 2636*8424bf20SUlrich Weigand %and1039.demorgan = and <16 x i8> %src3, %src2 2637*8424bf20SUlrich Weigand %and1039 = xor <16 x i8> %and1039.demorgan, splat(i8 -1) 2638*8424bf20SUlrich Weigand %2 = and <16 x i8> %and1039, %src1 2639*8424bf20SUlrich Weigand %or21 = or <16 x i8> %2, %1 2640*8424bf20SUlrich Weigand ret <16 x i8> %or21 2641*8424bf20SUlrich Weigand} 2642*8424bf20SUlrich Weigand 2643*8424bf20SUlrich Weiganddefine <16 x i8> @eval175(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2644*8424bf20SUlrich Weigand; CHECK-LABEL: eval175: 2645*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2646*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v24, %v24, %v28 2647*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2648*8424bf20SUlrich Weigandentry: 2649*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2650*8424bf20SUlrich Weigand %or24 = or <16 x i8> %src3.not, %src1 2651*8424bf20SUlrich Weigand ret <16 x i8> %or24 2652*8424bf20SUlrich Weigand} 2653*8424bf20SUlrich Weigand 2654*8424bf20SUlrich Weiganddefine <16 x i8> @eval176(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2655*8424bf20SUlrich Weigand; CHECK-LABEL: eval176: 2656*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2657*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 138 2658*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2659*8424bf20SUlrich Weigandentry: 2660*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2661*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2662*8424bf20SUlrich Weigand %and522 = or <16 x i8> %src3.not, %src2 2663*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and522, %not 2664*8424bf20SUlrich Weigand ret <16 x i8> %or12 2665*8424bf20SUlrich Weigand} 2666*8424bf20SUlrich Weigand 2667*8424bf20SUlrich Weiganddefine <16 x i8> @eval177(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2668*8424bf20SUlrich Weigand; CHECK-LABEL: eval177: 2669*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2670*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 2671*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 2672*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 2673*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2674*8424bf20SUlrich Weigandentry: 2675*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2676*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2677*8424bf20SUlrich Weigand %and529 = or <16 x i8> %src3.not, %src2 2678*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and529, %not 2679*8424bf20SUlrich Weigand %and13 = and <16 x i8> %src2, %src1 2680*8424bf20SUlrich Weigand %and14 = and <16 x i8> %and13, %src3 2681*8424bf20SUlrich Weigand %or15 = or <16 x i8> %or12, %and14 2682*8424bf20SUlrich Weigand ret <16 x i8> %or15 2683*8424bf20SUlrich Weigand} 2684*8424bf20SUlrich Weigand 2685*8424bf20SUlrich Weiganddefine <16 x i8> @eval178(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2686*8424bf20SUlrich Weigand; CHECK-LABEL: eval178: 2687*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2688*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v26, %v24 2689*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 138 2690*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v1, %v28, 47 2691*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2692*8424bf20SUlrich Weigandentry: 2693*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2694*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 2695*8424bf20SUlrich Weigand %and530 = or <16 x i8> %not2, %src2 2696*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and530, %not 2697*8424bf20SUlrich Weigand %0 = and <16 x i8> %src2, %src1 2698*8424bf20SUlrich Weigand %and15 = and <16 x i8> %0, %not2 2699*8424bf20SUlrich Weigand %or16 = or <16 x i8> %or12, %and15 2700*8424bf20SUlrich Weigand ret <16 x i8> %or16 2701*8424bf20SUlrich Weigand} 2702*8424bf20SUlrich Weigand 2703*8424bf20SUlrich Weiganddefine <16 x i8> @eval179(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2704*8424bf20SUlrich Weigand; CHECK-LABEL: eval179: 2705*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2706*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 2707*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v26, %v0, %v24 2708*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2709*8424bf20SUlrich Weigandentry: 2710*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2711*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2712*8424bf20SUlrich Weigand %and537 = or <16 x i8> %src3.not, %src2 2713*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and537, %not 2714*8424bf20SUlrich Weigand %and13 = and <16 x i8> %src2, %src1 2715*8424bf20SUlrich Weigand %or19 = or <16 x i8> %or12, %and13 2716*8424bf20SUlrich Weigand ret <16 x i8> %or19 2717*8424bf20SUlrich Weigand} 2718*8424bf20SUlrich Weigand 2719*8424bf20SUlrich Weiganddefine <16 x i8> @eval180(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2720*8424bf20SUlrich Weigand; CHECK-LABEL: eval180: 2721*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2722*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 2723*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2724*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 2725*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2726*8424bf20SUlrich Weigandentry: 2727*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2728*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2729*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2730*8424bf20SUlrich Weigand %and530 = or <16 x i8> %src3.not, %src2 2731*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and530, %not 2732*8424bf20SUlrich Weigand %and14 = and <16 x i8> %not1, %src1 2733*8424bf20SUlrich Weigand %and15 = and <16 x i8> %and14, %src3 2734*8424bf20SUlrich Weigand %or16 = or <16 x i8> %or12, %and15 2735*8424bf20SUlrich Weigand ret <16 x i8> %or16 2736*8424bf20SUlrich Weigand} 2737*8424bf20SUlrich Weigand 2738*8424bf20SUlrich Weiganddefine <16 x i8> @eval181(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2739*8424bf20SUlrich Weigand; CHECK-LABEL: eval181: 2740*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2741*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 2742*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v28, %v0, %v24 2743*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2744*8424bf20SUlrich Weigandentry: 2745*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2746*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2747*8424bf20SUlrich Weigand %and537 = or <16 x i8> %src3.not, %src2 2748*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and537, %not 2749*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src1 2750*8424bf20SUlrich Weigand %or19 = or <16 x i8> %or12, %0 2751*8424bf20SUlrich Weigand ret <16 x i8> %or19 2752*8424bf20SUlrich Weigand} 2753*8424bf20SUlrich Weigand 2754*8424bf20SUlrich Weiganddefine <16 x i8> @eval182(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2755*8424bf20SUlrich Weigand; CHECK-LABEL: eval182: 2756*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2757*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 2758*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2759*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 2760*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v1, %v26, %v24 2761*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v1, %v28, 47 2762*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2763*8424bf20SUlrich Weigandentry: 2764*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2765*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2766*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 2767*8424bf20SUlrich Weigand %and538 = or <16 x i8> %not2, %src2 2768*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and538, %not 2769*8424bf20SUlrich Weigand %and14 = and <16 x i8> %not1, %src1 2770*8424bf20SUlrich Weigand %and15 = and <16 x i8> %and14, %src3 2771*8424bf20SUlrich Weigand %or16 = or <16 x i8> %or12, %and15 2772*8424bf20SUlrich Weigand %0 = and <16 x i8> %src2, %src1 2773*8424bf20SUlrich Weigand %and19 = and <16 x i8> %0, %not2 2774*8424bf20SUlrich Weigand %or20 = or <16 x i8> %or16, %and19 2775*8424bf20SUlrich Weigand ret <16 x i8> %or20 2776*8424bf20SUlrich Weigand} 2777*8424bf20SUlrich Weigand 2778*8424bf20SUlrich Weiganddefine <16 x i8> @eval183(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2779*8424bf20SUlrich Weigand; CHECK-LABEL: eval183: 2780*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2781*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 2782*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 2783*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v1, %v26, %v24, 31 2784*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 2785*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2786*8424bf20SUlrich Weigandentry: 2787*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2788*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2789*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2790*8424bf20SUlrich Weigand %and545 = or <16 x i8> %src3.not, %src2 2791*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and545, %not 2792*8424bf20SUlrich Weigand %and14 = and <16 x i8> %not1, %src1 2793*8424bf20SUlrich Weigand %and15 = and <16 x i8> %and14, %src3 2794*8424bf20SUlrich Weigand %and17 = and <16 x i8> %src2, %src1 2795*8424bf20SUlrich Weigand %or16 = or <16 x i8> %and15, %and17 2796*8424bf20SUlrich Weigand %or23 = or <16 x i8> %or16, %or12 2797*8424bf20SUlrich Weigand ret <16 x i8> %or23 2798*8424bf20SUlrich Weigand} 2799*8424bf20SUlrich Weigand 2800*8424bf20SUlrich Weiganddefine <16 x i8> @eval184(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2801*8424bf20SUlrich Weigand; CHECK-LABEL: eval184: 2802*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2803*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 2804*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v1, %v28, %v26 2805*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 2806*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2807*8424bf20SUlrich Weigandentry: 2808*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2809*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2810*8424bf20SUlrich Weigand %and531 = or <16 x i8> %src3.not, %src2 2811*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and531, %not 2812*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 2813*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 2814*8424bf20SUlrich Weigand %and16 = and <16 x i8> %1, %src1 2815*8424bf20SUlrich Weigand %or17 = or <16 x i8> %or12, %and16 2816*8424bf20SUlrich Weigand ret <16 x i8> %or17 2817*8424bf20SUlrich Weigand} 2818*8424bf20SUlrich Weigand 2819*8424bf20SUlrich Weiganddefine <16 x i8> @eval185(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2820*8424bf20SUlrich Weigand; CHECK-LABEL: eval185: 2821*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2822*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 2823*8424bf20SUlrich Weigand; CHECK-NEXT: vnx %v1, %v28, %v26 2824*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 2825*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2826*8424bf20SUlrich Weigandentry: 2827*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2828*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2829*8424bf20SUlrich Weigand %and538 = or <16 x i8> %src3.not, %src2 2830*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and538, %not 2831*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 2832*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 2833*8424bf20SUlrich Weigand %or17 = and <16 x i8> %1, %src1 2834*8424bf20SUlrich Weigand %or20 = or <16 x i8> %or17, %or12 2835*8424bf20SUlrich Weigand ret <16 x i8> %or20 2836*8424bf20SUlrich Weigand} 2837*8424bf20SUlrich Weigand 2838*8424bf20SUlrich Weiganddefine <16 x i8> @eval186(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2839*8424bf20SUlrich Weigand; CHECK-LABEL: eval186: 2840*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2841*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v28, %v28 2842*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v1, %v26, %v28 2843*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v1, %v24 2844*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2845*8424bf20SUlrich Weigandentry: 2846*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2847*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 2848*8424bf20SUlrich Weigand %and539 = or <16 x i8> %not2, %src2 2849*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and539, %not 2850*8424bf20SUlrich Weigand %0 = and <16 x i8> %not2, %src1 2851*8424bf20SUlrich Weigand %or21 = or <16 x i8> %or12, %0 2852*8424bf20SUlrich Weigand ret <16 x i8> %or21 2853*8424bf20SUlrich Weigand} 2854*8424bf20SUlrich Weigand 2855*8424bf20SUlrich Weiganddefine <16 x i8> @eval187(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2856*8424bf20SUlrich Weigand; CHECK-LABEL: eval187: 2857*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2858*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v24, %v26, %v28 2859*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2860*8424bf20SUlrich Weigandentry: 2861*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2862*8424bf20SUlrich Weigand %and546 = or <16 x i8> %src3.not, %src2 2863*8424bf20SUlrich Weigand ret <16 x i8> %and546 2864*8424bf20SUlrich Weigand} 2865*8424bf20SUlrich Weigand 2866*8424bf20SUlrich Weiganddefine <16 x i8> @eval188(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2867*8424bf20SUlrich Weigand; CHECK-LABEL: eval188: 2868*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2869*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v26, %v26 2870*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v1, %v26, %v28 2871*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v0, %v1, %v24 2872*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2873*8424bf20SUlrich Weigandentry: 2874*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2875*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2876*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2877*8424bf20SUlrich Weigand %and539 = or <16 x i8> %src3.not, %src2 2878*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and539, %not 2879*8424bf20SUlrich Weigand %and14 = and <16 x i8> %not1, %src1 2880*8424bf20SUlrich Weigand %or21 = or <16 x i8> %or12, %and14 2881*8424bf20SUlrich Weigand ret <16 x i8> %or21 2882*8424bf20SUlrich Weigand} 2883*8424bf20SUlrich Weigand 2884*8424bf20SUlrich Weiganddefine <16 x i8> @eval189(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2885*8424bf20SUlrich Weigand; CHECK-LABEL: eval189: 2886*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2887*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 2888*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 2889*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v1, %v24, %v26, 47 2890*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 47 2891*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2892*8424bf20SUlrich Weigandentry: 2893*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2894*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2895*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2896*8424bf20SUlrich Weigand %and546 = or <16 x i8> %src3.not, %src2 2897*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and546, %not 2898*8424bf20SUlrich Weigand %and14 = and <16 x i8> %not1, %src1 2899*8424bf20SUlrich Weigand %and22 = and <16 x i8> %src2, %src1 2900*8424bf20SUlrich Weigand %and23 = and <16 x i8> %and22, %src3 2901*8424bf20SUlrich Weigand %or21 = or <16 x i8> %and23, %and14 2902*8424bf20SUlrich Weigand %or24 = or <16 x i8> %or21, %or12 2903*8424bf20SUlrich Weigand ret <16 x i8> %or24 2904*8424bf20SUlrich Weigand} 2905*8424bf20SUlrich Weigand 2906*8424bf20SUlrich Weiganddefine <16 x i8> @eval190(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2907*8424bf20SUlrich Weigand; CHECK-LABEL: eval190: 2908*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2909*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v26, %v28 2910*8424bf20SUlrich Weigand; CHECK-NEXT: vnn %v1, %v28, %v26 2911*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 2912*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2913*8424bf20SUlrich Weigandentry: 2914*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2915*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2916*8424bf20SUlrich Weigand %and547 = or <16 x i8> %src3.not, %src2 2917*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and547, %not 2918*8424bf20SUlrich Weigand %and1448.demorgan = and <16 x i8> %src3, %src2 2919*8424bf20SUlrich Weigand %and1448 = xor <16 x i8> %and1448.demorgan, splat(i8 -1) 2920*8424bf20SUlrich Weigand %0 = and <16 x i8> %and1448, %src1 2921*8424bf20SUlrich Weigand %or25 = or <16 x i8> %or12, %0 2922*8424bf20SUlrich Weigand ret <16 x i8> %or25 2923*8424bf20SUlrich Weigand} 2924*8424bf20SUlrich Weigand 2925*8424bf20SUlrich Weiganddefine <16 x i8> @eval191(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2926*8424bf20SUlrich Weigand; CHECK-LABEL: eval191: 2927*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2928*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 191 2929*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2930*8424bf20SUlrich Weigandentry: 2931*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 2932*8424bf20SUlrich Weigand %and554 = or <16 x i8> %src2, %src1 2933*8424bf20SUlrich Weigand %or28 = or <16 x i8> %and554, %src3.not 2934*8424bf20SUlrich Weigand ret <16 x i8> %or28 2935*8424bf20SUlrich Weigand} 2936*8424bf20SUlrich Weigand 2937*8424bf20SUlrich Weiganddefine <16 x i8> @eval192(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2938*8424bf20SUlrich Weigand; CHECK-LABEL: eval192: 2939*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2940*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v24, %v26, %v24 2941*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2942*8424bf20SUlrich Weigandentry: 2943*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 2944*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 2945*8424bf20SUlrich Weigand ret <16 x i8> %and 2946*8424bf20SUlrich Weigand} 2947*8424bf20SUlrich Weigand 2948*8424bf20SUlrich Weiganddefine <16 x i8> @eval193(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2949*8424bf20SUlrich Weigand; CHECK-LABEL: eval193: 2950*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2951*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 137 2952*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2953*8424bf20SUlrich Weigandentry: 2954*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 2955*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 2956*8424bf20SUlrich Weigand %0 = and <16 x i8> %src1, %src3 2957*8424bf20SUlrich Weigand %and10 = and <16 x i8> %0, %src2 2958*8424bf20SUlrich Weigand %or11 = or <16 x i8> %and10, %and 2959*8424bf20SUlrich Weigand ret <16 x i8> %or11 2960*8424bf20SUlrich Weigand} 2961*8424bf20SUlrich Weigand 2962*8424bf20SUlrich Weiganddefine <16 x i8> @eval194(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2963*8424bf20SUlrich Weigand; CHECK-LABEL: eval194: 2964*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2965*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v28, %v28 2966*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v26, 137 2967*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2968*8424bf20SUlrich Weigandentry: 2969*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 2970*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 2971*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 2972*8424bf20SUlrich Weigand %0 = and <16 x i8> %not2, %src1 2973*8424bf20SUlrich Weigand %and11 = and <16 x i8> %0, %src2 2974*8424bf20SUlrich Weigand %or12 = or <16 x i8> %and11, %and 2975*8424bf20SUlrich Weigand ret <16 x i8> %or12 2976*8424bf20SUlrich Weigand} 2977*8424bf20SUlrich Weigand 2978*8424bf20SUlrich Weiganddefine <16 x i8> @eval195(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2979*8424bf20SUlrich Weigand; CHECK-LABEL: eval195: 2980*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2981*8424bf20SUlrich Weigand; CHECK-NEXT: vnx %v24, %v24, %v26 2982*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2983*8424bf20SUlrich Weigandentry: 2984*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src1, %src2 2985*8424bf20SUlrich Weigand %or15 = xor <16 x i8> %0, splat(i8 -1) 2986*8424bf20SUlrich Weigand ret <16 x i8> %or15 2987*8424bf20SUlrich Weigand} 2988*8424bf20SUlrich Weigand 2989*8424bf20SUlrich Weiganddefine <16 x i8> @eval196(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 2990*8424bf20SUlrich Weigand; CHECK-LABEL: eval196: 2991*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 2992*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 138 2993*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 2994*8424bf20SUlrich Weigandentry: 2995*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 2996*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 2997*8424bf20SUlrich Weigand %and22 = or <16 x i8> %not, %src3 2998*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and22, %not1 2999*8424bf20SUlrich Weigand ret <16 x i8> %or12 3000*8424bf20SUlrich Weigand} 3001*8424bf20SUlrich Weigand 3002*8424bf20SUlrich Weiganddefine <16 x i8> @eval197(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3003*8424bf20SUlrich Weigand; CHECK-LABEL: eval197: 3004*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3005*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 139 3006*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3007*8424bf20SUlrich Weigandentry: 3008*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 3009*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 3010*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src1 3011*8424bf20SUlrich Weigand %or15 = or <16 x i8> %0, %and 3012*8424bf20SUlrich Weigand ret <16 x i8> %or15 3013*8424bf20SUlrich Weigand} 3014*8424bf20SUlrich Weigand 3015*8424bf20SUlrich Weiganddefine <16 x i8> @eval198(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3016*8424bf20SUlrich Weigand; CHECK-LABEL: eval198: 3017*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3018*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v26, %v26 3019*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 3020*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3021*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v1, %v24, %v28 3022*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 31 3023*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3024*8424bf20SUlrich Weigandentry: 3025*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3026*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3027*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 3028*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3029*8424bf20SUlrich Weigand %and10 = and <16 x i8> %not1, %src1 3030*8424bf20SUlrich Weigand %and11 = and <16 x i8> %and10, %src3 3031*8424bf20SUlrich Weigand %or12 = or <16 x i8> %and11, %and 3032*8424bf20SUlrich Weigand %0 = and <16 x i8> %not2, %src1 3033*8424bf20SUlrich Weigand %and15 = and <16 x i8> %0, %src2 3034*8424bf20SUlrich Weigand %or16 = or <16 x i8> %or12, %and15 3035*8424bf20SUlrich Weigand ret <16 x i8> %or16 3036*8424bf20SUlrich Weigand} 3037*8424bf20SUlrich Weigand 3038*8424bf20SUlrich Weiganddefine <16 x i8> @eval199(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3039*8424bf20SUlrich Weigand; CHECK-LABEL: eval199: 3040*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3041*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v28, %v24 3042*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v24, %v0, %v26 3043*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3044*8424bf20SUlrich Weigandentry: 3045*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3046*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3047*8424bf20SUlrich Weigand %and37 = or <16 x i8> %not, %src3 3048*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and37, %not1 3049*8424bf20SUlrich Weigand %and13 = and <16 x i8> %src2, %src1 3050*8424bf20SUlrich Weigand %or19 = or <16 x i8> %or12, %and13 3051*8424bf20SUlrich Weigand ret <16 x i8> %or19 3052*8424bf20SUlrich Weigand} 3053*8424bf20SUlrich Weigand 3054*8424bf20SUlrich Weiganddefine <16 x i8> @eval200(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3055*8424bf20SUlrich Weigand; CHECK-LABEL: eval200: 3056*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3057*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 168 3058*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3059*8424bf20SUlrich Weigandentry: 3060*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src1 3061*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src2 3062*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 3063*8424bf20SUlrich Weigand ret <16 x i8> %or13 3064*8424bf20SUlrich Weigand} 3065*8424bf20SUlrich Weigand 3066*8424bf20SUlrich Weiganddefine <16 x i8> @eval201(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3067*8424bf20SUlrich Weigand; CHECK-LABEL: eval201: 3068*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3069*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 169 3070*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3071*8424bf20SUlrich Weigandentry: 3072*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src1 3073*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, %src2 3074*8424bf20SUlrich Weigand %or16 = xor <16 x i8> %1, splat(i8 -1) 3075*8424bf20SUlrich Weigand ret <16 x i8> %or16 3076*8424bf20SUlrich Weigand} 3077*8424bf20SUlrich Weigand 3078*8424bf20SUlrich Weiganddefine <16 x i8> @eval202(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3079*8424bf20SUlrich Weigand; CHECK-LABEL: eval202: 3080*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3081*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v0, %v28, %v24 3082*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v1, %v24, %v28 3083*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v26, %v0, 139 3084*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3085*8424bf20SUlrich Weigandentry: 3086*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3087*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src1 3088*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src2 3089*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 3090*8424bf20SUlrich Weigand %2 = and <16 x i8> %not2, %src1 3091*8424bf20SUlrich Weigand %and16 = and <16 x i8> %2, %src2 3092*8424bf20SUlrich Weigand %or17 = or <16 x i8> %and16, %or13 3093*8424bf20SUlrich Weigand ret <16 x i8> %or17 3094*8424bf20SUlrich Weigand} 3095*8424bf20SUlrich Weigand 3096*8424bf20SUlrich Weiganddefine <16 x i8> @eval203(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3097*8424bf20SUlrich Weigand; CHECK-LABEL: eval203: 3098*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3099*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v0, %v28, %v24 3100*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v26, %v0, 139 3101*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3102*8424bf20SUlrich Weigandentry: 3103*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src1 3104*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src2 3105*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 3106*8424bf20SUlrich Weigand %and14 = and <16 x i8> %src2, %src1 3107*8424bf20SUlrich Weigand %or20 = or <16 x i8> %and14, %or13 3108*8424bf20SUlrich Weigand ret <16 x i8> %or20 3109*8424bf20SUlrich Weigand} 3110*8424bf20SUlrich Weigand 3111*8424bf20SUlrich Weiganddefine <16 x i8> @eval204(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3112*8424bf20SUlrich Weigand; CHECK-LABEL: eval204: 3113*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3114*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v24, %v26, %v26 3115*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3116*8424bf20SUlrich Weigandentry: 3117*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3118*8424bf20SUlrich Weigand ret <16 x i8> %not1 3119*8424bf20SUlrich Weigand} 3120*8424bf20SUlrich Weigand 3121*8424bf20SUlrich Weiganddefine <16 x i8> @eval205(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3122*8424bf20SUlrich Weigand; CHECK-LABEL: eval205: 3123*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3124*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 171 3125*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3126*8424bf20SUlrich Weigandentry: 3127*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3128*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src1 3129*8424bf20SUlrich Weigand %or20 = or <16 x i8> %0, %not1 3130*8424bf20SUlrich Weigand ret <16 x i8> %or20 3131*8424bf20SUlrich Weigand} 3132*8424bf20SUlrich Weigand 3133*8424bf20SUlrich Weiganddefine <16 x i8> @eval206(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3134*8424bf20SUlrich Weigand; CHECK-LABEL: eval206: 3135*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3136*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 174 3137*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3138*8424bf20SUlrich Weigandentry: 3139*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3140*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3141*8424bf20SUlrich Weigand %0 = and <16 x i8> %not2, %src1 3142*8424bf20SUlrich Weigand %or21 = or <16 x i8> %0, %not1 3143*8424bf20SUlrich Weigand ret <16 x i8> %or21 3144*8424bf20SUlrich Weigand} 3145*8424bf20SUlrich Weigand 3146*8424bf20SUlrich Weiganddefine <16 x i8> @eval207(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3147*8424bf20SUlrich Weigand; CHECK-LABEL: eval207: 3148*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3149*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v24, %v24, %v26 3150*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3151*8424bf20SUlrich Weigandentry: 3152*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3153*8424bf20SUlrich Weigand %or24 = or <16 x i8> %not1, %src1 3154*8424bf20SUlrich Weigand ret <16 x i8> %or24 3155*8424bf20SUlrich Weigand} 3156*8424bf20SUlrich Weigand 3157*8424bf20SUlrich Weiganddefine <16 x i8> @eval208(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3158*8424bf20SUlrich Weigand; CHECK-LABEL: eval208: 3159*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3160*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 138 3161*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3162*8424bf20SUlrich Weigandentry: 3163*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3164*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3165*8424bf20SUlrich Weigand %and1122 = or <16 x i8> %not1, %src3 3166*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and1122, %not 3167*8424bf20SUlrich Weigand ret <16 x i8> %or12 3168*8424bf20SUlrich Weigand} 3169*8424bf20SUlrich Weigand 3170*8424bf20SUlrich Weiganddefine <16 x i8> @eval209(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3171*8424bf20SUlrich Weigand; CHECK-LABEL: eval209: 3172*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3173*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 139 3174*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3175*8424bf20SUlrich Weigandentry: 3176*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 3177*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 3178*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 3179*8424bf20SUlrich Weigand %or15 = or <16 x i8> %0, %and 3180*8424bf20SUlrich Weigand ret <16 x i8> %or15 3181*8424bf20SUlrich Weigand} 3182*8424bf20SUlrich Weigand 3183*8424bf20SUlrich Weiganddefine <16 x i8> @eval210(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3184*8424bf20SUlrich Weigand; CHECK-LABEL: eval210: 3185*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3186*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v26, %v26 3187*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 3188*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3189*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v1, %v24, %v28 3190*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v1, %v26, 31 3191*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3192*8424bf20SUlrich Weigandentry: 3193*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3194*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3195*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 3196*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3197*8424bf20SUlrich Weigand %and10 = and <16 x i8> %not, %src2 3198*8424bf20SUlrich Weigand %and11 = and <16 x i8> %and10, %src3 3199*8424bf20SUlrich Weigand %or12 = or <16 x i8> %and11, %and 3200*8424bf20SUlrich Weigand %0 = and <16 x i8> %not2, %src1 3201*8424bf20SUlrich Weigand %and15 = and <16 x i8> %0, %src2 3202*8424bf20SUlrich Weigand %or16 = or <16 x i8> %or12, %and15 3203*8424bf20SUlrich Weigand ret <16 x i8> %or16 3204*8424bf20SUlrich Weigand} 3205*8424bf20SUlrich Weigand 3206*8424bf20SUlrich Weiganddefine <16 x i8> @eval211(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3207*8424bf20SUlrich Weigand; CHECK-LABEL: eval211: 3208*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3209*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v28, %v26 3210*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v26, %v0, %v24 3211*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3212*8424bf20SUlrich Weigandentry: 3213*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3214*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3215*8424bf20SUlrich Weigand %and1137 = or <16 x i8> %not1, %src3 3216*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and1137, %not 3217*8424bf20SUlrich Weigand %and13 = and <16 x i8> %src2, %src1 3218*8424bf20SUlrich Weigand %or19 = or <16 x i8> %or12, %and13 3219*8424bf20SUlrich Weigand ret <16 x i8> %or19 3220*8424bf20SUlrich Weigand} 3221*8424bf20SUlrich Weigand 3222*8424bf20SUlrich Weiganddefine <16 x i8> @eval212(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3223*8424bf20SUlrich Weigand; CHECK-LABEL: eval212: 3224*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3225*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 142 3226*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3227*8424bf20SUlrich Weigandentry: 3228*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 3229*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 3230*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src1 3231*8424bf20SUlrich Weigand %1 = and <16 x i8> %0, %src3 3232*8424bf20SUlrich Weigand %or16 = or <16 x i8> %1, %and 3233*8424bf20SUlrich Weigand ret <16 x i8> %or16 3234*8424bf20SUlrich Weigand} 3235*8424bf20SUlrich Weigand 3236*8424bf20SUlrich Weiganddefine <16 x i8> @eval213(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3237*8424bf20SUlrich Weigand; CHECK-LABEL: eval213: 3238*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3239*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 143 3240*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3241*8424bf20SUlrich Weigandentry: 3242*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 3243*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 3244*8424bf20SUlrich Weigand %or19 = or <16 x i8> %and, %src3 3245*8424bf20SUlrich Weigand ret <16 x i8> %or19 3246*8424bf20SUlrich Weigand} 3247*8424bf20SUlrich Weigand 3248*8424bf20SUlrich Weiganddefine <16 x i8> @eval214(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3249*8424bf20SUlrich Weigand; CHECK-LABEL: eval214: 3250*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3251*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v26, %v24 3252*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v28, %v26, %v24, 6 3253*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v2, %v24, %v26, %v28, 2 3254*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v2, %v0, 191 3255*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3256*8424bf20SUlrich Weigandentry: 3257*8424bf20SUlrich Weigand %and.demorgan = or <16 x i8> %src2, %src1 3258*8424bf20SUlrich Weigand %and = xor <16 x i8> %and.demorgan, splat(i8 -1) 3259*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3260*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src1 3261*8424bf20SUlrich Weigand %1 = and <16 x i8> %0, %src3 3262*8424bf20SUlrich Weigand %or16 = or <16 x i8> %1, %and 3263*8424bf20SUlrich Weigand %2 = and <16 x i8> %not2, %src1 3264*8424bf20SUlrich Weigand %and19 = and <16 x i8> %2, %src2 3265*8424bf20SUlrich Weigand %or20 = or <16 x i8> %or16, %and19 3266*8424bf20SUlrich Weigand ret <16 x i8> %or20 3267*8424bf20SUlrich Weigand} 3268*8424bf20SUlrich Weigand 3269*8424bf20SUlrich Weiganddefine <16 x i8> @eval215(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3270*8424bf20SUlrich Weigand; CHECK-LABEL: eval215: 3271*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3272*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 159 3273*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3274*8424bf20SUlrich Weigandentry: 3275*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src2, %src1 3276*8424bf20SUlrich Weigand %or16 = xor <16 x i8> %0, splat(i8 -1) 3277*8424bf20SUlrich Weigand %or23 = or <16 x i8> %or16, %src3 3278*8424bf20SUlrich Weigand ret <16 x i8> %or23 3279*8424bf20SUlrich Weigand} 3280*8424bf20SUlrich Weigand 3281*8424bf20SUlrich Weiganddefine <16 x i8> @eval216(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3282*8424bf20SUlrich Weigand; CHECK-LABEL: eval216: 3283*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3284*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v26, %v26 3285*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 3286*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3287*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v26 3288*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v1, 47 3289*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3290*8424bf20SUlrich Weigandentry: 3291*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3292*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3293*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 3294*8424bf20SUlrich Weigand %and10 = and <16 x i8> %not, %src2 3295*8424bf20SUlrich Weigand %and11 = and <16 x i8> %and10, %src3 3296*8424bf20SUlrich Weigand %or12 = or <16 x i8> %and11, %and 3297*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 3298*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 3299*8424bf20SUlrich Weigand %and16 = and <16 x i8> %1, %src1 3300*8424bf20SUlrich Weigand %or17 = or <16 x i8> %or12, %and16 3301*8424bf20SUlrich Weigand ret <16 x i8> %or17 3302*8424bf20SUlrich Weigand} 3303*8424bf20SUlrich Weigand 3304*8424bf20SUlrich Weiganddefine <16 x i8> @eval217(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3305*8424bf20SUlrich Weigand; CHECK-LABEL: eval217: 3306*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3307*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v0, %v28, %v26 3308*8424bf20SUlrich Weigand; CHECK-NEXT: vnx %v1, %v26, %v28 3309*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v24, %v1, %v0, %v24 3310*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3311*8424bf20SUlrich Weigandentry: 3312*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3313*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3314*8424bf20SUlrich Weigand %and1138 = or <16 x i8> %not1, %src3 3315*8424bf20SUlrich Weigand %or12 = and <16 x i8> %and1138, %not 3316*8424bf20SUlrich Weigand %0 = xor <16 x i8> %src3, %src2 3317*8424bf20SUlrich Weigand %and1939 = xor <16 x i8> %0, splat(i8 -1) 3318*8424bf20SUlrich Weigand %1 = and <16 x i8> %and1939, %src1 3319*8424bf20SUlrich Weigand %or20 = or <16 x i8> %or12, %1 3320*8424bf20SUlrich Weigand ret <16 x i8> %or20 3321*8424bf20SUlrich Weigand} 3322*8424bf20SUlrich Weigand 3323*8424bf20SUlrich Weiganddefine <16 x i8> @eval218(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3324*8424bf20SUlrich Weigand; CHECK-LABEL: eval218: 3325*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3326*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v26, %v26 3327*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 3328*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3329*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 47 3330*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3331*8424bf20SUlrich Weigandentry: 3332*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3333*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3334*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 3335*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3336*8424bf20SUlrich Weigand %and10 = and <16 x i8> %not, %src2 3337*8424bf20SUlrich Weigand %and11 = and <16 x i8> %and10, %src3 3338*8424bf20SUlrich Weigand %or12 = or <16 x i8> %and11, %and 3339*8424bf20SUlrich Weigand %0 = and <16 x i8> %not2, %src1 3340*8424bf20SUlrich Weigand %or21 = or <16 x i8> %or12, %0 3341*8424bf20SUlrich Weigand ret <16 x i8> %or21 3342*8424bf20SUlrich Weigand} 3343*8424bf20SUlrich Weigand 3344*8424bf20SUlrich Weiganddefine <16 x i8> @eval219(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3345*8424bf20SUlrich Weigand; CHECK-LABEL: eval219: 3346*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3347*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v26, %v26 3348*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v28, %v24, 2 3349*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3350*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v1, %v26, %v28 3351*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v1, %v24, 31 3352*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3353*8424bf20SUlrich Weigandentry: 3354*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3355*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3356*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 3357*8424bf20SUlrich Weigand %and10 = and <16 x i8> %not, %src2 3358*8424bf20SUlrich Weigand %and11 = and <16 x i8> %and10, %src3 3359*8424bf20SUlrich Weigand %or12 = or <16 x i8> %and11, %and 3360*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 3361*8424bf20SUlrich Weigand %and1646 = or <16 x i8> %src3.not, %src2 3362*8424bf20SUlrich Weigand %0 = and <16 x i8> %and1646, %src1 3363*8424bf20SUlrich Weigand %or24 = or <16 x i8> %or12, %0 3364*8424bf20SUlrich Weigand ret <16 x i8> %or24 3365*8424bf20SUlrich Weigand} 3366*8424bf20SUlrich Weigand 3367*8424bf20SUlrich Weiganddefine <16 x i8> @eval220(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3368*8424bf20SUlrich Weigand; CHECK-LABEL: eval220: 3369*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3370*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 174 3371*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3372*8424bf20SUlrich Weigandentry: 3373*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3374*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3375*8424bf20SUlrich Weigand %0 = and <16 x i8> %not, %src3 3376*8424bf20SUlrich Weigand %or21 = or <16 x i8> %0, %not1 3377*8424bf20SUlrich Weigand ret <16 x i8> %or21 3378*8424bf20SUlrich Weigand} 3379*8424bf20SUlrich Weigand 3380*8424bf20SUlrich Weiganddefine <16 x i8> @eval221(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3381*8424bf20SUlrich Weigand; CHECK-LABEL: eval221: 3382*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3383*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v24, %v28, %v26 3384*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3385*8424bf20SUlrich Weigandentry: 3386*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3387*8424bf20SUlrich Weigand %or24 = or <16 x i8> %not1, %src3 3388*8424bf20SUlrich Weigand ret <16 x i8> %or24 3389*8424bf20SUlrich Weigand} 3390*8424bf20SUlrich Weigand 3391*8424bf20SUlrich Weiganddefine <16 x i8> @eval222(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3392*8424bf20SUlrich Weigand; CHECK-LABEL: eval222: 3393*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3394*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v26, %v24 3395*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v28, %v26, 171 3396*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v24, %v28, 47 3397*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3398*8424bf20SUlrich Weigandentry: 3399*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3400*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3401*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3402*8424bf20SUlrich Weigand %and10 = and <16 x i8> %not, %src2 3403*8424bf20SUlrich Weigand %and11 = and <16 x i8> %and10, %src3 3404*8424bf20SUlrich Weigand %or21 = or <16 x i8> %and11, %not1 3405*8424bf20SUlrich Weigand %0 = and <16 x i8> %not2, %src1 3406*8424bf20SUlrich Weigand %or25 = or <16 x i8> %or21, %0 3407*8424bf20SUlrich Weigand ret <16 x i8> %or25 3408*8424bf20SUlrich Weigand} 3409*8424bf20SUlrich Weigand 3410*8424bf20SUlrich Weiganddefine <16 x i8> @eval223(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3411*8424bf20SUlrich Weigand; CHECK-LABEL: eval223: 3412*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3413*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v26, 191 3414*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3415*8424bf20SUlrich Weigandentry: 3416*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3417*8424bf20SUlrich Weigand %or21 = or <16 x i8> %not1, %src1 3418*8424bf20SUlrich Weigand %or28 = or <16 x i8> %or21, %src3 3419*8424bf20SUlrich Weigand ret <16 x i8> %or28 3420*8424bf20SUlrich Weigand} 3421*8424bf20SUlrich Weigand 3422*8424bf20SUlrich Weiganddefine <16 x i8> @eval224(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3423*8424bf20SUlrich Weigand; CHECK-LABEL: eval224: 3424*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3425*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 168 3426*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3427*8424bf20SUlrich Weigandentry: 3428*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 3429*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src1 3430*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 3431*8424bf20SUlrich Weigand ret <16 x i8> %or13 3432*8424bf20SUlrich Weigand} 3433*8424bf20SUlrich Weigand 3434*8424bf20SUlrich Weiganddefine <16 x i8> @eval225(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3435*8424bf20SUlrich Weigand; CHECK-LABEL: eval225: 3436*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3437*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 169 3438*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3439*8424bf20SUlrich Weigandentry: 3440*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 3441*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, %src1 3442*8424bf20SUlrich Weigand %or16 = xor <16 x i8> %1, splat(i8 -1) 3443*8424bf20SUlrich Weigand ret <16 x i8> %or16 3444*8424bf20SUlrich Weigand} 3445*8424bf20SUlrich Weigand 3446*8424bf20SUlrich Weiganddefine <16 x i8> @eval226(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3447*8424bf20SUlrich Weigand; CHECK-LABEL: eval226: 3448*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3449*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v0, %v28, %v26 3450*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v26, %v28, 2 3451*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 143 3452*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3453*8424bf20SUlrich Weigandentry: 3454*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3455*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 3456*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src1 3457*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 3458*8424bf20SUlrich Weigand %2 = and <16 x i8> %not2, %src1 3459*8424bf20SUlrich Weigand %and16 = and <16 x i8> %2, %src2 3460*8424bf20SUlrich Weigand %or17 = or <16 x i8> %and16, %or13 3461*8424bf20SUlrich Weigand ret <16 x i8> %or17 3462*8424bf20SUlrich Weigand} 3463*8424bf20SUlrich Weigand 3464*8424bf20SUlrich Weiganddefine <16 x i8> @eval227(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3465*8424bf20SUlrich Weigand; CHECK-LABEL: eval227: 3466*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3467*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v0, %v28, %v26 3468*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v0, 139 3469*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3470*8424bf20SUlrich Weigandentry: 3471*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 3472*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src1 3473*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 3474*8424bf20SUlrich Weigand %and14 = and <16 x i8> %src2, %src1 3475*8424bf20SUlrich Weigand %or20 = or <16 x i8> %and14, %or13 3476*8424bf20SUlrich Weigand ret <16 x i8> %or20 3477*8424bf20SUlrich Weigand} 3478*8424bf20SUlrich Weigand 3479*8424bf20SUlrich Weiganddefine <16 x i8> @eval228(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3480*8424bf20SUlrich Weigand; CHECK-LABEL: eval228: 3481*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3482*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v26, %v26 3483*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v24 3484*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v2, %v24, %v28, %v26, 2 3485*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v2, %v0, %v24, 47 3486*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 3487*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3488*8424bf20SUlrich Weigandentry: 3489*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3490*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3491*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 3492*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 3493*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 3494*8424bf20SUlrich Weigand %and12 = and <16 x i8> %1, %src2 3495*8424bf20SUlrich Weigand %and15 = and <16 x i8> %not1, %src1 3496*8424bf20SUlrich Weigand %and16 = and <16 x i8> %and15, %src3 3497*8424bf20SUlrich Weigand %or13 = or <16 x i8> %and16, %and 3498*8424bf20SUlrich Weigand %or17 = or <16 x i8> %or13, %and12 3499*8424bf20SUlrich Weigand ret <16 x i8> %or17 3500*8424bf20SUlrich Weigand} 3501*8424bf20SUlrich Weigand 3502*8424bf20SUlrich Weiganddefine <16 x i8> @eval229(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3503*8424bf20SUlrich Weigand; CHECK-LABEL: eval229: 3504*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3505*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v0, %v28, %v26 3506*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v0, 139 3507*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3508*8424bf20SUlrich Weigandentry: 3509*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 3510*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src1 3511*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 3512*8424bf20SUlrich Weigand %2 = and <16 x i8> %src3, %src1 3513*8424bf20SUlrich Weigand %or20 = or <16 x i8> %2, %or13 3514*8424bf20SUlrich Weigand ret <16 x i8> %or20 3515*8424bf20SUlrich Weigand} 3516*8424bf20SUlrich Weigand 3517*8424bf20SUlrich Weiganddefine <16 x i8> @eval230(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3518*8424bf20SUlrich Weigand; CHECK-LABEL: eval230: 3519*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3520*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v26, %v26 3521*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v24, %v28, %v26, 2 3522*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v1, %v0, %v24, 47 3523*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v26, %v28, 47 3524*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3525*8424bf20SUlrich Weigandentry: 3526*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3527*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3528*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 3529*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3530*8424bf20SUlrich Weigand %and15 = and <16 x i8> %not1, %src1 3531*8424bf20SUlrich Weigand %and16 = and <16 x i8> %and15, %src3 3532*8424bf20SUlrich Weigand %or13 = or <16 x i8> %and16, %and 3533*8424bf20SUlrich Weigand %0 = and <16 x i8> %not2, %src2 3534*8424bf20SUlrich Weigand %or21 = or <16 x i8> %or13, %0 3535*8424bf20SUlrich Weigand ret <16 x i8> %or21 3536*8424bf20SUlrich Weigand} 3537*8424bf20SUlrich Weigand 3538*8424bf20SUlrich Weiganddefine <16 x i8> @eval231(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3539*8424bf20SUlrich Weigand; CHECK-LABEL: eval231: 3540*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3541*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v0, %v26, %v26 3542*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v2, %v24, %v26 3543*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v24 3544*8424bf20SUlrich Weigand; CHECK-NEXT: vsel %v0, %v26, %v0, %v24 3545*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v2, %v28, 31 3546*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v26, %v1, 47 3547*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3548*8424bf20SUlrich Weigandentry: 3549*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3550*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3551*8424bf20SUlrich Weigand %and = and <16 x i8> %not1, %not 3552*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 3553*8424bf20SUlrich Weigand %1 = xor <16 x i8> %0, splat(i8 -1) 3554*8424bf20SUlrich Weigand %and12 = and <16 x i8> %1, %src2 3555*8424bf20SUlrich Weigand %and15 = and <16 x i8> %not1, %src1 3556*8424bf20SUlrich Weigand %and16 = and <16 x i8> %and15, %src3 3557*8424bf20SUlrich Weigand %and18 = and <16 x i8> %src2, %src1 3558*8424bf20SUlrich Weigand %or13 = or <16 x i8> %and18, %and 3559*8424bf20SUlrich Weigand %or17 = or <16 x i8> %or13, %and16 3560*8424bf20SUlrich Weigand %or24 = or <16 x i8> %or17, %and12 3561*8424bf20SUlrich Weigand ret <16 x i8> %or24 3562*8424bf20SUlrich Weigand} 3563*8424bf20SUlrich Weigand 3564*8424bf20SUlrich Weiganddefine <16 x i8> @eval232(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3565*8424bf20SUlrich Weigand; CHECK-LABEL: eval232: 3566*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3567*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v1, %v28, %v26 3568*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 31 3569*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 3570*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3571*8424bf20SUlrich Weigandentry: 3572*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 3573*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src1 3574*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 3575*8424bf20SUlrich Weigand %2 = or <16 x i8> %src3, %src2 3576*8424bf20SUlrich Weigand %3 = xor <16 x i8> %2, splat(i8 -1) 3577*8424bf20SUlrich Weigand %and17 = and <16 x i8> %3, %src1 3578*8424bf20SUlrich Weigand %or18 = or <16 x i8> %and17, %or13 3579*8424bf20SUlrich Weigand ret <16 x i8> %or18 3580*8424bf20SUlrich Weigand} 3581*8424bf20SUlrich Weigand 3582*8424bf20SUlrich Weiganddefine <16 x i8> @eval233(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3583*8424bf20SUlrich Weigand; CHECK-LABEL: eval233: 3584*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3585*8424bf20SUlrich Weigand; CHECK-NEXT: vx %v1, %v28, %v26 3586*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 31 3587*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v1, %v0, 174 3588*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3589*8424bf20SUlrich Weigandentry: 3590*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 3591*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src1 3592*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 3593*8424bf20SUlrich Weigand %2 = xor <16 x i8> %src3, %src2 3594*8424bf20SUlrich Weigand %and2039 = xor <16 x i8> %2, splat(i8 -1) 3595*8424bf20SUlrich Weigand %3 = and <16 x i8> %and2039, %src1 3596*8424bf20SUlrich Weigand %or21 = or <16 x i8> %3, %or13 3597*8424bf20SUlrich Weigand ret <16 x i8> %or21 3598*8424bf20SUlrich Weigand} 3599*8424bf20SUlrich Weigand 3600*8424bf20SUlrich Weiganddefine <16 x i8> @eval234(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3601*8424bf20SUlrich Weigand; CHECK-LABEL: eval234: 3602*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3603*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 31 3604*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 174 3605*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3606*8424bf20SUlrich Weigandentry: 3607*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3608*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 3609*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src1 3610*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 3611*8424bf20SUlrich Weigand %2 = and <16 x i8> %not2, %src1 3612*8424bf20SUlrich Weigand %or22 = or <16 x i8> %2, %or13 3613*8424bf20SUlrich Weigand ret <16 x i8> %or22 3614*8424bf20SUlrich Weigand} 3615*8424bf20SUlrich Weigand 3616*8424bf20SUlrich Weiganddefine <16 x i8> @eval235(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3617*8424bf20SUlrich Weigand; CHECK-LABEL: eval235: 3618*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3619*8424bf20SUlrich Weigand; CHECK-NEXT: vn %v0, %v28, %v26 3620*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v1, %v26, %v28 3621*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v24, %v0, 139 3622*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3623*8424bf20SUlrich Weigandentry: 3624*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 3625*8424bf20SUlrich Weigand %1 = or <16 x i8> %0, %src1 3626*8424bf20SUlrich Weigand %or13 = xor <16 x i8> %1, splat(i8 -1) 3627*8424bf20SUlrich Weigand %src3.not = xor <16 x i8> %src3, splat(i8 -1) 3628*8424bf20SUlrich Weigand %and1747 = or <16 x i8> %src3.not, %src2 3629*8424bf20SUlrich Weigand %2 = and <16 x i8> %and1747, %src1 3630*8424bf20SUlrich Weigand %or25 = or <16 x i8> %2, %or13 3631*8424bf20SUlrich Weigand ret <16 x i8> %or25 3632*8424bf20SUlrich Weigand} 3633*8424bf20SUlrich Weigand 3634*8424bf20SUlrich Weiganddefine <16 x i8> @eval236(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3635*8424bf20SUlrich Weigand; CHECK-LABEL: eval236: 3636*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3637*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v24, %v26, 234 3638*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3639*8424bf20SUlrich Weigandentry: 3640*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 3641*8424bf20SUlrich Weigand %or22.demorgan = and <16 x i8> %0, %src2 3642*8424bf20SUlrich Weigand %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3643*8424bf20SUlrich Weigand ret <16 x i8> %or22 3644*8424bf20SUlrich Weigand} 3645*8424bf20SUlrich Weigand 3646*8424bf20SUlrich Weiganddefine <16 x i8> @eval237(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3647*8424bf20SUlrich Weigand; CHECK-LABEL: eval237: 3648*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3649*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v24 3650*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 3651*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v26, 239 3652*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3653*8424bf20SUlrich Weigandentry: 3654*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 3655*8424bf20SUlrich Weigand %or22.demorgan = and <16 x i8> %0, %src2 3656*8424bf20SUlrich Weigand %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3657*8424bf20SUlrich Weigand %and23 = and <16 x i8> %src2, %src1 3658*8424bf20SUlrich Weigand %and24 = and <16 x i8> %and23, %src3 3659*8424bf20SUlrich Weigand %or25 = or <16 x i8> %and24, %or22 3660*8424bf20SUlrich Weigand ret <16 x i8> %or25 3661*8424bf20SUlrich Weigand} 3662*8424bf20SUlrich Weigand 3663*8424bf20SUlrich Weiganddefine <16 x i8> @eval238(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3664*8424bf20SUlrich Weigand; CHECK-LABEL: eval238: 3665*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3666*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v26, %v28, %v24, 7 3667*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v28, %v0, 174 3668*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3669*8424bf20SUlrich Weigandentry: 3670*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3671*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 3672*8424bf20SUlrich Weigand %or22.demorgan = and <16 x i8> %0, %src2 3673*8424bf20SUlrich Weigand %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3674*8424bf20SUlrich Weigand %1 = and <16 x i8> %not2, %src1 3675*8424bf20SUlrich Weigand %or26 = or <16 x i8> %1, %or22 3676*8424bf20SUlrich Weigand ret <16 x i8> %or26 3677*8424bf20SUlrich Weigand} 3678*8424bf20SUlrich Weigand 3679*8424bf20SUlrich Weiganddefine <16 x i8> @eval239(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3680*8424bf20SUlrich Weigand; CHECK-LABEL: eval239: 3681*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3682*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v24 3683*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v24, %v0, %v26, 239 3684*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3685*8424bf20SUlrich Weigandentry: 3686*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src1 3687*8424bf20SUlrich Weigand %or22.demorgan = and <16 x i8> %0, %src2 3688*8424bf20SUlrich Weigand %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3689*8424bf20SUlrich Weigand %or29 = or <16 x i8> %or22, %src1 3690*8424bf20SUlrich Weigand ret <16 x i8> %or29 3691*8424bf20SUlrich Weigand} 3692*8424bf20SUlrich Weigand 3693*8424bf20SUlrich Weiganddefine <16 x i8> @eval240(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3694*8424bf20SUlrich Weigand; CHECK-LABEL: eval240: 3695*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3696*8424bf20SUlrich Weigand; CHECK-NEXT: vno %v24, %v24, %v24 3697*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3698*8424bf20SUlrich Weigandentry: 3699*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3700*8424bf20SUlrich Weigand ret <16 x i8> %not 3701*8424bf20SUlrich Weigand} 3702*8424bf20SUlrich Weigand 3703*8424bf20SUlrich Weiganddefine <16 x i8> @eval241(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3704*8424bf20SUlrich Weigand; CHECK-LABEL: eval241: 3705*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3706*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 171 3707*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3708*8424bf20SUlrich Weigandentry: 3709*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3710*8424bf20SUlrich Weigand %0 = and <16 x i8> %src3, %src2 3711*8424bf20SUlrich Weigand %or20 = or <16 x i8> %0, %not 3712*8424bf20SUlrich Weigand ret <16 x i8> %or20 3713*8424bf20SUlrich Weigand} 3714*8424bf20SUlrich Weigand 3715*8424bf20SUlrich Weiganddefine <16 x i8> @eval242(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3716*8424bf20SUlrich Weigand; CHECK-LABEL: eval242: 3717*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3718*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 174 3719*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3720*8424bf20SUlrich Weigandentry: 3721*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3722*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3723*8424bf20SUlrich Weigand %0 = and <16 x i8> %not2, %src2 3724*8424bf20SUlrich Weigand %or21 = or <16 x i8> %0, %not 3725*8424bf20SUlrich Weigand ret <16 x i8> %or21 3726*8424bf20SUlrich Weigand} 3727*8424bf20SUlrich Weigand 3728*8424bf20SUlrich Weiganddefine <16 x i8> @eval243(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3729*8424bf20SUlrich Weigand; CHECK-LABEL: eval243: 3730*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3731*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v24, %v26, %v24 3732*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3733*8424bf20SUlrich Weigandentry: 3734*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3735*8424bf20SUlrich Weigand %or24 = or <16 x i8> %not, %src2 3736*8424bf20SUlrich Weigand ret <16 x i8> %or24 3737*8424bf20SUlrich Weigand} 3738*8424bf20SUlrich Weigand 3739*8424bf20SUlrich Weiganddefine <16 x i8> @eval244(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3740*8424bf20SUlrich Weigand; CHECK-LABEL: eval244: 3741*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3742*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 174 3743*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3744*8424bf20SUlrich Weigandentry: 3745*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3746*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3747*8424bf20SUlrich Weigand %0 = and <16 x i8> %not1, %src3 3748*8424bf20SUlrich Weigand %or21 = or <16 x i8> %0, %not 3749*8424bf20SUlrich Weigand ret <16 x i8> %or21 3750*8424bf20SUlrich Weigand} 3751*8424bf20SUlrich Weigand 3752*8424bf20SUlrich Weiganddefine <16 x i8> @eval245(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3753*8424bf20SUlrich Weigand; CHECK-LABEL: eval245: 3754*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3755*8424bf20SUlrich Weigand; CHECK-NEXT: voc %v24, %v28, %v24 3756*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3757*8424bf20SUlrich Weigandentry: 3758*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3759*8424bf20SUlrich Weigand %or24 = or <16 x i8> %not, %src3 3760*8424bf20SUlrich Weigand ret <16 x i8> %or24 3761*8424bf20SUlrich Weigand} 3762*8424bf20SUlrich Weigand 3763*8424bf20SUlrich Weiganddefine <16 x i8> @eval246(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3764*8424bf20SUlrich Weigand; CHECK-LABEL: eval246: 3765*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3766*8424bf20SUlrich Weigand; CHECK-NEXT: vnc %v0, %v24, %v26 3767*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v0, %v28, %v24, 171 3768*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v0, %v26, %v28, 47 3769*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3770*8424bf20SUlrich Weigandentry: 3771*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3772*8424bf20SUlrich Weigand %not1 = xor <16 x i8> %src2, splat(i8 -1) 3773*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3774*8424bf20SUlrich Weigand %and19 = and <16 x i8> %not1, %src1 3775*8424bf20SUlrich Weigand %and20 = and <16 x i8> %and19, %src3 3776*8424bf20SUlrich Weigand %or21 = or <16 x i8> %and20, %not 3777*8424bf20SUlrich Weigand %0 = and <16 x i8> %not2, %src2 3778*8424bf20SUlrich Weigand %or25 = or <16 x i8> %or21, %0 3779*8424bf20SUlrich Weigand ret <16 x i8> %or25 3780*8424bf20SUlrich Weigand} 3781*8424bf20SUlrich Weigand 3782*8424bf20SUlrich Weiganddefine <16 x i8> @eval247(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3783*8424bf20SUlrich Weigand; CHECK-LABEL: eval247: 3784*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3785*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v24, 191 3786*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3787*8424bf20SUlrich Weigandentry: 3788*8424bf20SUlrich Weigand %not = xor <16 x i8> %src1, splat(i8 -1) 3789*8424bf20SUlrich Weigand %or21 = or <16 x i8> %not, %src2 3790*8424bf20SUlrich Weigand %or28 = or <16 x i8> %or21, %src3 3791*8424bf20SUlrich Weigand ret <16 x i8> %or28 3792*8424bf20SUlrich Weigand} 3793*8424bf20SUlrich Weigand 3794*8424bf20SUlrich Weiganddefine <16 x i8> @eval248(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3795*8424bf20SUlrich Weigand; CHECK-LABEL: eval248: 3796*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3797*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 234 3798*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3799*8424bf20SUlrich Weigandentry: 3800*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 3801*8424bf20SUlrich Weigand %or22.demorgan = and <16 x i8> %0, %src1 3802*8424bf20SUlrich Weigand %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3803*8424bf20SUlrich Weigand ret <16 x i8> %or22 3804*8424bf20SUlrich Weigand} 3805*8424bf20SUlrich Weigand 3806*8424bf20SUlrich Weiganddefine <16 x i8> @eval249(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3807*8424bf20SUlrich Weigand; CHECK-LABEL: eval249: 3808*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3809*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v26 3810*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v1, %v26, %v24, %v28, 1 3811*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v1, %v0, %v24, 239 3812*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3813*8424bf20SUlrich Weigandentry: 3814*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 3815*8424bf20SUlrich Weigand %or22.demorgan = and <16 x i8> %0, %src1 3816*8424bf20SUlrich Weigand %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3817*8424bf20SUlrich Weigand %and23 = and <16 x i8> %src2, %src1 3818*8424bf20SUlrich Weigand %and24 = and <16 x i8> %and23, %src3 3819*8424bf20SUlrich Weigand %or25 = or <16 x i8> %and24, %or22 3820*8424bf20SUlrich Weigand ret <16 x i8> %or25 3821*8424bf20SUlrich Weigand} 3822*8424bf20SUlrich Weigand 3823*8424bf20SUlrich Weiganddefine <16 x i8> @eval250(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3824*8424bf20SUlrich Weigand; CHECK-LABEL: eval250: 3825*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3826*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v0, %v24, %v28, %v26, 7 3827*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v28, %v0, 174 3828*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3829*8424bf20SUlrich Weigandentry: 3830*8424bf20SUlrich Weigand %not2 = xor <16 x i8> %src3, splat(i8 -1) 3831*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 3832*8424bf20SUlrich Weigand %or22.demorgan = and <16 x i8> %0, %src1 3833*8424bf20SUlrich Weigand %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3834*8424bf20SUlrich Weigand %1 = and <16 x i8> %not2, %src2 3835*8424bf20SUlrich Weigand %or26 = or <16 x i8> %1, %or22 3836*8424bf20SUlrich Weigand ret <16 x i8> %or26 3837*8424bf20SUlrich Weigand} 3838*8424bf20SUlrich Weigand 3839*8424bf20SUlrich Weiganddefine <16 x i8> @eval251(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3840*8424bf20SUlrich Weigand; CHECK-LABEL: eval251: 3841*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3842*8424bf20SUlrich Weigand; CHECK-NEXT: vo %v0, %v28, %v26 3843*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v0, %v24, 239 3844*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3845*8424bf20SUlrich Weigandentry: 3846*8424bf20SUlrich Weigand %0 = or <16 x i8> %src3, %src2 3847*8424bf20SUlrich Weigand %or22.demorgan = and <16 x i8> %0, %src1 3848*8424bf20SUlrich Weigand %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1) 3849*8424bf20SUlrich Weigand %or29 = or <16 x i8> %or22, %src2 3850*8424bf20SUlrich Weigand ret <16 x i8> %or29 3851*8424bf20SUlrich Weigand} 3852*8424bf20SUlrich Weigand 3853*8424bf20SUlrich Weiganddefine <16 x i8> @eval252(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3854*8424bf20SUlrich Weigand; CHECK-LABEL: eval252: 3855*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3856*8424bf20SUlrich Weigand; CHECK-NEXT: vnn %v24, %v26, %v24 3857*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3858*8424bf20SUlrich Weigandentry: 3859*8424bf20SUlrich Weigand %or26.demorgan = and <16 x i8> %src2, %src1 3860*8424bf20SUlrich Weigand %or26 = xor <16 x i8> %or26.demorgan, splat(i8 -1) 3861*8424bf20SUlrich Weigand ret <16 x i8> %or26 3862*8424bf20SUlrich Weigand} 3863*8424bf20SUlrich Weigand 3864*8424bf20SUlrich Weiganddefine <16 x i8> @eval253(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3865*8424bf20SUlrich Weigand; CHECK-LABEL: eval253: 3866*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3867*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v28, %v26, %v24, 239 3868*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3869*8424bf20SUlrich Weigandentry: 3870*8424bf20SUlrich Weigand %or26.demorgan = and <16 x i8> %src2, %src1 3871*8424bf20SUlrich Weigand %or26 = xor <16 x i8> %or26.demorgan, splat(i8 -1) 3872*8424bf20SUlrich Weigand %or29 = or <16 x i8> %or26, %src3 3873*8424bf20SUlrich Weigand ret <16 x i8> %or29 3874*8424bf20SUlrich Weigand} 3875*8424bf20SUlrich Weigand 3876*8424bf20SUlrich Weiganddefine <16 x i8> @eval254(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3877*8424bf20SUlrich Weigand; CHECK-LABEL: eval254: 3878*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3879*8424bf20SUlrich Weigand; CHECK-NEXT: veval %v24, %v26, %v24, %v28, 254 3880*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3881*8424bf20SUlrich Weigandentry: 3882*8424bf20SUlrich Weigand %or26.demorgan = and <16 x i8> %src2, %src1 3883*8424bf20SUlrich Weigand %or30.demorgan = and <16 x i8> %or26.demorgan, %src3 3884*8424bf20SUlrich Weigand %or30 = xor <16 x i8> %or30.demorgan, splat(i8 -1) 3885*8424bf20SUlrich Weigand ret <16 x i8> %or30 3886*8424bf20SUlrich Weigand} 3887*8424bf20SUlrich Weigand 3888*8424bf20SUlrich Weiganddefine <16 x i8> @eval255(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) { 3889*8424bf20SUlrich Weigand; CHECK-LABEL: eval255: 3890*8424bf20SUlrich Weigand; CHECK: # %bb.0: # %entry 3891*8424bf20SUlrich Weigand; CHECK-NEXT: vgbm %v24, 65535 3892*8424bf20SUlrich Weigand; CHECK-NEXT: br %r14 3893*8424bf20SUlrich Weigandentry: 3894*8424bf20SUlrich Weigand ret <16 x i8> splat(i8 -1) 3895*8424bf20SUlrich Weigand} 3896*8424bf20SUlrich Weigand 3897