1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @andpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andpd256: 7*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vandpd %ymm0, %ymm1, %ymm0 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 12*9880d681SAndroid Build Coastguard Workerentry: 13*9880d681SAndroid Build Coastguard Worker %0 = bitcast <4 x double> %x to <4 x i64> 14*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x double> %y to <4 x i64> 15*9880d681SAndroid Build Coastguard Worker %and.i = and <4 x i64> %0, %1 16*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i64> %and.i to <4 x double> 17*9880d681SAndroid Build Coastguard Worker ; add forces execution domain 18*9880d681SAndroid Build Coastguard Worker %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0> 19*9880d681SAndroid Build Coastguard Worker ret <4 x double> %3 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @andpd256fold(<4 x double> %y) nounwind uwtable readnone ssp { 23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andpd256fold: 24*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vandpd {{.*}}(%rip), %ymm0, %ymm0 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 29*9880d681SAndroid Build Coastguard Workerentry: 30*9880d681SAndroid Build Coastguard Worker %0 = bitcast <4 x double> %y to <4 x i64> 31*9880d681SAndroid Build Coastguard Worker %and.i = and <4 x i64> %0, <i64 4616752568008179712, i64 4614838538166547251, i64 4612361558371493478, i64 4608083138725491507> 32*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x i64> %and.i to <4 x double> 33*9880d681SAndroid Build Coastguard Worker ; add forces execution domain 34*9880d681SAndroid Build Coastguard Worker %2 = fadd <4 x double> %1, <double 0x0, double 0x0, double 0x0, double 0x0> 35*9880d681SAndroid Build Coastguard Worker ret <4 x double> %2 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @andps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp { 39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andps256: 40*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vandps %ymm0, %ymm1, %ymm0 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 43*9880d681SAndroid Build Coastguard Workerentry: 44*9880d681SAndroid Build Coastguard Worker %0 = bitcast <8 x float> %x to <8 x i32> 45*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x float> %y to <8 x i32> 46*9880d681SAndroid Build Coastguard Worker %and.i = and <8 x i32> %0, %1 47*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i32> %and.i to <8 x float> 48*9880d681SAndroid Build Coastguard Worker ret <8 x float> %2 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @andps256fold(<8 x float> %y) nounwind uwtable readnone ssp { 52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andps256fold: 53*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker %0 = bitcast <8 x float> %y to <8 x i32> 58*9880d681SAndroid Build Coastguard Worker %and.i = and <8 x i32> %0, <i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938, i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938> 59*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i32> %and.i to <8 x float> 60*9880d681SAndroid Build Coastguard Worker ret <8 x float> %1 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @xorpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp { 64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xorpd256: 65*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorpd %ymm0, %ymm1, %ymm0 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 70*9880d681SAndroid Build Coastguard Workerentry: 71*9880d681SAndroid Build Coastguard Worker %0 = bitcast <4 x double> %x to <4 x i64> 72*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x double> %y to <4 x i64> 73*9880d681SAndroid Build Coastguard Worker %xor.i = xor <4 x i64> %0, %1 74*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i64> %xor.i to <4 x double> 75*9880d681SAndroid Build Coastguard Worker ; add forces execution domain 76*9880d681SAndroid Build Coastguard Worker %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0> 77*9880d681SAndroid Build Coastguard Worker ret <4 x double> %3 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @xorpd256fold(<4 x double> %y) nounwind uwtable readnone ssp { 81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xorpd256fold: 82*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorpd {{.*}}(%rip), %ymm0, %ymm0 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 87*9880d681SAndroid Build Coastguard Workerentry: 88*9880d681SAndroid Build Coastguard Worker %0 = bitcast <4 x double> %y to <4 x i64> 89*9880d681SAndroid Build Coastguard Worker %xor.i = xor <4 x i64> %0, <i64 4616752568008179712, i64 4614838538166547251, i64 4612361558371493478, i64 4608083138725491507> 90*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x i64> %xor.i to <4 x double> 91*9880d681SAndroid Build Coastguard Worker ; add forces execution domain 92*9880d681SAndroid Build Coastguard Worker %2 = fadd <4 x double> %1, <double 0x0, double 0x0, double 0x0, double 0x0> 93*9880d681SAndroid Build Coastguard Worker ret <4 x double> %2 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @xorps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp { 97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xorps256: 98*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorps %ymm0, %ymm1, %ymm0 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 101*9880d681SAndroid Build Coastguard Workerentry: 102*9880d681SAndroid Build Coastguard Worker %0 = bitcast <8 x float> %x to <8 x i32> 103*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x float> %y to <8 x i32> 104*9880d681SAndroid Build Coastguard Worker %xor.i = xor <8 x i32> %0, %1 105*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i32> %xor.i to <8 x float> 106*9880d681SAndroid Build Coastguard Worker ret <8 x float> %2 107*9880d681SAndroid Build Coastguard Worker} 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @xorps256fold(<8 x float> %y) nounwind uwtable readnone ssp { 110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xorps256fold: 111*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 114*9880d681SAndroid Build Coastguard Workerentry: 115*9880d681SAndroid Build Coastguard Worker %0 = bitcast <8 x float> %y to <8 x i32> 116*9880d681SAndroid Build Coastguard Worker %xor.i = xor <8 x i32> %0, <i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938, i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938> 117*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i32> %xor.i to <8 x float> 118*9880d681SAndroid Build Coastguard Worker ret <8 x float> %1 119*9880d681SAndroid Build Coastguard Worker} 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @orpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp { 122*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orpd256: 123*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vorpd %ymm0, %ymm1, %ymm0 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 128*9880d681SAndroid Build Coastguard Workerentry: 129*9880d681SAndroid Build Coastguard Worker %0 = bitcast <4 x double> %x to <4 x i64> 130*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x double> %y to <4 x i64> 131*9880d681SAndroid Build Coastguard Worker %or.i = or <4 x i64> %0, %1 132*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i64> %or.i to <4 x double> 133*9880d681SAndroid Build Coastguard Worker ; add forces execution domain 134*9880d681SAndroid Build Coastguard Worker %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0> 135*9880d681SAndroid Build Coastguard Worker ret <4 x double> %3 136*9880d681SAndroid Build Coastguard Worker} 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @orpd256fold(<4 x double> %y) nounwind uwtable readnone ssp { 139*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orpd256fold: 140*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 141*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vorpd {{.*}}(%rip), %ymm0, %ymm0 142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 145*9880d681SAndroid Build Coastguard Workerentry: 146*9880d681SAndroid Build Coastguard Worker %0 = bitcast <4 x double> %y to <4 x i64> 147*9880d681SAndroid Build Coastguard Worker %or.i = or <4 x i64> %0, <i64 4616752568008179712, i64 4614838538166547251, i64 4612361558371493478, i64 4608083138725491507> 148*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x i64> %or.i to <4 x double> 149*9880d681SAndroid Build Coastguard Worker ; add forces execution domain 150*9880d681SAndroid Build Coastguard Worker %2 = fadd <4 x double> %1, <double 0x0, double 0x0, double 0x0, double 0x0> 151*9880d681SAndroid Build Coastguard Worker ret <4 x double> %2 152*9880d681SAndroid Build Coastguard Worker} 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @orps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp { 155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orps256: 156*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vorps %ymm0, %ymm1, %ymm0 158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 159*9880d681SAndroid Build Coastguard Workerentry: 160*9880d681SAndroid Build Coastguard Worker %0 = bitcast <8 x float> %x to <8 x i32> 161*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x float> %y to <8 x i32> 162*9880d681SAndroid Build Coastguard Worker %or.i = or <8 x i32> %0, %1 163*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i32> %or.i to <8 x float> 164*9880d681SAndroid Build Coastguard Worker ret <8 x float> %2 165*9880d681SAndroid Build Coastguard Worker} 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @orps256fold(<8 x float> %y) nounwind uwtable readnone ssp { 168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orps256fold: 169*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vorps {{.*}}(%rip), %ymm0, %ymm0 171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 172*9880d681SAndroid Build Coastguard Workerentry: 173*9880d681SAndroid Build Coastguard Worker %0 = bitcast <8 x float> %y to <8 x i32> 174*9880d681SAndroid Build Coastguard Worker %or.i = or <8 x i32> %0, <i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938, i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938> 175*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i32> %or.i to <8 x float> 176*9880d681SAndroid Build Coastguard Worker ret <8 x float> %1 177*9880d681SAndroid Build Coastguard Worker} 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @andnotpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp { 180*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andnotpd256: 181*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vandnpd %ymm0, %ymm1, %ymm0 183*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 186*9880d681SAndroid Build Coastguard Workerentry: 187*9880d681SAndroid Build Coastguard Worker %0 = bitcast <4 x double> %x to <4 x i64> 188*9880d681SAndroid Build Coastguard Worker %neg.i = xor <4 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1> 189*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x double> %y to <4 x i64> 190*9880d681SAndroid Build Coastguard Worker %and.i = and <4 x i64> %1, %neg.i 191*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i64> %and.i to <4 x double> 192*9880d681SAndroid Build Coastguard Worker ; add forces execution domain 193*9880d681SAndroid Build Coastguard Worker %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0> 194*9880d681SAndroid Build Coastguard Worker ret <4 x double> %3 195*9880d681SAndroid Build Coastguard Worker} 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @andnotpd256fold(<4 x double> %y, <4 x double>* nocapture %x) nounwind uwtable readonly ssp { 198*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andnotpd256fold: 199*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vandnpd (%rdi), %ymm0, %ymm0 201*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 202*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 203*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 204*9880d681SAndroid Build Coastguard Workerentry: 205*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x double>, <4 x double>* %x, align 32 206*9880d681SAndroid Build Coastguard Worker %0 = bitcast <4 x double> %y to <4 x i64> 207*9880d681SAndroid Build Coastguard Worker %neg.i = xor <4 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1> 208*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x double> %tmp2 to <4 x i64> 209*9880d681SAndroid Build Coastguard Worker %and.i = and <4 x i64> %1, %neg.i 210*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i64> %and.i to <4 x double> 211*9880d681SAndroid Build Coastguard Worker ; add forces execution domain 212*9880d681SAndroid Build Coastguard Worker %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0> 213*9880d681SAndroid Build Coastguard Worker ret <4 x double> %3 214*9880d681SAndroid Build Coastguard Worker} 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @andnotps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp { 217*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andnotps256: 218*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vandnps %ymm0, %ymm1, %ymm0 220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 221*9880d681SAndroid Build Coastguard Workerentry: 222*9880d681SAndroid Build Coastguard Worker %0 = bitcast <8 x float> %x to <8 x i32> 223*9880d681SAndroid Build Coastguard Worker %neg.i = xor <8 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1> 224*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x float> %y to <8 x i32> 225*9880d681SAndroid Build Coastguard Worker %and.i = and <8 x i32> %1, %neg.i 226*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i32> %and.i to <8 x float> 227*9880d681SAndroid Build Coastguard Worker ret <8 x float> %2 228*9880d681SAndroid Build Coastguard Worker} 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @andnotps256fold(<8 x float> %y, <8 x float>* nocapture %x) nounwind uwtable readonly ssp { 231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andnotps256fold: 232*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 233*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vandnps (%rdi), %ymm0, %ymm0 234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 235*9880d681SAndroid Build Coastguard Workerentry: 236*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x float>, <8 x float>* %x, align 32 237*9880d681SAndroid Build Coastguard Worker %0 = bitcast <8 x float> %y to <8 x i32> 238*9880d681SAndroid Build Coastguard Worker %neg.i = xor <8 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1> 239*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x float> %tmp2 to <8 x i32> 240*9880d681SAndroid Build Coastguard Worker %and.i = and <8 x i32> %1, %neg.i 241*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i32> %and.i to <8 x float> 242*9880d681SAndroid Build Coastguard Worker ret <8 x float> %2 243*9880d681SAndroid Build Coastguard Worker} 244*9880d681SAndroid Build Coastguard Worker 245*9880d681SAndroid Build Coastguard Worker;;; Test that basic 2 x i64 logic use the integer version on AVX 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpandn(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp { 248*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpandn: 249*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 250*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq {{.*}}(%rip), %xmm0, %xmm1 251*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpandn %xmm0, %xmm1, %xmm0 252*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 253*9880d681SAndroid Build Coastguard Workerentry: 254*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 255*9880d681SAndroid Build Coastguard Worker %a2 = add <2 x i64> %a, <i64 1, i64 1> 256*9880d681SAndroid Build Coastguard Worker %y = xor <2 x i64> %a2, <i64 -1, i64 -1> 257*9880d681SAndroid Build Coastguard Worker %x = and <2 x i64> %a, %y 258*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 259*9880d681SAndroid Build Coastguard Worker} 260*9880d681SAndroid Build Coastguard Worker 261*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpand(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp { 262*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpand: 263*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 264*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq {{.*}}(%rip), %xmm0, %xmm0 265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpand %xmm1, %xmm0, %xmm0 266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 267*9880d681SAndroid Build Coastguard Workerentry: 268*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 269*9880d681SAndroid Build Coastguard Worker %a2 = add <2 x i64> %a, <i64 1, i64 1> 270*9880d681SAndroid Build Coastguard Worker %x = and <2 x i64> %a2, %b 271*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 272*9880d681SAndroid Build Coastguard Worker} 273*9880d681SAndroid Build Coastguard Worker 274