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: vpaddq256_test 6*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq %ymm{{.*}} 7*9880d681SAndroid Build Coastguard Worker; CHECK: ret 8*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpaddq256_test(<4 x i64> %i, <4 x i64> %j) nounwind readnone { 9*9880d681SAndroid Build Coastguard Worker %x = add <4 x i64> %i, %j 10*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 11*9880d681SAndroid Build Coastguard Worker} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq256_fold_test 14*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq (%rdi), %ymm{{.*}} 15*9880d681SAndroid Build Coastguard Worker; CHECK: ret 16*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpaddq256_fold_test(<4 x i64> %i, <4 x i64>* %j) nounwind { 17*9880d681SAndroid Build Coastguard Worker %tmp = load <4 x i64>, <4 x i64>* %j, align 4 18*9880d681SAndroid Build Coastguard Worker %x = add <4 x i64> %i, %tmp 19*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq256_broadcast_test 23*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq LCP{{.*}}(%rip){1to4}, %ymm{{.*}} 24*9880d681SAndroid Build Coastguard Worker; CHECK: ret 25*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpaddq256_broadcast_test(<4 x i64> %i) nounwind { 26*9880d681SAndroid Build Coastguard Worker %x = add <4 x i64> %i, <i64 1, i64 1, i64 1, i64 1> 27*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq256_broadcast2_test 31*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq (%rdi){1to4}, %ymm{{.*}} 32*9880d681SAndroid Build Coastguard Worker; CHECK: ret 33*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpaddq256_broadcast2_test(<4 x i64> %i, i64* %j.ptr) nounwind { 34*9880d681SAndroid Build Coastguard Worker %j = load i64, i64* %j.ptr 35*9880d681SAndroid Build Coastguard Worker %j.0 = insertelement <4 x i64> undef, i64 %j, i32 0 36*9880d681SAndroid Build Coastguard Worker %j.v = shufflevector <4 x i64> %j.0, <4 x i64> undef, <4 x i32> zeroinitializer 37*9880d681SAndroid Build Coastguard Worker %x = add <4 x i64> %i, %j.v 38*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_test 42*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %ymm{{.*}} 43*9880d681SAndroid Build Coastguard Worker; CHECK: ret 44*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_test(<8 x i32> %i, <8 x i32> %j) nounwind readnone { 45*9880d681SAndroid Build Coastguard Worker %x = add <8 x i32> %i, %j 46*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_fold_test 50*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %ymm{{.*}} 51*9880d681SAndroid Build Coastguard Worker; CHECK: ret 52*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_fold_test(<8 x i32> %i, <8 x i32>* %j) nounwind { 53*9880d681SAndroid Build Coastguard Worker %tmp = load <8 x i32>, <8 x i32>* %j, align 4 54*9880d681SAndroid Build Coastguard Worker %x = add <8 x i32> %i, %tmp 55*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_broadcast_test 59*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to8}, %ymm{{.*}} 60*9880d681SAndroid Build Coastguard Worker; CHECK: ret 61*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_broadcast_test(<8 x i32> %i) nounwind { 62*9880d681SAndroid Build Coastguard Worker %x = add <8 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 63*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_mask_test 67*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %ymm{{.*%k[1-7].*}} 68*9880d681SAndroid Build Coastguard Worker; CHECK: ret 69*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_mask_test(<8 x i32> %i, <8 x i32> %j, <8 x i32> %mask1) nounwind readnone { 70*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 71*9880d681SAndroid Build Coastguard Worker %x = add <8 x i32> %i, %j 72*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %i 73*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %r 74*9880d681SAndroid Build Coastguard Worker} 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_maskz_test 77*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %ymm{{.*{%k[1-7]} {z}.*}} 78*9880d681SAndroid Build Coastguard Worker; CHECK: ret 79*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_maskz_test(<8 x i32> %i, <8 x i32> %j, <8 x i32> %mask1) nounwind readnone { 80*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 81*9880d681SAndroid Build Coastguard Worker %x = add <8 x i32> %i, %j 82*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer 83*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %r 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_mask_fold_test 87*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %ymm{{.*%k[1-7]}} 88*9880d681SAndroid Build Coastguard Worker; CHECK: ret 89*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_mask_fold_test(<8 x i32> %i, <8 x i32>* %j.ptr, <8 x i32> %mask1) nounwind readnone { 90*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 91*9880d681SAndroid Build Coastguard Worker %j = load <8 x i32>, <8 x i32>* %j.ptr 92*9880d681SAndroid Build Coastguard Worker %x = add <8 x i32> %i, %j 93*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %i 94*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %r 95*9880d681SAndroid Build Coastguard Worker} 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_mask_broadcast_test 98*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to8}, %ymm{{.*{%k[1-7]}}} 99*9880d681SAndroid Build Coastguard Worker; CHECK: ret 100*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_mask_broadcast_test(<8 x i32> %i, <8 x i32> %mask1) nounwind readnone { 101*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 102*9880d681SAndroid Build Coastguard Worker %x = add <8 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 103*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %i 104*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %r 105*9880d681SAndroid Build Coastguard Worker} 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_maskz_fold_test 108*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %ymm{{.*{%k[1-7]} {z}}} 109*9880d681SAndroid Build Coastguard Worker; CHECK: ret 110*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_maskz_fold_test(<8 x i32> %i, <8 x i32>* %j.ptr, <8 x i32> %mask1) nounwind readnone { 111*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 112*9880d681SAndroid Build Coastguard Worker %j = load <8 x i32>, <8 x i32>* %j.ptr 113*9880d681SAndroid Build Coastguard Worker %x = add <8 x i32> %i, %j 114*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer 115*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %r 116*9880d681SAndroid Build Coastguard Worker} 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_maskz_broadcast_test 119*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to8}, %ymm{{.*{%k[1-7]} {z}}} 120*9880d681SAndroid Build Coastguard Worker; CHECK: ret 121*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_maskz_broadcast_test(<8 x i32> %i, <8 x i32> %mask1) nounwind readnone { 122*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 123*9880d681SAndroid Build Coastguard Worker %x = add <8 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 124*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer 125*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %r 126*9880d681SAndroid Build Coastguard Worker} 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubq256_test 129*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubq %ymm{{.*}} 130*9880d681SAndroid Build Coastguard Worker; CHECK: ret 131*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpsubq256_test(<4 x i64> %i, <4 x i64> %j) nounwind readnone { 132*9880d681SAndroid Build Coastguard Worker %x = sub <4 x i64> %i, %j 133*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 134*9880d681SAndroid Build Coastguard Worker} 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubd256_test 137*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubd %ymm{{.*}} 138*9880d681SAndroid Build Coastguard Worker; CHECK: ret 139*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpsubd256_test(<8 x i32> %i, <8 x i32> %j) nounwind readnone { 140*9880d681SAndroid Build Coastguard Worker %x = sub <8 x i32> %i, %j 141*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 142*9880d681SAndroid Build Coastguard Worker} 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpmulld256_test 145*9880d681SAndroid Build Coastguard Worker; CHECK: vpmulld %ymm{{.*}} 146*9880d681SAndroid Build Coastguard Worker; CHECK: ret 147*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpmulld256_test(<8 x i32> %i, <8 x i32> %j) { 148*9880d681SAndroid Build Coastguard Worker %x = mul <8 x i32> %i, %j 149*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 150*9880d681SAndroid Build Coastguard Worker} 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaddpd_256 153*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd{{.*}} 154*9880d681SAndroid Build Coastguard Worker; CHECK: ret 155*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_vaddpd_256(<4 x double> %y, <4 x double> %x) { 156*9880d681SAndroid Build Coastguard Workerentry: 157*9880d681SAndroid Build Coastguard Worker %add.i = fadd <4 x double> %x, %y 158*9880d681SAndroid Build Coastguard Worker ret <4 x double> %add.i 159*9880d681SAndroid Build Coastguard Worker} 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fold_vaddpd_256 162*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd LCP{{.*}}(%rip){{.*}} 163*9880d681SAndroid Build Coastguard Worker; CHECK: ret 164*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_fold_vaddpd_256(<4 x double> %y) { 165*9880d681SAndroid Build Coastguard Workerentry: 166*9880d681SAndroid Build Coastguard Worker %add.i = fadd <4 x double> %y, <double 4.500000e+00, double 3.400000e+00, double 4.500000e+00, double 5.600000e+00> 167*9880d681SAndroid Build Coastguard Worker ret <4 x double> %add.i 168*9880d681SAndroid Build Coastguard Worker} 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_broadcast_vaddpd_256 171*9880d681SAndroid Build Coastguard Worker; CHECK: LCP{{.*}}(%rip){1to8}, %ymm0, %ymm0 172*9880d681SAndroid Build Coastguard Worker; CHECK: ret 173*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_broadcast_vaddpd_256(<8 x float> %a) nounwind { 174*9880d681SAndroid Build Coastguard Worker %b = fadd <8 x float> %a, <float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000> 175*9880d681SAndroid Build Coastguard Worker ret <8 x float> %b 176*9880d681SAndroid Build Coastguard Worker} 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddps_256 179*9880d681SAndroid Build Coastguard Worker; CHECK: vaddps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 180*9880d681SAndroid Build Coastguard Worker; CHECK: ret 181*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vaddps_256(<8 x float> %dst, <8 x float> %i, 182*9880d681SAndroid Build Coastguard Worker <8 x float> %j, <8 x i32> %mask1) 183*9880d681SAndroid Build Coastguard Worker nounwind readnone { 184*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 185*9880d681SAndroid Build Coastguard Worker %x = fadd <8 x float> %i, %j 186*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x float> %x, <8 x float> %dst 187*9880d681SAndroid Build Coastguard Worker ret <8 x float> %r 188*9880d681SAndroid Build Coastguard Worker} 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmulps_256 191*9880d681SAndroid Build Coastguard Worker; CHECK: vmulps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 192*9880d681SAndroid Build Coastguard Worker; CHECK: ret 193*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vmulps_256(<8 x float> %dst, <8 x float> %i, 194*9880d681SAndroid Build Coastguard Worker <8 x float> %j, <8 x i32> %mask1) 195*9880d681SAndroid Build Coastguard Worker nounwind readnone { 196*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 197*9880d681SAndroid Build Coastguard Worker %x = fmul <8 x float> %i, %j 198*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x float> %x, <8 x float> %dst 199*9880d681SAndroid Build Coastguard Worker ret <8 x float> %r 200*9880d681SAndroid Build Coastguard Worker} 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vminps_256 203*9880d681SAndroid Build Coastguard Worker; CHECK: vminps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 204*9880d681SAndroid Build Coastguard Worker; CHECK: ret 205*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vminps_256(<8 x float> %dst, <8 x float> %i, 206*9880d681SAndroid Build Coastguard Worker <8 x float> %j, <8 x i32> %mask1) 207*9880d681SAndroid Build Coastguard Worker nounwind readnone { 208*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 209*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp olt <8 x float> %i, %j 210*9880d681SAndroid Build Coastguard Worker %min = select <8 x i1> %cmp_res, <8 x float> %i, <8 x float> %j 211*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x float> %min, <8 x float> %dst 212*9880d681SAndroid Build Coastguard Worker ret <8 x float> %r 213*9880d681SAndroid Build Coastguard Worker} 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmaxps_256 216*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 217*9880d681SAndroid Build Coastguard Worker; CHECK: ret 218*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vmaxps_256(<8 x float> %dst, <8 x float> %i, 219*9880d681SAndroid Build Coastguard Worker <8 x float> %j, <8 x i32> %mask1) 220*9880d681SAndroid Build Coastguard Worker nounwind readnone { 221*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 222*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp ogt <8 x float> %i, %j 223*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %cmp_res, <8 x float> %i, <8 x float> %j 224*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x float> %max, <8 x float> %dst 225*9880d681SAndroid Build Coastguard Worker ret <8 x float> %r 226*9880d681SAndroid Build Coastguard Worker} 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vsubps_256 229*9880d681SAndroid Build Coastguard Worker; CHECK: vsubps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 230*9880d681SAndroid Build Coastguard Worker; CHECK: ret 231*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vsubps_256(<8 x float> %dst, <8 x float> %i, 232*9880d681SAndroid Build Coastguard Worker <8 x float> %j, <8 x i32> %mask1) 233*9880d681SAndroid Build Coastguard Worker nounwind readnone { 234*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 235*9880d681SAndroid Build Coastguard Worker %x = fsub <8 x float> %i, %j 236*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x float> %x, <8 x float> %dst 237*9880d681SAndroid Build Coastguard Worker ret <8 x float> %r 238*9880d681SAndroid Build Coastguard Worker} 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vdivps_256 241*9880d681SAndroid Build Coastguard Worker; CHECK: vdivps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 242*9880d681SAndroid Build Coastguard Worker; CHECK: ret 243*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vdivps_256(<8 x float> %dst, <8 x float> %i, 244*9880d681SAndroid Build Coastguard Worker <8 x float> %j, <8 x i32> %mask1) 245*9880d681SAndroid Build Coastguard Worker nounwind readnone { 246*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 247*9880d681SAndroid Build Coastguard Worker %x = fdiv <8 x float> %i, %j 248*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x float> %x, <8 x float> %dst 249*9880d681SAndroid Build Coastguard Worker ret <8 x float> %r 250*9880d681SAndroid Build Coastguard Worker} 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmulpd_256 253*9880d681SAndroid Build Coastguard Worker; CHECK: vmulpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 254*9880d681SAndroid Build Coastguard Worker; CHECK: ret 255*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vmulpd_256(<4 x double> %dst, <4 x double> %i, 256*9880d681SAndroid Build Coastguard Worker <4 x double> %j, <4 x i64> %mask1) 257*9880d681SAndroid Build Coastguard Worker nounwind readnone { 258*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i64> %mask1, zeroinitializer 259*9880d681SAndroid Build Coastguard Worker %x = fmul <4 x double> %i, %j 260*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %dst 261*9880d681SAndroid Build Coastguard Worker ret <4 x double> %r 262*9880d681SAndroid Build Coastguard Worker} 263*9880d681SAndroid Build Coastguard Worker 264*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vminpd_256 265*9880d681SAndroid Build Coastguard Worker; CHECK: vminpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 266*9880d681SAndroid Build Coastguard Worker; CHECK: ret 267*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vminpd_256(<4 x double> %dst, <4 x double> %i, 268*9880d681SAndroid Build Coastguard Worker <4 x double> %j, <4 x i64> %mask1) 269*9880d681SAndroid Build Coastguard Worker nounwind readnone { 270*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i64> %mask1, zeroinitializer 271*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp olt <4 x double> %i, %j 272*9880d681SAndroid Build Coastguard Worker %min = select <4 x i1> %cmp_res, <4 x double> %i, <4 x double> %j 273*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x double> %min, <4 x double> %dst 274*9880d681SAndroid Build Coastguard Worker ret <4 x double> %r 275*9880d681SAndroid Build Coastguard Worker} 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmaxpd_256 278*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 279*9880d681SAndroid Build Coastguard Worker; CHECK: ret 280*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vmaxpd_256(<4 x double> %dst, <4 x double> %i, 281*9880d681SAndroid Build Coastguard Worker <4 x double> %j, <4 x i64> %mask1) 282*9880d681SAndroid Build Coastguard Worker nounwind readnone { 283*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i64> %mask1, zeroinitializer 284*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp ogt <4 x double> %i, %j 285*9880d681SAndroid Build Coastguard Worker %max = select <4 x i1> %cmp_res, <4 x double> %i, <4 x double> %j 286*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x double> %max, <4 x double> %dst 287*9880d681SAndroid Build Coastguard Worker ret <4 x double> %r 288*9880d681SAndroid Build Coastguard Worker} 289*9880d681SAndroid Build Coastguard Worker 290*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vsubpd_256 291*9880d681SAndroid Build Coastguard Worker; CHECK: vsubpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 292*9880d681SAndroid Build Coastguard Worker; CHECK: ret 293*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vsubpd_256(<4 x double> %dst, <4 x double> %i, 294*9880d681SAndroid Build Coastguard Worker <4 x double> %j, <4 x i64> %mask1) 295*9880d681SAndroid Build Coastguard Worker nounwind readnone { 296*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i64> %mask1, zeroinitializer 297*9880d681SAndroid Build Coastguard Worker %x = fsub <4 x double> %i, %j 298*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %dst 299*9880d681SAndroid Build Coastguard Worker ret <4 x double> %r 300*9880d681SAndroid Build Coastguard Worker} 301*9880d681SAndroid Build Coastguard Worker 302*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vdivpd_256 303*9880d681SAndroid Build Coastguard Worker; CHECK: vdivpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 304*9880d681SAndroid Build Coastguard Worker; CHECK: ret 305*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vdivpd_256(<4 x double> %dst, <4 x double> %i, 306*9880d681SAndroid Build Coastguard Worker <4 x double> %j, <4 x i64> %mask1) 307*9880d681SAndroid Build Coastguard Worker nounwind readnone { 308*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i64> %mask1, zeroinitializer 309*9880d681SAndroid Build Coastguard Worker %x = fdiv <4 x double> %i, %j 310*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %dst 311*9880d681SAndroid Build Coastguard Worker ret <4 x double> %r 312*9880d681SAndroid Build Coastguard Worker} 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddpd_256 315*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}} 316*9880d681SAndroid Build Coastguard Worker; CHECK: ret 317*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vaddpd_256(<4 x double> %dst, <4 x double> %i, 318*9880d681SAndroid Build Coastguard Worker <4 x double> %j, <4 x i64> %mask1) 319*9880d681SAndroid Build Coastguard Worker nounwind readnone { 320*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i64> %mask1, zeroinitializer 321*9880d681SAndroid Build Coastguard Worker %x = fadd <4 x double> %i, %j 322*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %dst 323*9880d681SAndroid Build Coastguard Worker ret <4 x double> %r 324*9880d681SAndroid Build Coastguard Worker} 325*9880d681SAndroid Build Coastguard Worker 326*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_vaddpd_256 327*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]} {z}}} 328*9880d681SAndroid Build Coastguard Worker; CHECK: ret 329*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_maskz_vaddpd_256(<4 x double> %i, <4 x double> %j, 330*9880d681SAndroid Build Coastguard Worker <4 x i64> %mask1) nounwind readnone { 331*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i64> %mask1, zeroinitializer 332*9880d681SAndroid Build Coastguard Worker %x = fadd <4 x double> %i, %j 333*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> zeroinitializer 334*9880d681SAndroid Build Coastguard Worker ret <4 x double> %r 335*9880d681SAndroid Build Coastguard Worker} 336*9880d681SAndroid Build Coastguard Worker 337*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_fold_vaddpd_256 338*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi), {{.*%ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}.*}} 339*9880d681SAndroid Build Coastguard Worker; CHECK: ret 340*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_fold_vaddpd_256(<4 x double> %dst, <4 x double> %i, 341*9880d681SAndroid Build Coastguard Worker <4 x double>* %j, <4 x i64> %mask1) 342*9880d681SAndroid Build Coastguard Worker nounwind { 343*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i64> %mask1, zeroinitializer 344*9880d681SAndroid Build Coastguard Worker %tmp = load <4 x double>, <4 x double>* %j 345*9880d681SAndroid Build Coastguard Worker %x = fadd <4 x double> %i, %tmp 346*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %dst 347*9880d681SAndroid Build Coastguard Worker ret <4 x double> %r 348*9880d681SAndroid Build Coastguard Worker} 349*9880d681SAndroid Build Coastguard Worker 350*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_fold_vaddpd_256 351*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi), {{.*%ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]} {z}.*}} 352*9880d681SAndroid Build Coastguard Worker; CHECK: ret 353*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_maskz_fold_vaddpd_256(<4 x double> %i, <4 x double>* %j, 354*9880d681SAndroid Build Coastguard Worker <4 x i64> %mask1) nounwind { 355*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i64> %mask1, zeroinitializer 356*9880d681SAndroid Build Coastguard Worker %tmp = load <4 x double>, <4 x double>* %j 357*9880d681SAndroid Build Coastguard Worker %x = fadd <4 x double> %i, %tmp 358*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> zeroinitializer 359*9880d681SAndroid Build Coastguard Worker ret <4 x double> %r 360*9880d681SAndroid Build Coastguard Worker} 361*9880d681SAndroid Build Coastguard Worker 362*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_broadcast2_vaddpd_256 363*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to4}, %ymm{{.*}} 364*9880d681SAndroid Build Coastguard Worker; CHECK: ret 365*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_broadcast2_vaddpd_256(<4 x double> %i, double* %j) nounwind { 366*9880d681SAndroid Build Coastguard Worker %tmp = load double, double* %j 367*9880d681SAndroid Build Coastguard Worker %b = insertelement <4 x double> undef, double %tmp, i32 0 368*9880d681SAndroid Build Coastguard Worker %c = shufflevector <4 x double> %b, <4 x double> undef, 369*9880d681SAndroid Build Coastguard Worker <4 x i32> zeroinitializer 370*9880d681SAndroid Build Coastguard Worker %x = fadd <4 x double> %c, %i 371*9880d681SAndroid Build Coastguard Worker ret <4 x double> %x 372*9880d681SAndroid Build Coastguard Worker} 373*9880d681SAndroid Build Coastguard Worker 374*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_broadcast_vaddpd_256 375*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to4}, %ymm{{.*{%k[1-7]}.*}} 376*9880d681SAndroid Build Coastguard Worker; CHECK: ret 377*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_broadcast_vaddpd_256(<4 x double> %dst, <4 x double> %i, 378*9880d681SAndroid Build Coastguard Worker double* %j, <4 x i64> %mask1) nounwind { 379*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i64> %mask1, zeroinitializer 380*9880d681SAndroid Build Coastguard Worker %tmp = load double, double* %j 381*9880d681SAndroid Build Coastguard Worker %b = insertelement <4 x double> undef, double %tmp, i32 0 382*9880d681SAndroid Build Coastguard Worker %c = shufflevector <4 x double> %b, <4 x double> undef, 383*9880d681SAndroid Build Coastguard Worker <4 x i32> zeroinitializer 384*9880d681SAndroid Build Coastguard Worker %x = fadd <4 x double> %c, %i 385*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %i 386*9880d681SAndroid Build Coastguard Worker ret <4 x double> %r 387*9880d681SAndroid Build Coastguard Worker} 388*9880d681SAndroid Build Coastguard Worker 389*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_broadcast_vaddpd_256 390*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to4}, %ymm{{.*{%k[1-7]} {z}.*}} 391*9880d681SAndroid Build Coastguard Worker; CHECK: ret 392*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_maskz_broadcast_vaddpd_256(<4 x double> %i, double* %j, 393*9880d681SAndroid Build Coastguard Worker <4 x i64> %mask1) nounwind { 394*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i64> %mask1, zeroinitializer 395*9880d681SAndroid Build Coastguard Worker %tmp = load double, double* %j 396*9880d681SAndroid Build Coastguard Worker %b = insertelement <4 x double> undef, double %tmp, i32 0 397*9880d681SAndroid Build Coastguard Worker %c = shufflevector <4 x double> %b, <4 x double> undef, 398*9880d681SAndroid Build Coastguard Worker <4 x i32> zeroinitializer 399*9880d681SAndroid Build Coastguard Worker %x = fadd <4 x double> %c, %i 400*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> zeroinitializer 401*9880d681SAndroid Build Coastguard Worker ret <4 x double> %r 402*9880d681SAndroid Build Coastguard Worker} 403*9880d681SAndroid Build Coastguard Worker 404*9880d681SAndroid Build Coastguard Worker; 128-bit 405*9880d681SAndroid Build Coastguard Worker 406*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq128_test 407*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq %xmm{{.*}} 408*9880d681SAndroid Build Coastguard Worker; CHECK: ret 409*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpaddq128_test(<2 x i64> %i, <2 x i64> %j) nounwind readnone { 410*9880d681SAndroid Build Coastguard Worker %x = add <2 x i64> %i, %j 411*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 412*9880d681SAndroid Build Coastguard Worker} 413*9880d681SAndroid Build Coastguard Worker 414*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq128_fold_test 415*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq (%rdi), %xmm{{.*}} 416*9880d681SAndroid Build Coastguard Worker; CHECK: ret 417*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpaddq128_fold_test(<2 x i64> %i, <2 x i64>* %j) nounwind { 418*9880d681SAndroid Build Coastguard Worker %tmp = load <2 x i64>, <2 x i64>* %j, align 4 419*9880d681SAndroid Build Coastguard Worker %x = add <2 x i64> %i, %tmp 420*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 421*9880d681SAndroid Build Coastguard Worker} 422*9880d681SAndroid Build Coastguard Worker 423*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq128_broadcast2_test 424*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq (%rdi){1to2}, %xmm{{.*}} 425*9880d681SAndroid Build Coastguard Worker; CHECK: ret 426*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpaddq128_broadcast2_test(<2 x i64> %i, i64* %j) nounwind { 427*9880d681SAndroid Build Coastguard Worker %tmp = load i64, i64* %j 428*9880d681SAndroid Build Coastguard Worker %j.0 = insertelement <2 x i64> undef, i64 %tmp, i32 0 429*9880d681SAndroid Build Coastguard Worker %j.1 = insertelement <2 x i64> %j.0, i64 %tmp, i32 1 430*9880d681SAndroid Build Coastguard Worker %x = add <2 x i64> %i, %j.1 431*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 432*9880d681SAndroid Build Coastguard Worker} 433*9880d681SAndroid Build Coastguard Worker 434*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_test 435*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %xmm{{.*}} 436*9880d681SAndroid Build Coastguard Worker; CHECK: ret 437*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_test(<4 x i32> %i, <4 x i32> %j) nounwind readnone { 438*9880d681SAndroid Build Coastguard Worker %x = add <4 x i32> %i, %j 439*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 440*9880d681SAndroid Build Coastguard Worker} 441*9880d681SAndroid Build Coastguard Worker 442*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_fold_test 443*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %xmm{{.*}} 444*9880d681SAndroid Build Coastguard Worker; CHECK: ret 445*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_fold_test(<4 x i32> %i, <4 x i32>* %j) nounwind { 446*9880d681SAndroid Build Coastguard Worker %tmp = load <4 x i32>, <4 x i32>* %j, align 4 447*9880d681SAndroid Build Coastguard Worker %x = add <4 x i32> %i, %tmp 448*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 449*9880d681SAndroid Build Coastguard Worker} 450*9880d681SAndroid Build Coastguard Worker 451*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_broadcast_test 452*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to4}, %xmm{{.*}} 453*9880d681SAndroid Build Coastguard Worker; CHECK: ret 454*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_broadcast_test(<4 x i32> %i) nounwind { 455*9880d681SAndroid Build Coastguard Worker %x = add <4 x i32> %i, <i32 1, i32 1, i32 1, i32 1> 456*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 457*9880d681SAndroid Build Coastguard Worker} 458*9880d681SAndroid Build Coastguard Worker 459*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_mask_test 460*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %xmm{{.*%k[1-7].*}} 461*9880d681SAndroid Build Coastguard Worker; CHECK: ret 462*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_mask_test(<4 x i32> %i, <4 x i32> %j, <4 x i32> %mask1) nounwind readnone { 463*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 464*9880d681SAndroid Build Coastguard Worker %x = add <4 x i32> %i, %j 465*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %i 466*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r 467*9880d681SAndroid Build Coastguard Worker} 468*9880d681SAndroid Build Coastguard Worker 469*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_maskz_test 470*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %xmm{{.*{%k[1-7]} {z}.*}} 471*9880d681SAndroid Build Coastguard Worker; CHECK: ret 472*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_maskz_test(<4 x i32> %i, <4 x i32> %j, <4 x i32> %mask1) nounwind readnone { 473*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 474*9880d681SAndroid Build Coastguard Worker %x = add <4 x i32> %i, %j 475*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer 476*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r 477*9880d681SAndroid Build Coastguard Worker} 478*9880d681SAndroid Build Coastguard Worker 479*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_mask_fold_test 480*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %xmm{{.*%k[1-7]}} 481*9880d681SAndroid Build Coastguard Worker; CHECK: ret 482*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_mask_fold_test(<4 x i32> %i, <4 x i32>* %j.ptr, <4 x i32> %mask1) nounwind readnone { 483*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 484*9880d681SAndroid Build Coastguard Worker %j = load <4 x i32>, <4 x i32>* %j.ptr 485*9880d681SAndroid Build Coastguard Worker %x = add <4 x i32> %i, %j 486*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %i 487*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r 488*9880d681SAndroid Build Coastguard Worker} 489*9880d681SAndroid Build Coastguard Worker 490*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_mask_broadcast_test 491*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to4}, %xmm{{.*{%k[1-7]}}} 492*9880d681SAndroid Build Coastguard Worker; CHECK: ret 493*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_mask_broadcast_test(<4 x i32> %i, <4 x i32> %mask1) nounwind readnone { 494*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 495*9880d681SAndroid Build Coastguard Worker %x = add <4 x i32> %i, <i32 1, i32 1, i32 1, i32 1> 496*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %i 497*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r 498*9880d681SAndroid Build Coastguard Worker} 499*9880d681SAndroid Build Coastguard Worker 500*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_maskz_fold_test 501*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %xmm{{.*{%k[1-7]} {z}}} 502*9880d681SAndroid Build Coastguard Worker; CHECK: ret 503*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_maskz_fold_test(<4 x i32> %i, <4 x i32>* %j.ptr, <4 x i32> %mask1) nounwind readnone { 504*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 505*9880d681SAndroid Build Coastguard Worker %j = load <4 x i32>, <4 x i32>* %j.ptr 506*9880d681SAndroid Build Coastguard Worker %x = add <4 x i32> %i, %j 507*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer 508*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r 509*9880d681SAndroid Build Coastguard Worker} 510*9880d681SAndroid Build Coastguard Worker 511*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_maskz_broadcast_test 512*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to4}, %xmm{{.*{%k[1-7]} {z}}} 513*9880d681SAndroid Build Coastguard Worker; CHECK: ret 514*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_maskz_broadcast_test(<4 x i32> %i, <4 x i32> %mask1) nounwind readnone { 515*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 516*9880d681SAndroid Build Coastguard Worker %x = add <4 x i32> %i, <i32 1, i32 1, i32 1, i32 1> 517*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer 518*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r 519*9880d681SAndroid Build Coastguard Worker} 520*9880d681SAndroid Build Coastguard Worker 521*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubq128_test 522*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubq %xmm{{.*}} 523*9880d681SAndroid Build Coastguard Worker; CHECK: ret 524*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpsubq128_test(<2 x i64> %i, <2 x i64> %j) nounwind readnone { 525*9880d681SAndroid Build Coastguard Worker %x = sub <2 x i64> %i, %j 526*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 527*9880d681SAndroid Build Coastguard Worker} 528*9880d681SAndroid Build Coastguard Worker 529*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubd128_test 530*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubd %xmm{{.*}} 531*9880d681SAndroid Build Coastguard Worker; CHECK: ret 532*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpsubd128_test(<4 x i32> %i, <4 x i32> %j) nounwind readnone { 533*9880d681SAndroid Build Coastguard Worker %x = sub <4 x i32> %i, %j 534*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 535*9880d681SAndroid Build Coastguard Worker} 536*9880d681SAndroid Build Coastguard Worker 537*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpmulld128_test 538*9880d681SAndroid Build Coastguard Worker; CHECK: vpmulld %xmm{{.*}} 539*9880d681SAndroid Build Coastguard Worker; CHECK: ret 540*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpmulld128_test(<4 x i32> %i, <4 x i32> %j) { 541*9880d681SAndroid Build Coastguard Worker %x = mul <4 x i32> %i, %j 542*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 543*9880d681SAndroid Build Coastguard Worker} 544*9880d681SAndroid Build Coastguard Worker 545*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaddpd_128 546*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd{{.*}} 547*9880d681SAndroid Build Coastguard Worker; CHECK: ret 548*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vaddpd_128(<2 x double> %y, <2 x double> %x) { 549*9880d681SAndroid Build Coastguard Workerentry: 550*9880d681SAndroid Build Coastguard Worker %add.i = fadd <2 x double> %x, %y 551*9880d681SAndroid Build Coastguard Worker ret <2 x double> %add.i 552*9880d681SAndroid Build Coastguard Worker} 553*9880d681SAndroid Build Coastguard Worker 554*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fold_vaddpd_128 555*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd LCP{{.*}}(%rip){{.*}} 556*9880d681SAndroid Build Coastguard Worker; CHECK: ret 557*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_fold_vaddpd_128(<2 x double> %y) { 558*9880d681SAndroid Build Coastguard Workerentry: 559*9880d681SAndroid Build Coastguard Worker %add.i = fadd <2 x double> %y, <double 4.500000e+00, double 3.400000e+00> 560*9880d681SAndroid Build Coastguard Worker ret <2 x double> %add.i 561*9880d681SAndroid Build Coastguard Worker} 562*9880d681SAndroid Build Coastguard Worker 563*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_broadcast_vaddpd_128 564*9880d681SAndroid Build Coastguard Worker; CHECK: LCP{{.*}}(%rip){1to4}, %xmm0, %xmm0 565*9880d681SAndroid Build Coastguard Worker; CHECK: ret 566*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_broadcast_vaddpd_128(<4 x float> %a) nounwind { 567*9880d681SAndroid Build Coastguard Worker %b = fadd <4 x float> %a, <float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000> 568*9880d681SAndroid Build Coastguard Worker ret <4 x float> %b 569*9880d681SAndroid Build Coastguard Worker} 570*9880d681SAndroid Build Coastguard Worker 571*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddps_128 572*9880d681SAndroid Build Coastguard Worker; CHECK: vaddps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 573*9880d681SAndroid Build Coastguard Worker; CHECK: ret 574*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vaddps_128(<4 x float> %dst, <4 x float> %i, 575*9880d681SAndroid Build Coastguard Worker <4 x float> %j, <4 x i32> %mask1) 576*9880d681SAndroid Build Coastguard Worker nounwind readnone { 577*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 578*9880d681SAndroid Build Coastguard Worker %x = fadd <4 x float> %i, %j 579*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x float> %x, <4 x float> %dst 580*9880d681SAndroid Build Coastguard Worker ret <4 x float> %r 581*9880d681SAndroid Build Coastguard Worker} 582*9880d681SAndroid Build Coastguard Worker 583*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmulps_128 584*9880d681SAndroid Build Coastguard Worker; CHECK: vmulps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 585*9880d681SAndroid Build Coastguard Worker; CHECK: ret 586*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vmulps_128(<4 x float> %dst, <4 x float> %i, 587*9880d681SAndroid Build Coastguard Worker <4 x float> %j, <4 x i32> %mask1) 588*9880d681SAndroid Build Coastguard Worker nounwind readnone { 589*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 590*9880d681SAndroid Build Coastguard Worker %x = fmul <4 x float> %i, %j 591*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x float> %x, <4 x float> %dst 592*9880d681SAndroid Build Coastguard Worker ret <4 x float> %r 593*9880d681SAndroid Build Coastguard Worker} 594*9880d681SAndroid Build Coastguard Worker 595*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vminps_128 596*9880d681SAndroid Build Coastguard Worker; CHECK: vminps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 597*9880d681SAndroid Build Coastguard Worker; CHECK: ret 598*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vminps_128(<4 x float> %dst, <4 x float> %i, 599*9880d681SAndroid Build Coastguard Worker <4 x float> %j, <4 x i32> %mask1) 600*9880d681SAndroid Build Coastguard Worker nounwind readnone { 601*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 602*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp olt <4 x float> %i, %j 603*9880d681SAndroid Build Coastguard Worker %min = select <4 x i1> %cmp_res, <4 x float> %i, <4 x float> %j 604*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x float> %min, <4 x float> %dst 605*9880d681SAndroid Build Coastguard Worker ret <4 x float> %r 606*9880d681SAndroid Build Coastguard Worker} 607*9880d681SAndroid Build Coastguard Worker 608*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmaxps_128 609*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 610*9880d681SAndroid Build Coastguard Worker; CHECK: ret 611*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vmaxps_128(<4 x float> %dst, <4 x float> %i, 612*9880d681SAndroid Build Coastguard Worker <4 x float> %j, <4 x i32> %mask1) 613*9880d681SAndroid Build Coastguard Worker nounwind readnone { 614*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 615*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp ogt <4 x float> %i, %j 616*9880d681SAndroid Build Coastguard Worker %max = select <4 x i1> %cmp_res, <4 x float> %i, <4 x float> %j 617*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x float> %max, <4 x float> %dst 618*9880d681SAndroid Build Coastguard Worker ret <4 x float> %r 619*9880d681SAndroid Build Coastguard Worker} 620*9880d681SAndroid Build Coastguard Worker 621*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vsubps_128 622*9880d681SAndroid Build Coastguard Worker; CHECK: vsubps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 623*9880d681SAndroid Build Coastguard Worker; CHECK: ret 624*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vsubps_128(<4 x float> %dst, <4 x float> %i, 625*9880d681SAndroid Build Coastguard Worker <4 x float> %j, <4 x i32> %mask1) 626*9880d681SAndroid Build Coastguard Worker nounwind readnone { 627*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 628*9880d681SAndroid Build Coastguard Worker %x = fsub <4 x float> %i, %j 629*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x float> %x, <4 x float> %dst 630*9880d681SAndroid Build Coastguard Worker ret <4 x float> %r 631*9880d681SAndroid Build Coastguard Worker} 632*9880d681SAndroid Build Coastguard Worker 633*9880d681SAndroid Build Coastguard Worker 634*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vdivps_128 635*9880d681SAndroid Build Coastguard Worker; CHECK: vdivps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 636*9880d681SAndroid Build Coastguard Worker; CHECK: ret 637*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vdivps_128(<4 x float> %dst, <4 x float> %i, 638*9880d681SAndroid Build Coastguard Worker <4 x float> %j, <4 x i32> %mask1) 639*9880d681SAndroid Build Coastguard Worker nounwind readnone { 640*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <4 x i32> %mask1, zeroinitializer 641*9880d681SAndroid Build Coastguard Worker %x = fdiv <4 x float> %i, %j 642*9880d681SAndroid Build Coastguard Worker %r = select <4 x i1> %mask, <4 x float> %x, <4 x float> %dst 643*9880d681SAndroid Build Coastguard Worker ret <4 x float> %r 644*9880d681SAndroid Build Coastguard Worker} 645*9880d681SAndroid Build Coastguard Worker 646*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmulpd_128 647*9880d681SAndroid Build Coastguard Worker; CHECK: vmulpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 648*9880d681SAndroid Build Coastguard Worker; CHECK: ret 649*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vmulpd_128(<2 x double> %dst, <2 x double> %i, 650*9880d681SAndroid Build Coastguard Worker <2 x double> %j, <2 x i64> %mask1) 651*9880d681SAndroid Build Coastguard Worker nounwind readnone { 652*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <2 x i64> %mask1, zeroinitializer 653*9880d681SAndroid Build Coastguard Worker %x = fmul <2 x double> %i, %j 654*9880d681SAndroid Build Coastguard Worker %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %dst 655*9880d681SAndroid Build Coastguard Worker ret <2 x double> %r 656*9880d681SAndroid Build Coastguard Worker} 657*9880d681SAndroid Build Coastguard Worker 658*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vminpd_128 659*9880d681SAndroid Build Coastguard Worker; CHECK: vminpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 660*9880d681SAndroid Build Coastguard Worker; CHECK: ret 661*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vminpd_128(<2 x double> %dst, <2 x double> %i, 662*9880d681SAndroid Build Coastguard Worker <2 x double> %j, <2 x i64> %mask1) 663*9880d681SAndroid Build Coastguard Worker nounwind readnone { 664*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <2 x i64> %mask1, zeroinitializer 665*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp olt <2 x double> %i, %j 666*9880d681SAndroid Build Coastguard Worker %min = select <2 x i1> %cmp_res, <2 x double> %i, <2 x double> %j 667*9880d681SAndroid Build Coastguard Worker %r = select <2 x i1> %mask, <2 x double> %min, <2 x double> %dst 668*9880d681SAndroid Build Coastguard Worker ret <2 x double> %r 669*9880d681SAndroid Build Coastguard Worker} 670*9880d681SAndroid Build Coastguard Worker 671*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmaxpd_128 672*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 673*9880d681SAndroid Build Coastguard Worker; CHECK: ret 674*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vmaxpd_128(<2 x double> %dst, <2 x double> %i, 675*9880d681SAndroid Build Coastguard Worker <2 x double> %j, <2 x i64> %mask1) 676*9880d681SAndroid Build Coastguard Worker nounwind readnone { 677*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <2 x i64> %mask1, zeroinitializer 678*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp ogt <2 x double> %i, %j 679*9880d681SAndroid Build Coastguard Worker %max = select <2 x i1> %cmp_res, <2 x double> %i, <2 x double> %j 680*9880d681SAndroid Build Coastguard Worker %r = select <2 x i1> %mask, <2 x double> %max, <2 x double> %dst 681*9880d681SAndroid Build Coastguard Worker ret <2 x double> %r 682*9880d681SAndroid Build Coastguard Worker} 683*9880d681SAndroid Build Coastguard Worker 684*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vsubpd_128 685*9880d681SAndroid Build Coastguard Worker; CHECK: vsubpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 686*9880d681SAndroid Build Coastguard Worker; CHECK: ret 687*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vsubpd_128(<2 x double> %dst, <2 x double> %i, 688*9880d681SAndroid Build Coastguard Worker <2 x double> %j, <2 x i64> %mask1) 689*9880d681SAndroid Build Coastguard Worker nounwind readnone { 690*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <2 x i64> %mask1, zeroinitializer 691*9880d681SAndroid Build Coastguard Worker %x = fsub <2 x double> %i, %j 692*9880d681SAndroid Build Coastguard Worker %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %dst 693*9880d681SAndroid Build Coastguard Worker ret <2 x double> %r 694*9880d681SAndroid Build Coastguard Worker} 695*9880d681SAndroid Build Coastguard Worker 696*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vdivpd_128 697*9880d681SAndroid Build Coastguard Worker; CHECK: vdivpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 698*9880d681SAndroid Build Coastguard Worker; CHECK: ret 699*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vdivpd_128(<2 x double> %dst, <2 x double> %i, 700*9880d681SAndroid Build Coastguard Worker <2 x double> %j, <2 x i64> %mask1) 701*9880d681SAndroid Build Coastguard Worker nounwind readnone { 702*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <2 x i64> %mask1, zeroinitializer 703*9880d681SAndroid Build Coastguard Worker %x = fdiv <2 x double> %i, %j 704*9880d681SAndroid Build Coastguard Worker %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %dst 705*9880d681SAndroid Build Coastguard Worker ret <2 x double> %r 706*9880d681SAndroid Build Coastguard Worker} 707*9880d681SAndroid Build Coastguard Worker 708*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddpd_128 709*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}} 710*9880d681SAndroid Build Coastguard Worker; CHECK: ret 711*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vaddpd_128(<2 x double> %dst, <2 x double> %i, 712*9880d681SAndroid Build Coastguard Worker <2 x double> %j, <2 x i64> %mask1) 713*9880d681SAndroid Build Coastguard Worker nounwind readnone { 714*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <2 x i64> %mask1, zeroinitializer 715*9880d681SAndroid Build Coastguard Worker %x = fadd <2 x double> %i, %j 716*9880d681SAndroid Build Coastguard Worker %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %dst 717*9880d681SAndroid Build Coastguard Worker ret <2 x double> %r 718*9880d681SAndroid Build Coastguard Worker} 719*9880d681SAndroid Build Coastguard Worker 720*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_vaddpd_128 721*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]} {z}}} 722*9880d681SAndroid Build Coastguard Worker; CHECK: ret 723*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_maskz_vaddpd_128(<2 x double> %i, <2 x double> %j, 724*9880d681SAndroid Build Coastguard Worker <2 x i64> %mask1) nounwind readnone { 725*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <2 x i64> %mask1, zeroinitializer 726*9880d681SAndroid Build Coastguard Worker %x = fadd <2 x double> %i, %j 727*9880d681SAndroid Build Coastguard Worker %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> zeroinitializer 728*9880d681SAndroid Build Coastguard Worker ret <2 x double> %r 729*9880d681SAndroid Build Coastguard Worker} 730*9880d681SAndroid Build Coastguard Worker 731*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_fold_vaddpd_128 732*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi), {{.*%xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}.*}} 733*9880d681SAndroid Build Coastguard Worker; CHECK: ret 734*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_fold_vaddpd_128(<2 x double> %dst, <2 x double> %i, 735*9880d681SAndroid Build Coastguard Worker <2 x double>* %j, <2 x i64> %mask1) 736*9880d681SAndroid Build Coastguard Worker nounwind { 737*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <2 x i64> %mask1, zeroinitializer 738*9880d681SAndroid Build Coastguard Worker %tmp = load <2 x double>, <2 x double>* %j 739*9880d681SAndroid Build Coastguard Worker %x = fadd <2 x double> %i, %tmp 740*9880d681SAndroid Build Coastguard Worker %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %dst 741*9880d681SAndroid Build Coastguard Worker ret <2 x double> %r 742*9880d681SAndroid Build Coastguard Worker} 743*9880d681SAndroid Build Coastguard Worker 744*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_fold_vaddpd_128 745*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi), {{.*%xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]} {z}.*}} 746*9880d681SAndroid Build Coastguard Worker; CHECK: ret 747*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_maskz_fold_vaddpd_128(<2 x double> %i, <2 x double>* %j, 748*9880d681SAndroid Build Coastguard Worker <2 x i64> %mask1) nounwind { 749*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <2 x i64> %mask1, zeroinitializer 750*9880d681SAndroid Build Coastguard Worker %tmp = load <2 x double>, <2 x double>* %j 751*9880d681SAndroid Build Coastguard Worker %x = fadd <2 x double> %i, %tmp 752*9880d681SAndroid Build Coastguard Worker %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> zeroinitializer 753*9880d681SAndroid Build Coastguard Worker ret <2 x double> %r 754*9880d681SAndroid Build Coastguard Worker} 755*9880d681SAndroid Build Coastguard Worker 756*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_broadcast2_vaddpd_128 757*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to2}, %xmm{{.*}} 758*9880d681SAndroid Build Coastguard Worker; CHECK: ret 759*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_broadcast2_vaddpd_128(<2 x double> %i, double* %j) nounwind { 760*9880d681SAndroid Build Coastguard Worker %tmp = load double, double* %j 761*9880d681SAndroid Build Coastguard Worker %j.0 = insertelement <2 x double> undef, double %tmp, i64 0 762*9880d681SAndroid Build Coastguard Worker %j.1 = insertelement <2 x double> %j.0, double %tmp, i64 1 763*9880d681SAndroid Build Coastguard Worker %x = fadd <2 x double> %j.1, %i 764*9880d681SAndroid Build Coastguard Worker ret <2 x double> %x 765*9880d681SAndroid Build Coastguard Worker} 766*9880d681SAndroid Build Coastguard Worker 767*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_broadcast_vaddpd_128 768*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to2}, %xmm{{.*{%k[1-7]}.*}} 769*9880d681SAndroid Build Coastguard Worker; CHECK: ret 770*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_broadcast_vaddpd_128(<2 x double> %dst, <2 x double> %i, 771*9880d681SAndroid Build Coastguard Worker double* %j, <2 x i64> %mask1) 772*9880d681SAndroid Build Coastguard Worker nounwind { 773*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <2 x i64> %mask1, zeroinitializer 774*9880d681SAndroid Build Coastguard Worker %tmp = load double, double* %j 775*9880d681SAndroid Build Coastguard Worker %j.0 = insertelement <2 x double> undef, double %tmp, i64 0 776*9880d681SAndroid Build Coastguard Worker %j.1 = insertelement <2 x double> %j.0, double %tmp, i64 1 777*9880d681SAndroid Build Coastguard Worker %x = fadd <2 x double> %j.1, %i 778*9880d681SAndroid Build Coastguard Worker %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %i 779*9880d681SAndroid Build Coastguard Worker ret <2 x double> %r 780*9880d681SAndroid Build Coastguard Worker} 781*9880d681SAndroid Build Coastguard Worker 782*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_broadcast_vaddpd_128 783*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to2}, %xmm{{.*{%k[1-7]} {z}.*}} 784*9880d681SAndroid Build Coastguard Worker; CHECK: ret 785*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_maskz_broadcast_vaddpd_128(<2 x double> %i, double* %j, 786*9880d681SAndroid Build Coastguard Worker <2 x i64> %mask1) nounwind { 787*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <2 x i64> %mask1, zeroinitializer 788*9880d681SAndroid Build Coastguard Worker %tmp = load double, double* %j 789*9880d681SAndroid Build Coastguard Worker %j.0 = insertelement <2 x double> undef, double %tmp, i64 0 790*9880d681SAndroid Build Coastguard Worker %j.1 = insertelement <2 x double> %j.0, double %tmp, i64 1 791*9880d681SAndroid Build Coastguard Worker %x = fadd <2 x double> %j.1, %i 792*9880d681SAndroid Build Coastguard Worker %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> zeroinitializer 793*9880d681SAndroid Build Coastguard Worker ret <2 x double> %r 794*9880d681SAndroid Build Coastguard Worker} 795