1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512vl | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; 256-bit 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpandd256 6*9880d681SAndroid Build Coastguard Worker; CHECK: vpandd %ymm 7*9880d681SAndroid Build Coastguard Worker; CHECK: ret 8*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpandd256(<8 x i32> %a, <8 x i32> %b) nounwind uwtable readnone ssp { 9*9880d681SAndroid Build Coastguard Workerentry: 10*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 11*9880d681SAndroid Build Coastguard Worker %a2 = add <8 x i32> %a, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 12*9880d681SAndroid Build Coastguard Worker %x = and <8 x i32> %a2, %b 13*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpandnd256 17*9880d681SAndroid Build Coastguard Worker; CHECK: vpandnd %ymm 18*9880d681SAndroid Build Coastguard Worker; CHECK: ret 19*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpandnd256(<8 x i32> %a, <8 x i32> %b) nounwind uwtable readnone ssp { 20*9880d681SAndroid Build Coastguard Workerentry: 21*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 22*9880d681SAndroid Build Coastguard Worker %a2 = add <8 x i32> %a, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 23*9880d681SAndroid Build Coastguard Worker %b2 = xor <8 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1> 24*9880d681SAndroid Build Coastguard Worker %x = and <8 x i32> %a2, %b2 25*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpord256 29*9880d681SAndroid Build Coastguard Worker; CHECK: vpord %ymm 30*9880d681SAndroid Build Coastguard Worker; CHECK: ret 31*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpord256(<8 x i32> %a, <8 x i32> %b) nounwind uwtable readnone ssp { 32*9880d681SAndroid Build Coastguard Workerentry: 33*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 34*9880d681SAndroid Build Coastguard Worker %a2 = add <8 x i32> %a, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 35*9880d681SAndroid Build Coastguard Worker %x = or <8 x i32> %a2, %b 36*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpxord256 40*9880d681SAndroid Build Coastguard Worker; CHECK: vpxord %ymm 41*9880d681SAndroid Build Coastguard Worker; CHECK: ret 42*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpxord256(<8 x i32> %a, <8 x i32> %b) nounwind uwtable readnone ssp { 43*9880d681SAndroid Build Coastguard Workerentry: 44*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 45*9880d681SAndroid Build Coastguard Worker %a2 = add <8 x i32> %a, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 46*9880d681SAndroid Build Coastguard Worker %x = xor <8 x i32> %a2, %b 47*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpandq256 51*9880d681SAndroid Build Coastguard Worker; CHECK: vpandq %ymm 52*9880d681SAndroid Build Coastguard Worker; CHECK: ret 53*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpandq256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp { 54*9880d681SAndroid Build Coastguard Workerentry: 55*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 56*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1> 57*9880d681SAndroid Build Coastguard Worker %x = and <4 x i64> %a2, %b 58*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpandnq256 62*9880d681SAndroid Build Coastguard Worker; CHECK: vpandnq %ymm 63*9880d681SAndroid Build Coastguard Worker; CHECK: ret 64*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpandnq256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp { 65*9880d681SAndroid Build Coastguard Workerentry: 66*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 67*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1> 68*9880d681SAndroid Build Coastguard Worker %b2 = xor <4 x i64> %b, <i64 -1, i64 -1, i64 -1, i64 -1> 69*9880d681SAndroid Build Coastguard Worker %x = and <4 x i64> %a2, %b2 70*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vporq256 74*9880d681SAndroid Build Coastguard Worker; CHECK: vporq %ymm 75*9880d681SAndroid Build Coastguard Worker; CHECK: ret 76*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vporq256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp { 77*9880d681SAndroid Build Coastguard Workerentry: 78*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 79*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1> 80*9880d681SAndroid Build Coastguard Worker %x = or <4 x i64> %a2, %b 81*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 82*9880d681SAndroid Build Coastguard Worker} 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpxorq256 85*9880d681SAndroid Build Coastguard Worker; CHECK: vpxorq %ymm 86*9880d681SAndroid Build Coastguard Worker; CHECK: ret 87*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpxorq256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp { 88*9880d681SAndroid Build Coastguard Workerentry: 89*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 90*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1> 91*9880d681SAndroid Build Coastguard Worker %x = xor <4 x i64> %a2, %b 92*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker; 128-bit 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpandd128 98*9880d681SAndroid Build Coastguard Worker; CHECK: vpandd %xmm 99*9880d681SAndroid Build Coastguard Worker; CHECK: ret 100*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpandd128(<4 x i32> %a, <4 x i32> %b) nounwind uwtable readnone ssp { 101*9880d681SAndroid Build Coastguard Workerentry: 102*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 103*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i32> %a, <i32 1, i32 1, i32 1, i32 1> 104*9880d681SAndroid Build Coastguard Worker %x = and <4 x i32> %a2, %b 105*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 106*9880d681SAndroid Build Coastguard Worker} 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpandnd128 109*9880d681SAndroid Build Coastguard Worker; CHECK: vpandnd %xmm 110*9880d681SAndroid Build Coastguard Worker; CHECK: ret 111*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpandnd128(<4 x i32> %a, <4 x i32> %b) nounwind uwtable readnone ssp { 112*9880d681SAndroid Build Coastguard Workerentry: 113*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 114*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i32> %a, <i32 1, i32 1, i32 1, i32 1> 115*9880d681SAndroid Build Coastguard Worker %b2 = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1> 116*9880d681SAndroid Build Coastguard Worker %x = and <4 x i32> %a2, %b2 117*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 118*9880d681SAndroid Build Coastguard Worker} 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpord128 121*9880d681SAndroid Build Coastguard Worker; CHECK: vpord %xmm 122*9880d681SAndroid Build Coastguard Worker; CHECK: ret 123*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpord128(<4 x i32> %a, <4 x i32> %b) nounwind uwtable readnone ssp { 124*9880d681SAndroid Build Coastguard Workerentry: 125*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 126*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i32> %a, <i32 1, i32 1, i32 1, i32 1> 127*9880d681SAndroid Build Coastguard Worker %x = or <4 x i32> %a2, %b 128*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpxord128 132*9880d681SAndroid Build Coastguard Worker; CHECK: vpxord %xmm 133*9880d681SAndroid Build Coastguard Worker; CHECK: ret 134*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpxord128(<4 x i32> %a, <4 x i32> %b) nounwind uwtable readnone ssp { 135*9880d681SAndroid Build Coastguard Workerentry: 136*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 137*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i32> %a, <i32 1, i32 1, i32 1, i32 1> 138*9880d681SAndroid Build Coastguard Worker %x = xor <4 x i32> %a2, %b 139*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 140*9880d681SAndroid Build Coastguard Worker} 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpandq128 143*9880d681SAndroid Build Coastguard Worker; CHECK: vpandq %xmm 144*9880d681SAndroid Build Coastguard Worker; CHECK: ret 145*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpandq128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp { 146*9880d681SAndroid Build Coastguard Workerentry: 147*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 148*9880d681SAndroid Build Coastguard Worker %a2 = add <2 x i64> %a, <i64 1, i64 1> 149*9880d681SAndroid Build Coastguard Worker %x = and <2 x i64> %a2, %b 150*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 151*9880d681SAndroid Build Coastguard Worker} 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpandnq128 154*9880d681SAndroid Build Coastguard Worker; CHECK: vpandnq %xmm 155*9880d681SAndroid Build Coastguard Worker; CHECK: ret 156*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpandnq128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp { 157*9880d681SAndroid Build Coastguard Workerentry: 158*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 159*9880d681SAndroid Build Coastguard Worker %a2 = add <2 x i64> %a, <i64 1, i64 1> 160*9880d681SAndroid Build Coastguard Worker %b2 = xor <2 x i64> %b, <i64 -1, i64 -1> 161*9880d681SAndroid Build Coastguard Worker %x = and <2 x i64> %a2, %b2 162*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vporq128 166*9880d681SAndroid Build Coastguard Worker; CHECK: vporq %xmm 167*9880d681SAndroid Build Coastguard Worker; CHECK: ret 168*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vporq128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp { 169*9880d681SAndroid Build Coastguard Workerentry: 170*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 171*9880d681SAndroid Build Coastguard Worker %a2 = add <2 x i64> %a, <i64 1, i64 1> 172*9880d681SAndroid Build Coastguard Worker %x = or <2 x i64> %a2, %b 173*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 174*9880d681SAndroid Build Coastguard Worker} 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpxorq128 177*9880d681SAndroid Build Coastguard Worker; CHECK: vpxorq %xmm 178*9880d681SAndroid Build Coastguard Worker; CHECK: ret 179*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpxorq128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp { 180*9880d681SAndroid Build Coastguard Workerentry: 181*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 182*9880d681SAndroid Build Coastguard Worker %a2 = add <2 x i64> %a, <i64 1, i64 1> 183*9880d681SAndroid Build Coastguard Worker %x = xor <2 x i64> %a2, %b 184*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 185*9880d681SAndroid Build Coastguard Worker} 186