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-apple-darwin -mattr=+avx512f | FileCheck --check-prefix=CHECK --check-prefix=AVX512F %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512vl | FileCheck --check-prefix=CHECK --check-prefix=AVX512VL %s 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512bw | FileCheck --check-prefix=CHECK --check-prefix=AVX512BW %s 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512dq | FileCheck --check-prefix=CHECK --check-prefix=AVX512DQ %s 6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512dq -mattr=+avx512bw -mattr=+avx512vl| FileCheck --check-prefix=CHECK --check-prefix=SKX %s 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @addpd512(<8 x double> %y, <8 x double> %x) { 9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: addpd512: 10*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd %zmm0, %zmm1, %zmm0 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 13*9880d681SAndroid Build Coastguard Workerentry: 14*9880d681SAndroid Build Coastguard Worker %add.i = fadd <8 x double> %x, %y 15*9880d681SAndroid Build Coastguard Worker ret <8 x double> %add.i 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @addpd512fold(<8 x double> %y) { 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: addpd512fold: 20*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd {{.*}}(%rip), %zmm0, %zmm0 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 23*9880d681SAndroid Build Coastguard Workerentry: 24*9880d681SAndroid Build Coastguard Worker %add.i = fadd <8 x double> %y, <double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00, double 4.500000e+00, double 3.800000e+00, double 2.300000e+00, double 1.200000e+00> 25*9880d681SAndroid Build Coastguard Worker ret <8 x double> %add.i 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @addps512(<16 x float> %y, <16 x float> %x) { 29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: addps512: 30*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddps %zmm0, %zmm1, %zmm0 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 33*9880d681SAndroid Build Coastguard Workerentry: 34*9880d681SAndroid Build Coastguard Worker %add.i = fadd <16 x float> %x, %y 35*9880d681SAndroid Build Coastguard Worker ret <16 x float> %add.i 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @addps512fold(<16 x float> %y) { 39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: addps512fold: 40*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddps {{.*}}(%rip), %zmm0, %zmm0 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 43*9880d681SAndroid Build Coastguard Workerentry: 44*9880d681SAndroid Build Coastguard Worker %add.i = fadd <16 x float> %y, <float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 4.500000e+00, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000> 45*9880d681SAndroid Build Coastguard Worker ret <16 x float> %add.i 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @subpd512(<8 x double> %y, <8 x double> %x) { 49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: subpd512: 50*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsubpd %zmm0, %zmm1, %zmm0 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 53*9880d681SAndroid Build Coastguard Workerentry: 54*9880d681SAndroid Build Coastguard Worker %sub.i = fsub <8 x double> %x, %y 55*9880d681SAndroid Build Coastguard Worker ret <8 x double> %sub.i 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @subpd512fold(<8 x double> %y, <8 x double>* %x) { 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: subpd512fold: 60*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsubpd (%rdi), %zmm0, %zmm0 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 63*9880d681SAndroid Build Coastguard Workerentry: 64*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x double>, <8 x double>* %x, align 8 65*9880d681SAndroid Build Coastguard Worker %sub.i = fsub <8 x double> %y, %tmp2 66*9880d681SAndroid Build Coastguard Worker ret <8 x double> %sub.i 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @subps512(<16 x float> %y, <16 x float> %x) { 70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: subps512: 71*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsubps %zmm0, %zmm1, %zmm0 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 74*9880d681SAndroid Build Coastguard Workerentry: 75*9880d681SAndroid Build Coastguard Worker %sub.i = fsub <16 x float> %x, %y 76*9880d681SAndroid Build Coastguard Worker ret <16 x float> %sub.i 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @subps512fold(<16 x float> %y, <16 x float>* %x) { 80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: subps512fold: 81*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsubps (%rdi), %zmm0, %zmm0 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 84*9880d681SAndroid Build Coastguard Workerentry: 85*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x float>, <16 x float>* %x, align 4 86*9880d681SAndroid Build Coastguard Worker %sub.i = fsub <16 x float> %y, %tmp2 87*9880d681SAndroid Build Coastguard Worker ret <16 x float> %sub.i 88*9880d681SAndroid Build Coastguard Worker} 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @imulq512(<8 x i64> %y, <8 x i64> %x) { 91*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: imulq512: 92*9880d681SAndroid Build Coastguard Worker; AVX512F: ## BB#0: 93*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmuludq %zmm0, %zmm1, %zmm2 94*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsrlq $32, %zmm0, %zmm3 95*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmuludq %zmm3, %zmm1, %zmm3 96*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsllq $32, %zmm3, %zmm3 97*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpaddq %zmm3, %zmm2, %zmm2 98*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsrlq $32, %zmm1, %zmm1 99*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmuludq %zmm0, %zmm1, %zmm0 100*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsllq $32, %zmm0, %zmm0 101*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpaddq %zmm0, %zmm2, %zmm0 102*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 103*9880d681SAndroid Build Coastguard Worker; 104*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: imulq512: 105*9880d681SAndroid Build Coastguard Worker; AVX512VL: ## BB#0: 106*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpmuludq %zmm0, %zmm1, %zmm2 107*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsrlq $32, %zmm0, %zmm3 108*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpmuludq %zmm3, %zmm1, %zmm3 109*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsllq $32, %zmm3, %zmm3 110*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpaddq %zmm3, %zmm2, %zmm2 111*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsrlq $32, %zmm1, %zmm1 112*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpmuludq %zmm0, %zmm1, %zmm0 113*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsllq $32, %zmm0, %zmm0 114*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpaddq %zmm0, %zmm2, %zmm0 115*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 116*9880d681SAndroid Build Coastguard Worker; 117*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: imulq512: 118*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 119*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmuludq %zmm0, %zmm1, %zmm2 120*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsrlq $32, %zmm0, %zmm3 121*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmuludq %zmm3, %zmm1, %zmm3 122*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsllq $32, %zmm3, %zmm3 123*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpaddq %zmm3, %zmm2, %zmm2 124*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsrlq $32, %zmm1, %zmm1 125*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmuludq %zmm0, %zmm1, %zmm0 126*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsllq $32, %zmm0, %zmm0 127*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpaddq %zmm0, %zmm2, %zmm0 128*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 129*9880d681SAndroid Build Coastguard Worker; 130*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: imulq512: 131*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 132*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpmullq %zmm0, %zmm1, %zmm0 133*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 134*9880d681SAndroid Build Coastguard Worker; 135*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: imulq512: 136*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 137*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmullq %zmm0, %zmm1, %zmm0 138*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 139*9880d681SAndroid Build Coastguard Worker %z = mul <8 x i64>%x, %y 140*9880d681SAndroid Build Coastguard Worker ret <8 x i64>%z 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @imulq256(<4 x i64> %y, <4 x i64> %x) { 144*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: imulq256: 145*9880d681SAndroid Build Coastguard Worker; AVX512F: ## BB#0: 146*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmuludq %ymm0, %ymm1, %ymm2 147*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsrlq $32, %ymm0, %ymm3 148*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmuludq %ymm3, %ymm1, %ymm3 149*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsllq $32, %ymm3, %ymm3 150*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpaddq %ymm3, %ymm2, %ymm2 151*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsrlq $32, %ymm1, %ymm1 152*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmuludq %ymm0, %ymm1, %ymm0 153*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsllq $32, %ymm0, %ymm0 154*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpaddq %ymm0, %ymm2, %ymm0 155*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 156*9880d681SAndroid Build Coastguard Worker; 157*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: imulq256: 158*9880d681SAndroid Build Coastguard Worker; AVX512VL: ## BB#0: 159*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpmuludq %ymm0, %ymm1, %ymm2 160*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsrlq $32, %ymm0, %ymm3 161*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpmuludq %ymm3, %ymm1, %ymm3 162*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsllq $32, %ymm3, %ymm3 163*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpaddq %ymm3, %ymm2, %ymm2 164*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsrlq $32, %ymm1, %ymm1 165*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpmuludq %ymm0, %ymm1, %ymm0 166*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsllq $32, %ymm0, %ymm0 167*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpaddq %ymm0, %ymm2, %ymm0 168*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 169*9880d681SAndroid Build Coastguard Worker; 170*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: imulq256: 171*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 172*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmuludq %ymm0, %ymm1, %ymm2 173*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsrlq $32, %ymm0, %ymm3 174*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmuludq %ymm3, %ymm1, %ymm3 175*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsllq $32, %ymm3, %ymm3 176*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpaddq %ymm3, %ymm2, %ymm2 177*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsrlq $32, %ymm1, %ymm1 178*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmuludq %ymm0, %ymm1, %ymm0 179*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsllq $32, %ymm0, %ymm0 180*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpaddq %ymm0, %ymm2, %ymm0 181*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 182*9880d681SAndroid Build Coastguard Worker; 183*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: imulq256: 184*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 185*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpmuludq %ymm0, %ymm1, %ymm2 186*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlq $32, %ymm0, %ymm3 187*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpmuludq %ymm3, %ymm1, %ymm3 188*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllq $32, %ymm3, %ymm3 189*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddq %ymm3, %ymm2, %ymm2 190*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlq $32, %ymm1, %ymm1 191*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpmuludq %ymm0, %ymm1, %ymm0 192*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllq $32, %ymm0, %ymm0 193*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddq %ymm0, %ymm2, %ymm0 194*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 195*9880d681SAndroid Build Coastguard Worker; 196*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: imulq256: 197*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 198*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmullq %ymm0, %ymm1, %ymm0 199*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 200*9880d681SAndroid Build Coastguard Worker %z = mul <4 x i64>%x, %y 201*9880d681SAndroid Build Coastguard Worker ret <4 x i64>%z 202*9880d681SAndroid Build Coastguard Worker} 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @imulq128(<2 x i64> %y, <2 x i64> %x) { 205*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: imulq128: 206*9880d681SAndroid Build Coastguard Worker; AVX512F: ## BB#0: 207*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmuludq %xmm0, %xmm1, %xmm2 208*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsrlq $32, %xmm0, %xmm3 209*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmuludq %xmm3, %xmm1, %xmm3 210*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsllq $32, %xmm3, %xmm3 211*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpaddq %xmm3, %xmm2, %xmm2 212*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsrlq $32, %xmm1, %xmm1 213*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmuludq %xmm0, %xmm1, %xmm0 214*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsllq $32, %xmm0, %xmm0 215*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpaddq %xmm0, %xmm2, %xmm0 216*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 217*9880d681SAndroid Build Coastguard Worker; 218*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: imulq128: 219*9880d681SAndroid Build Coastguard Worker; AVX512VL: ## BB#0: 220*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpmuludq %xmm0, %xmm1, %xmm2 221*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsrlq $32, %xmm0, %xmm3 222*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpmuludq %xmm3, %xmm1, %xmm3 223*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsllq $32, %xmm3, %xmm3 224*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpaddq %xmm3, %xmm2, %xmm2 225*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsrlq $32, %xmm1, %xmm1 226*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpmuludq %xmm0, %xmm1, %xmm0 227*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsllq $32, %xmm0, %xmm0 228*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpaddq %xmm0, %xmm2, %xmm0 229*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 230*9880d681SAndroid Build Coastguard Worker; 231*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: imulq128: 232*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 233*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmuludq %xmm0, %xmm1, %xmm2 234*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsrlq $32, %xmm0, %xmm3 235*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmuludq %xmm3, %xmm1, %xmm3 236*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsllq $32, %xmm3, %xmm3 237*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpaddq %xmm3, %xmm2, %xmm2 238*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsrlq $32, %xmm1, %xmm1 239*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmuludq %xmm0, %xmm1, %xmm0 240*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsllq $32, %xmm0, %xmm0 241*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpaddq %xmm0, %xmm2, %xmm0 242*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 243*9880d681SAndroid Build Coastguard Worker; 244*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: imulq128: 245*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 246*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpmuludq %xmm0, %xmm1, %xmm2 247*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlq $32, %xmm0, %xmm3 248*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpmuludq %xmm3, %xmm1, %xmm3 249*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllq $32, %xmm3, %xmm3 250*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddq %xmm3, %xmm2, %xmm2 251*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlq $32, %xmm1, %xmm1 252*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpmuludq %xmm0, %xmm1, %xmm0 253*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllq $32, %xmm0, %xmm0 254*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddq %xmm0, %xmm2, %xmm0 255*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 256*9880d681SAndroid Build Coastguard Worker; 257*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: imulq128: 258*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 259*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmullq %xmm0, %xmm1, %xmm0 260*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 261*9880d681SAndroid Build Coastguard Worker %z = mul <2 x i64>%x, %y 262*9880d681SAndroid Build Coastguard Worker ret <2 x i64>%z 263*9880d681SAndroid Build Coastguard Worker} 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @mulpd512(<8 x double> %y, <8 x double> %x) { 266*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mulpd512: 267*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmulpd %zmm0, %zmm1, %zmm0 269*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 270*9880d681SAndroid Build Coastguard Workerentry: 271*9880d681SAndroid Build Coastguard Worker %mul.i = fmul <8 x double> %x, %y 272*9880d681SAndroid Build Coastguard Worker ret <8 x double> %mul.i 273*9880d681SAndroid Build Coastguard Worker} 274*9880d681SAndroid Build Coastguard Worker 275*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @mulpd512fold(<8 x double> %y) { 276*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mulpd512fold: 277*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmulpd {{.*}}(%rip), %zmm0, %zmm0 279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 280*9880d681SAndroid Build Coastguard Workerentry: 281*9880d681SAndroid Build Coastguard Worker %mul.i = fmul <8 x double> %y, <double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00, double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00> 282*9880d681SAndroid Build Coastguard Worker ret <8 x double> %mul.i 283*9880d681SAndroid Build Coastguard Worker} 284*9880d681SAndroid Build Coastguard Worker 285*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @mulps512(<16 x float> %y, <16 x float> %x) { 286*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mulps512: 287*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 288*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmulps %zmm0, %zmm1, %zmm0 289*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 290*9880d681SAndroid Build Coastguard Workerentry: 291*9880d681SAndroid Build Coastguard Worker %mul.i = fmul <16 x float> %x, %y 292*9880d681SAndroid Build Coastguard Worker ret <16 x float> %mul.i 293*9880d681SAndroid Build Coastguard Worker} 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @mulps512fold(<16 x float> %y) { 296*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mulps512fold: 297*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 298*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmulps {{.*}}(%rip), %zmm0, %zmm0 299*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 300*9880d681SAndroid Build Coastguard Workerentry: 301*9880d681SAndroid Build Coastguard Worker %mul.i = fmul <16 x float> %y, <float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000> 302*9880d681SAndroid Build Coastguard Worker ret <16 x float> %mul.i 303*9880d681SAndroid Build Coastguard Worker} 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @divpd512(<8 x double> %y, <8 x double> %x) { 306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: divpd512: 307*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vdivpd %zmm0, %zmm1, %zmm0 309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 310*9880d681SAndroid Build Coastguard Workerentry: 311*9880d681SAndroid Build Coastguard Worker %div.i = fdiv <8 x double> %x, %y 312*9880d681SAndroid Build Coastguard Worker ret <8 x double> %div.i 313*9880d681SAndroid Build Coastguard Worker} 314*9880d681SAndroid Build Coastguard Worker 315*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @divpd512fold(<8 x double> %y) { 316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: divpd512fold: 317*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vdivpd {{.*}}(%rip), %zmm0, %zmm0 319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 320*9880d681SAndroid Build Coastguard Workerentry: 321*9880d681SAndroid Build Coastguard Worker %div.i = fdiv <8 x double> %y, <double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00, double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00> 322*9880d681SAndroid Build Coastguard Worker ret <8 x double> %div.i 323*9880d681SAndroid Build Coastguard Worker} 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @divps512(<16 x float> %y, <16 x float> %x) { 326*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: divps512: 327*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 328*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vdivps %zmm0, %zmm1, %zmm0 329*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 330*9880d681SAndroid Build Coastguard Workerentry: 331*9880d681SAndroid Build Coastguard Worker %div.i = fdiv <16 x float> %x, %y 332*9880d681SAndroid Build Coastguard Worker ret <16 x float> %div.i 333*9880d681SAndroid Build Coastguard Worker} 334*9880d681SAndroid Build Coastguard Worker 335*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @divps512fold(<16 x float> %y) { 336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: divps512fold: 337*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 338*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vdivps {{.*}}(%rip), %zmm0, %zmm0 339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 340*9880d681SAndroid Build Coastguard Workerentry: 341*9880d681SAndroid Build Coastguard Worker %div.i = fdiv <16 x float> %y, <float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 4.500000e+00, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 4.500000e+00, float 0x4002666660000000, float 0x3FF3333340000000> 342*9880d681SAndroid Build Coastguard Worker ret <16 x float> %div.i 343*9880d681SAndroid Build Coastguard Worker} 344*9880d681SAndroid Build Coastguard Worker 345*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpaddq_test(<8 x i64> %i, <8 x i64> %j) nounwind readnone { 346*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq_test: 347*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 348*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq %zmm1, %zmm0, %zmm0 349*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 350*9880d681SAndroid Build Coastguard Worker %x = add <8 x i64> %i, %j 351*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %x 352*9880d681SAndroid Build Coastguard Worker} 353*9880d681SAndroid Build Coastguard Worker 354*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpaddq_fold_test(<8 x i64> %i, <8 x i64>* %j) nounwind { 355*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq_fold_test: 356*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 357*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq (%rdi), %zmm0, %zmm0 358*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 359*9880d681SAndroid Build Coastguard Worker %tmp = load <8 x i64>, <8 x i64>* %j, align 4 360*9880d681SAndroid Build Coastguard Worker %x = add <8 x i64> %i, %tmp 361*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %x 362*9880d681SAndroid Build Coastguard Worker} 363*9880d681SAndroid Build Coastguard Worker 364*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpaddq_broadcast_test(<8 x i64> %i) nounwind { 365*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq_broadcast_test: 366*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 367*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0 368*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 369*9880d681SAndroid Build Coastguard Worker %x = add <8 x i64> %i, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1> 370*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %x 371*9880d681SAndroid Build Coastguard Worker} 372*9880d681SAndroid Build Coastguard Worker 373*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpaddq_broadcast2_test(<8 x i64> %i, i64* %j) nounwind { 374*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq_broadcast2_test: 375*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 376*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq (%rdi){1to8}, %zmm0, %zmm0 377*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 378*9880d681SAndroid Build Coastguard Worker %tmp = load i64, i64* %j 379*9880d681SAndroid Build Coastguard Worker %j.0 = insertelement <8 x i64> undef, i64 %tmp, i32 0 380*9880d681SAndroid Build Coastguard Worker %j.1 = insertelement <8 x i64> %j.0, i64 %tmp, i32 1 381*9880d681SAndroid Build Coastguard Worker %j.2 = insertelement <8 x i64> %j.1, i64 %tmp, i32 2 382*9880d681SAndroid Build Coastguard Worker %j.3 = insertelement <8 x i64> %j.2, i64 %tmp, i32 3 383*9880d681SAndroid Build Coastguard Worker %j.4 = insertelement <8 x i64> %j.3, i64 %tmp, i32 4 384*9880d681SAndroid Build Coastguard Worker %j.5 = insertelement <8 x i64> %j.4, i64 %tmp, i32 5 385*9880d681SAndroid Build Coastguard Worker %j.6 = insertelement <8 x i64> %j.5, i64 %tmp, i32 6 386*9880d681SAndroid Build Coastguard Worker %j.7 = insertelement <8 x i64> %j.6, i64 %tmp, i32 7 387*9880d681SAndroid Build Coastguard Worker %x = add <8 x i64> %i, %j.7 388*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %x 389*9880d681SAndroid Build Coastguard Worker} 390*9880d681SAndroid Build Coastguard Worker 391*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_test(<16 x i32> %i, <16 x i32> %j) nounwind readnone { 392*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_test: 393*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 394*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd %zmm1, %zmm0, %zmm0 395*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 396*9880d681SAndroid Build Coastguard Worker %x = add <16 x i32> %i, %j 397*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %x 398*9880d681SAndroid Build Coastguard Worker} 399*9880d681SAndroid Build Coastguard Worker 400*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_fold_test(<16 x i32> %i, <16 x i32>* %j) nounwind { 401*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_fold_test: 402*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 403*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd (%rdi), %zmm0, %zmm0 404*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 405*9880d681SAndroid Build Coastguard Worker %tmp = load <16 x i32>, <16 x i32>* %j, align 4 406*9880d681SAndroid Build Coastguard Worker %x = add <16 x i32> %i, %tmp 407*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %x 408*9880d681SAndroid Build Coastguard Worker} 409*9880d681SAndroid Build Coastguard Worker 410*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_broadcast_test(<16 x i32> %i) nounwind { 411*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_broadcast_test: 412*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 413*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0 414*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 415*9880d681SAndroid Build Coastguard Worker %x = add <16 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 416*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %x 417*9880d681SAndroid Build Coastguard Worker} 418*9880d681SAndroid Build Coastguard Worker 419*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_mask_test(<16 x i32> %i, <16 x i32> %j, <16 x i32> %mask1) nounwind readnone { 420*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_mask_test: 421*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 422*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm3, %zmm3, %zmm3 423*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm3, %zmm2, %k1 424*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd %zmm1, %zmm0, %zmm0 {%k1} 425*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 426*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 427*9880d681SAndroid Build Coastguard Worker %x = add <16 x i32> %i, %j 428*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %i 429*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %r 430*9880d681SAndroid Build Coastguard Worker} 431*9880d681SAndroid Build Coastguard Worker 432*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_maskz_test(<16 x i32> %i, <16 x i32> %j, <16 x i32> %mask1) nounwind readnone { 433*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_maskz_test: 434*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 435*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm3, %zmm3, %zmm3 436*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm3, %zmm2, %k1 437*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd %zmm1, %zmm0, %zmm0 {%k1} {z} 438*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 439*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 440*9880d681SAndroid Build Coastguard Worker %x = add <16 x i32> %i, %j 441*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer 442*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %r 443*9880d681SAndroid Build Coastguard Worker} 444*9880d681SAndroid Build Coastguard Worker 445*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_mask_fold_test(<16 x i32> %i, <16 x i32>* %j.ptr, <16 x i32> %mask1) nounwind readnone { 446*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_mask_fold_test: 447*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 448*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm2, %zmm2, %zmm2 449*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm2, %zmm1, %k1 450*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd (%rdi), %zmm0, %zmm0 {%k1} 451*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 452*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 453*9880d681SAndroid Build Coastguard Worker %j = load <16 x i32>, <16 x i32>* %j.ptr 454*9880d681SAndroid Build Coastguard Worker %x = add <16 x i32> %i, %j 455*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %i 456*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %r 457*9880d681SAndroid Build Coastguard Worker} 458*9880d681SAndroid Build Coastguard Worker 459*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_mask_broadcast_test(<16 x i32> %i, <16 x i32> %mask1) nounwind readnone { 460*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_mask_broadcast_test: 461*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 462*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm2, %zmm2, %zmm2 463*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm2, %zmm1, %k1 464*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0 {%k1} 465*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 466*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 467*9880d681SAndroid Build Coastguard Worker %x = add <16 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 468*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %i 469*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %r 470*9880d681SAndroid Build Coastguard Worker} 471*9880d681SAndroid Build Coastguard Worker 472*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_maskz_fold_test(<16 x i32> %i, <16 x i32>* %j.ptr, <16 x i32> %mask1) nounwind readnone { 473*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_maskz_fold_test: 474*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 475*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm2, %zmm2, %zmm2 476*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm2, %zmm1, %k1 477*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd (%rdi), %zmm0, %zmm0 {%k1} {z} 478*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 479*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 480*9880d681SAndroid Build Coastguard Worker %j = load <16 x i32>, <16 x i32>* %j.ptr 481*9880d681SAndroid Build Coastguard Worker %x = add <16 x i32> %i, %j 482*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer 483*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %r 484*9880d681SAndroid Build Coastguard Worker} 485*9880d681SAndroid Build Coastguard Worker 486*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_maskz_broadcast_test(<16 x i32> %i, <16 x i32> %mask1) nounwind readnone { 487*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_maskz_broadcast_test: 488*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 489*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm2, %zmm2, %zmm2 490*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm2, %zmm1, %k1 491*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0 {%k1} {z} 492*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 493*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 494*9880d681SAndroid Build Coastguard Worker %x = add <16 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 495*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer 496*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %r 497*9880d681SAndroid Build Coastguard Worker} 498*9880d681SAndroid Build Coastguard Worker 499*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpsubq_test(<8 x i64> %i, <8 x i64> %j) nounwind readnone { 500*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubq_test: 501*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 502*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsubq %zmm1, %zmm0, %zmm0 503*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 504*9880d681SAndroid Build Coastguard Worker %x = sub <8 x i64> %i, %j 505*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %x 506*9880d681SAndroid Build Coastguard Worker} 507*9880d681SAndroid Build Coastguard Worker 508*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpsubd_test(<16 x i32> %i, <16 x i32> %j) nounwind readnone { 509*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubd_test: 510*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 511*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsubd %zmm1, %zmm0, %zmm0 512*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 513*9880d681SAndroid Build Coastguard Worker %x = sub <16 x i32> %i, %j 514*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %x 515*9880d681SAndroid Build Coastguard Worker} 516*9880d681SAndroid Build Coastguard Worker 517*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpmulld_test(<16 x i32> %i, <16 x i32> %j) { 518*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpmulld_test: 519*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 520*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmulld %zmm1, %zmm0, %zmm0 521*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 522*9880d681SAndroid Build Coastguard Worker %x = mul <16 x i32> %i, %j 523*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %x 524*9880d681SAndroid Build Coastguard Worker} 525*9880d681SAndroid Build Coastguard Worker 526*9880d681SAndroid Build Coastguard Workerdeclare float @sqrtf(float) readnone 527*9880d681SAndroid Build Coastguard Workerdefine float @sqrtA(float %a) nounwind uwtable readnone ssp { 528*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sqrtA: 529*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 530*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 531*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 532*9880d681SAndroid Build Coastguard Workerentry: 533*9880d681SAndroid Build Coastguard Worker %conv1 = tail call float @sqrtf(float %a) nounwind readnone 534*9880d681SAndroid Build Coastguard Worker ret float %conv1 535*9880d681SAndroid Build Coastguard Worker} 536*9880d681SAndroid Build Coastguard Worker 537*9880d681SAndroid Build Coastguard Workerdeclare double @sqrt(double) readnone 538*9880d681SAndroid Build Coastguard Workerdefine double @sqrtB(double %a) nounwind uwtable readnone ssp { 539*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sqrtB: 540*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 541*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsqrtsd %xmm0, %xmm0, %xmm0 542*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 543*9880d681SAndroid Build Coastguard Workerentry: 544*9880d681SAndroid Build Coastguard Worker %call = tail call double @sqrt(double %a) nounwind readnone 545*9880d681SAndroid Build Coastguard Worker ret double %call 546*9880d681SAndroid Build Coastguard Worker} 547*9880d681SAndroid Build Coastguard Worker 548*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.sqrt.f32(float) 549*9880d681SAndroid Build Coastguard Workerdefine float @sqrtC(float %a) nounwind { 550*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sqrtC: 551*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 552*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 553*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 554*9880d681SAndroid Build Coastguard Worker %b = call float @llvm.sqrt.f32(float %a) 555*9880d681SAndroid Build Coastguard Worker ret float %b 556*9880d681SAndroid Build Coastguard Worker} 557*9880d681SAndroid Build Coastguard Worker 558*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.sqrt.v16f32(<16 x float>) 559*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @sqrtD(<16 x float> %a) nounwind { 560*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sqrtD: 561*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 562*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsqrtps %zmm0, %zmm0 563*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 564*9880d681SAndroid Build Coastguard Worker %b = call <16 x float> @llvm.sqrt.v16f32(<16 x float> %a) 565*9880d681SAndroid Build Coastguard Worker ret <16 x float> %b 566*9880d681SAndroid Build Coastguard Worker} 567*9880d681SAndroid Build Coastguard Worker 568*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.sqrt.v8f64(<8 x double>) 569*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @sqrtE(<8 x double> %a) nounwind { 570*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sqrtE: 571*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 572*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsqrtpd %zmm0, %zmm0 573*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 574*9880d681SAndroid Build Coastguard Worker %b = call <8 x double> @llvm.sqrt.v8f64(<8 x double> %a) 575*9880d681SAndroid Build Coastguard Worker ret <8 x double> %b 576*9880d681SAndroid Build Coastguard Worker} 577*9880d681SAndroid Build Coastguard Worker 578*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @fadd_broadcast(<16 x float> %a) nounwind { 579*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fadd_broadcast: 580*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 581*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddps {{.*}}(%rip){1to16}, %zmm0, %zmm0 582*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 583*9880d681SAndroid Build Coastguard Worker %b = fadd <16 x float> %a, <float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000> 584*9880d681SAndroid Build Coastguard Worker ret <16 x float> %b 585*9880d681SAndroid Build Coastguard Worker} 586*9880d681SAndroid Build Coastguard Worker 587*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @addq_broadcast(<8 x i64> %a) nounwind { 588*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: addq_broadcast: 589*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 590*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0 591*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 592*9880d681SAndroid Build Coastguard Worker %b = add <8 x i64> %a, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2> 593*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %b 594*9880d681SAndroid Build Coastguard Worker} 595*9880d681SAndroid Build Coastguard Worker 596*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @orq_broadcast(<8 x i64> %a) nounwind { 597*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orq_broadcast: 598*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 599*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vporq {{.*}}(%rip){1to8}, %zmm0, %zmm0 600*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 601*9880d681SAndroid Build Coastguard Worker %b = or <8 x i64> %a, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2> 602*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %b 603*9880d681SAndroid Build Coastguard Worker} 604*9880d681SAndroid Build Coastguard Worker 605*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @andd512fold(<16 x i32> %y, <16 x i32>* %x) { 606*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andd512fold: 607*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 608*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpandd (%rdi), %zmm0, %zmm0 609*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 610*9880d681SAndroid Build Coastguard Workerentry: 611*9880d681SAndroid Build Coastguard Worker %a = load <16 x i32>, <16 x i32>* %x, align 4 612*9880d681SAndroid Build Coastguard Worker %b = and <16 x i32> %y, %a 613*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %b 614*9880d681SAndroid Build Coastguard Worker} 615*9880d681SAndroid Build Coastguard Worker 616*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @andqbrst(<8 x i64> %p1, i64* %ap) { 617*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andqbrst: 618*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 619*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpandq (%rdi){1to8}, %zmm0, %zmm0 620*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 621*9880d681SAndroid Build Coastguard Workerentry: 622*9880d681SAndroid Build Coastguard Worker %a = load i64, i64* %ap, align 8 623*9880d681SAndroid Build Coastguard Worker %b = insertelement <8 x i64> undef, i64 %a, i32 0 624*9880d681SAndroid Build Coastguard Worker %c = shufflevector <8 x i64> %b, <8 x i64> undef, <8 x i32> zeroinitializer 625*9880d681SAndroid Build Coastguard Worker %d = and <8 x i64> %p1, %c 626*9880d681SAndroid Build Coastguard Worker ret <8 x i64>%d 627*9880d681SAndroid Build Coastguard Worker} 628*9880d681SAndroid Build Coastguard Worker 629*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vaddps(<16 x float> %dst, <16 x float> %i, 630*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddps: 631*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 632*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm4, %zmm4, %zmm4 633*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 634*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddps %zmm2, %zmm1, %zmm0 {%k1} 635*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 636*9880d681SAndroid Build Coastguard Worker <16 x float> %j, <16 x i32> %mask1) 637*9880d681SAndroid Build Coastguard Worker nounwind readnone { 638*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 639*9880d681SAndroid Build Coastguard Worker %x = fadd <16 x float> %i, %j 640*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x float> %x, <16 x float> %dst 641*9880d681SAndroid Build Coastguard Worker ret <16 x float> %r 642*9880d681SAndroid Build Coastguard Worker} 643*9880d681SAndroid Build Coastguard Worker 644*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vmulps(<16 x float> %dst, <16 x float> %i, 645*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmulps: 646*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 647*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm4, %zmm4, %zmm4 648*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 649*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmulps %zmm2, %zmm1, %zmm0 {%k1} 650*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 651*9880d681SAndroid Build Coastguard Worker <16 x float> %j, <16 x i32> %mask1) 652*9880d681SAndroid Build Coastguard Worker nounwind readnone { 653*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 654*9880d681SAndroid Build Coastguard Worker %x = fmul <16 x float> %i, %j 655*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x float> %x, <16 x float> %dst 656*9880d681SAndroid Build Coastguard Worker ret <16 x float> %r 657*9880d681SAndroid Build Coastguard Worker} 658*9880d681SAndroid Build Coastguard Worker 659*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vminps(<16 x float> %dst, <16 x float> %i, 660*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vminps: 661*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 662*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm4, %zmm4, %zmm4 663*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 664*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vminps %zmm2, %zmm1, %zmm0 {%k1} 665*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 666*9880d681SAndroid Build Coastguard Worker <16 x float> %j, <16 x i32> %mask1) 667*9880d681SAndroid Build Coastguard Worker nounwind readnone { 668*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 669*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp olt <16 x float> %i, %j 670*9880d681SAndroid Build Coastguard Worker %min = select <16 x i1> %cmp_res, <16 x float> %i, <16 x float> %j 671*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x float> %min, <16 x float> %dst 672*9880d681SAndroid Build Coastguard Worker ret <16 x float> %r 673*9880d681SAndroid Build Coastguard Worker} 674*9880d681SAndroid Build Coastguard Worker 675*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_vminpd(<8 x double> %dst, <8 x double> %i, 676*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: test_mask_vminpd: 677*9880d681SAndroid Build Coastguard Worker; AVX512F: ## BB#0: 678*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def> 679*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpxor %ymm4, %ymm4, %ymm4 680*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 681*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vminpd %zmm2, %zmm1, %zmm0 {%k1} 682*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 683*9880d681SAndroid Build Coastguard Worker; 684*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_mask_vminpd: 685*9880d681SAndroid Build Coastguard Worker; AVX512VL: ## BB#0: 686*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpxord %ymm4, %ymm4, %ymm4 687*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpcmpneqd %ymm4, %ymm3, %k1 688*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vminpd %zmm2, %zmm1, %zmm0 {%k1} 689*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 690*9880d681SAndroid Build Coastguard Worker; 691*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: test_mask_vminpd: 692*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 693*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def> 694*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpxor %ymm4, %ymm4, %ymm4 695*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 696*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vminpd %zmm2, %zmm1, %zmm0 {%k1} 697*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 698*9880d681SAndroid Build Coastguard Worker; 699*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: test_mask_vminpd: 700*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 701*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def> 702*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpxor %ymm4, %ymm4, %ymm4 703*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 704*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vminpd %zmm2, %zmm1, %zmm0 {%k1} 705*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 706*9880d681SAndroid Build Coastguard Worker; 707*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_mask_vminpd: 708*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 709*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpxord %ymm4, %ymm4, %ymm4 710*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpneqd %ymm4, %ymm3, %k1 711*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vminpd %zmm2, %zmm1, %zmm0 {%k1} 712*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 713*9880d681SAndroid Build Coastguard Worker <8 x double> %j, <8 x i32> %mask1) 714*9880d681SAndroid Build Coastguard Worker nounwind readnone { 715*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 716*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp olt <8 x double> %i, %j 717*9880d681SAndroid Build Coastguard Worker %min = select <8 x i1> %cmp_res, <8 x double> %i, <8 x double> %j 718*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x double> %min, <8 x double> %dst 719*9880d681SAndroid Build Coastguard Worker ret <8 x double> %r 720*9880d681SAndroid Build Coastguard Worker} 721*9880d681SAndroid Build Coastguard Worker 722*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vmaxps(<16 x float> %dst, <16 x float> %i, 723*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmaxps: 724*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 725*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm4, %zmm4, %zmm4 726*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 727*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmaxps %zmm2, %zmm1, %zmm0 {%k1} 728*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 729*9880d681SAndroid Build Coastguard Worker <16 x float> %j, <16 x i32> %mask1) 730*9880d681SAndroid Build Coastguard Worker nounwind readnone { 731*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 732*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp ogt <16 x float> %i, %j 733*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %cmp_res, <16 x float> %i, <16 x float> %j 734*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x float> %max, <16 x float> %dst 735*9880d681SAndroid Build Coastguard Worker ret <16 x float> %r 736*9880d681SAndroid Build Coastguard Worker} 737*9880d681SAndroid Build Coastguard Worker 738*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_vmaxpd(<8 x double> %dst, <8 x double> %i, 739*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: test_mask_vmaxpd: 740*9880d681SAndroid Build Coastguard Worker; AVX512F: ## BB#0: 741*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def> 742*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpxor %ymm4, %ymm4, %ymm4 743*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 744*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vmaxpd %zmm2, %zmm1, %zmm0 {%k1} 745*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 746*9880d681SAndroid Build Coastguard Worker; 747*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_mask_vmaxpd: 748*9880d681SAndroid Build Coastguard Worker; AVX512VL: ## BB#0: 749*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpxord %ymm4, %ymm4, %ymm4 750*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpcmpneqd %ymm4, %ymm3, %k1 751*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vmaxpd %zmm2, %zmm1, %zmm0 {%k1} 752*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 753*9880d681SAndroid Build Coastguard Worker; 754*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: test_mask_vmaxpd: 755*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 756*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def> 757*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpxor %ymm4, %ymm4, %ymm4 758*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 759*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmaxpd %zmm2, %zmm1, %zmm0 {%k1} 760*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 761*9880d681SAndroid Build Coastguard Worker; 762*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: test_mask_vmaxpd: 763*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 764*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def> 765*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpxor %ymm4, %ymm4, %ymm4 766*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 767*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmaxpd %zmm2, %zmm1, %zmm0 {%k1} 768*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 769*9880d681SAndroid Build Coastguard Worker; 770*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_mask_vmaxpd: 771*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 772*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpxord %ymm4, %ymm4, %ymm4 773*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpneqd %ymm4, %ymm3, %k1 774*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmaxpd %zmm2, %zmm1, %zmm0 {%k1} 775*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 776*9880d681SAndroid Build Coastguard Worker <8 x double> %j, <8 x i32> %mask1) 777*9880d681SAndroid Build Coastguard Worker nounwind readnone { 778*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i32> %mask1, zeroinitializer 779*9880d681SAndroid Build Coastguard Worker %cmp_res = fcmp ogt <8 x double> %i, %j 780*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %cmp_res, <8 x double> %i, <8 x double> %j 781*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x double> %max, <8 x double> %dst 782*9880d681SAndroid Build Coastguard Worker ret <8 x double> %r 783*9880d681SAndroid Build Coastguard Worker} 784*9880d681SAndroid Build Coastguard Worker 785*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vsubps(<16 x float> %dst, <16 x float> %i, 786*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vsubps: 787*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 788*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm4, %zmm4, %zmm4 789*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 790*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsubps %zmm2, %zmm1, %zmm0 {%k1} 791*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 792*9880d681SAndroid Build Coastguard Worker <16 x float> %j, <16 x i32> %mask1) 793*9880d681SAndroid Build Coastguard Worker nounwind readnone { 794*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 795*9880d681SAndroid Build Coastguard Worker %x = fsub <16 x float> %i, %j 796*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x float> %x, <16 x float> %dst 797*9880d681SAndroid Build Coastguard Worker ret <16 x float> %r 798*9880d681SAndroid Build Coastguard Worker} 799*9880d681SAndroid Build Coastguard Worker 800*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vdivps(<16 x float> %dst, <16 x float> %i, 801*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vdivps: 802*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 803*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm4, %zmm4, %zmm4 804*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqd %zmm4, %zmm3, %k1 805*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vdivps %zmm2, %zmm1, %zmm0 {%k1} 806*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 807*9880d681SAndroid Build Coastguard Worker <16 x float> %j, <16 x i32> %mask1) 808*9880d681SAndroid Build Coastguard Worker nounwind readnone { 809*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i32> %mask1, zeroinitializer 810*9880d681SAndroid Build Coastguard Worker %x = fdiv <16 x float> %i, %j 811*9880d681SAndroid Build Coastguard Worker %r = select <16 x i1> %mask, <16 x float> %x, <16 x float> %dst 812*9880d681SAndroid Build Coastguard Worker ret <16 x float> %r 813*9880d681SAndroid Build Coastguard Worker} 814*9880d681SAndroid Build Coastguard Worker 815*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_vaddpd(<8 x double> %dst, <8 x double> %i, 816*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddpd: 817*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 818*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm4, %zmm4, %zmm4 819*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqq %zmm4, %zmm3, %k1 820*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd %zmm2, %zmm1, %zmm0 {%k1} 821*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 822*9880d681SAndroid Build Coastguard Worker <8 x double> %j, <8 x i64> %mask1) 823*9880d681SAndroid Build Coastguard Worker nounwind readnone { 824*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i64> %mask1, zeroinitializer 825*9880d681SAndroid Build Coastguard Worker %x = fadd <8 x double> %i, %j 826*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> %dst 827*9880d681SAndroid Build Coastguard Worker ret <8 x double> %r 828*9880d681SAndroid Build Coastguard Worker} 829*9880d681SAndroid Build Coastguard Worker 830*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_maskz_vaddpd(<8 x double> %i, <8 x double> %j, 831*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_vaddpd: 832*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 833*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm3, %zmm3, %zmm3 834*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqq %zmm3, %zmm2, %k1 835*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd %zmm1, %zmm0, %zmm0 {%k1} {z} 836*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 837*9880d681SAndroid Build Coastguard Worker <8 x i64> %mask1) nounwind readnone { 838*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i64> %mask1, zeroinitializer 839*9880d681SAndroid Build Coastguard Worker %x = fadd <8 x double> %i, %j 840*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> zeroinitializer 841*9880d681SAndroid Build Coastguard Worker ret <8 x double> %r 842*9880d681SAndroid Build Coastguard Worker} 843*9880d681SAndroid Build Coastguard Worker 844*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_fold_vaddpd(<8 x double> %dst, <8 x double> %i, 845*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_fold_vaddpd: 846*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 847*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm3, %zmm3, %zmm3 848*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqq %zmm3, %zmm2, %k1 849*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd (%rdi), %zmm1, %zmm0 {%k1} 850*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 851*9880d681SAndroid Build Coastguard Worker <8 x double>* %j, <8 x i64> %mask1) 852*9880d681SAndroid Build Coastguard Worker nounwind { 853*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i64> %mask1, zeroinitializer 854*9880d681SAndroid Build Coastguard Worker %tmp = load <8 x double>, <8 x double>* %j, align 8 855*9880d681SAndroid Build Coastguard Worker %x = fadd <8 x double> %i, %tmp 856*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> %dst 857*9880d681SAndroid Build Coastguard Worker ret <8 x double> %r 858*9880d681SAndroid Build Coastguard Worker} 859*9880d681SAndroid Build Coastguard Worker 860*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_maskz_fold_vaddpd(<8 x double> %i, <8 x double>* %j, 861*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_fold_vaddpd: 862*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 863*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm2, %zmm2, %zmm2 864*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqq %zmm2, %zmm1, %k1 865*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd (%rdi), %zmm0, %zmm0 {%k1} {z} 866*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 867*9880d681SAndroid Build Coastguard Worker <8 x i64> %mask1) nounwind { 868*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i64> %mask1, zeroinitializer 869*9880d681SAndroid Build Coastguard Worker %tmp = load <8 x double>, <8 x double>* %j, align 8 870*9880d681SAndroid Build Coastguard Worker %x = fadd <8 x double> %i, %tmp 871*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> zeroinitializer 872*9880d681SAndroid Build Coastguard Worker ret <8 x double> %r 873*9880d681SAndroid Build Coastguard Worker} 874*9880d681SAndroid Build Coastguard Worker 875*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_broadcast_vaddpd(<8 x double> %i, double* %j) nounwind { 876*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_broadcast_vaddpd: 877*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 878*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd (%rdi){1to8}, %zmm0, %zmm0 879*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 880*9880d681SAndroid Build Coastguard Worker %tmp = load double, double* %j 881*9880d681SAndroid Build Coastguard Worker %b = insertelement <8 x double> undef, double %tmp, i32 0 882*9880d681SAndroid Build Coastguard Worker %c = shufflevector <8 x double> %b, <8 x double> undef, 883*9880d681SAndroid Build Coastguard Worker <8 x i32> zeroinitializer 884*9880d681SAndroid Build Coastguard Worker %x = fadd <8 x double> %c, %i 885*9880d681SAndroid Build Coastguard Worker ret <8 x double> %x 886*9880d681SAndroid Build Coastguard Worker} 887*9880d681SAndroid Build Coastguard Worker 888*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_broadcast_vaddpd(<8 x double> %dst, <8 x double> %i, 889*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_broadcast_vaddpd: 890*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 891*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm0, %zmm0, %zmm0 892*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqq %zmm0, %zmm2, %k1 893*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd (%rdi){1to8}, %zmm1, %zmm1 {%k1} 894*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps %zmm1, %zmm0 895*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 896*9880d681SAndroid Build Coastguard Worker double* %j, <8 x i64> %mask1) nounwind { 897*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i64> %mask1, zeroinitializer 898*9880d681SAndroid Build Coastguard Worker %tmp = load double, double* %j 899*9880d681SAndroid Build Coastguard Worker %b = insertelement <8 x double> undef, double %tmp, i32 0 900*9880d681SAndroid Build Coastguard Worker %c = shufflevector <8 x double> %b, <8 x double> undef, 901*9880d681SAndroid Build Coastguard Worker <8 x i32> zeroinitializer 902*9880d681SAndroid Build Coastguard Worker %x = fadd <8 x double> %c, %i 903*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> %i 904*9880d681SAndroid Build Coastguard Worker ret <8 x double> %r 905*9880d681SAndroid Build Coastguard Worker} 906*9880d681SAndroid Build Coastguard Worker 907*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_maskz_broadcast_vaddpd(<8 x double> %i, double* %j, 908*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_broadcast_vaddpd: 909*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 910*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm2, %zmm2, %zmm2 911*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqq %zmm2, %zmm1, %k1 912*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vaddpd (%rdi){1to8}, %zmm0, %zmm0 {%k1} {z} 913*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 914*9880d681SAndroid Build Coastguard Worker <8 x i64> %mask1) nounwind { 915*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i64> %mask1, zeroinitializer 916*9880d681SAndroid Build Coastguard Worker %tmp = load double, double* %j 917*9880d681SAndroid Build Coastguard Worker %b = insertelement <8 x double> undef, double %tmp, i32 0 918*9880d681SAndroid Build Coastguard Worker %c = shufflevector <8 x double> %b, <8 x double> undef, 919*9880d681SAndroid Build Coastguard Worker <8 x i32> zeroinitializer 920*9880d681SAndroid Build Coastguard Worker %x = fadd <8 x double> %c, %i 921*9880d681SAndroid Build Coastguard Worker %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> zeroinitializer 922*9880d681SAndroid Build Coastguard Worker ret <8 x double> %r 923*9880d681SAndroid Build Coastguard Worker} 924*9880d681SAndroid Build Coastguard Worker 925*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_fxor(<16 x float> %a) { 926*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: test_fxor: 927*9880d681SAndroid Build Coastguard Worker; AVX512F: ## BB#0: 928*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpxord {{.*}}(%rip), %zmm0, %zmm0 929*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 930*9880d681SAndroid Build Coastguard Worker; 931*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_fxor: 932*9880d681SAndroid Build Coastguard Worker; AVX512VL: ## BB#0: 933*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpxord {{.*}}(%rip), %zmm0, %zmm0 934*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 935*9880d681SAndroid Build Coastguard Worker; 936*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: test_fxor: 937*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 938*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpxord {{.*}}(%rip), %zmm0, %zmm0 939*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 940*9880d681SAndroid Build Coastguard Worker; 941*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: test_fxor: 942*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 943*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vxorps {{.*}}(%rip), %zmm0, %zmm0 944*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 945*9880d681SAndroid Build Coastguard Worker; 946*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_fxor: 947*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 948*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vxorps {{.*}}(%rip), %zmm0, %zmm0 949*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 950*9880d681SAndroid Build Coastguard Worker 951*9880d681SAndroid Build Coastguard Worker %res = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a 952*9880d681SAndroid Build Coastguard Worker ret <16 x float>%res 953*9880d681SAndroid Build Coastguard Worker} 954*9880d681SAndroid Build Coastguard Worker 955*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_fxor_8f32(<8 x float> %a) { 956*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fxor_8f32: 957*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 958*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 959*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 960*9880d681SAndroid Build Coastguard Worker %res = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a 961*9880d681SAndroid Build Coastguard Worker ret <8 x float>%res 962*9880d681SAndroid Build Coastguard Worker} 963*9880d681SAndroid Build Coastguard Worker 964*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @fabs_v8f64(<8 x double> %p) 965*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: fabs_v8f64: 966*9880d681SAndroid Build Coastguard Worker; AVX512F: ## BB#0: 967*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0 968*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 969*9880d681SAndroid Build Coastguard Worker; 970*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: fabs_v8f64: 971*9880d681SAndroid Build Coastguard Worker; AVX512VL: ## BB#0: 972*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0 973*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 974*9880d681SAndroid Build Coastguard Worker; 975*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: fabs_v8f64: 976*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 977*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0 978*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 979*9880d681SAndroid Build Coastguard Worker; 980*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: fabs_v8f64: 981*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 982*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vandpd {{.*}}(%rip), %zmm0, %zmm0 983*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 984*9880d681SAndroid Build Coastguard Worker; 985*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fabs_v8f64: 986*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 987*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vandpd {{.*}}(%rip), %zmm0, %zmm0 988*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 989*9880d681SAndroid Build Coastguard Worker{ 990*9880d681SAndroid Build Coastguard Worker %t = call <8 x double> @llvm.fabs.v8f64(<8 x double> %p) 991*9880d681SAndroid Build Coastguard Worker ret <8 x double> %t 992*9880d681SAndroid Build Coastguard Worker} 993*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.fabs.v8f64(<8 x double> %p) 994*9880d681SAndroid Build Coastguard Worker 995*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @fabs_v16f32(<16 x float> %p) 996*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: fabs_v16f32: 997*9880d681SAndroid Build Coastguard Worker; AVX512F: ## BB#0: 998*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpandd {{.*}}(%rip), %zmm0, %zmm0 999*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 1000*9880d681SAndroid Build Coastguard Worker; 1001*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: fabs_v16f32: 1002*9880d681SAndroid Build Coastguard Worker; AVX512VL: ## BB#0: 1003*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpandd {{.*}}(%rip), %zmm0, %zmm0 1004*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1005*9880d681SAndroid Build Coastguard Worker; 1006*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: fabs_v16f32: 1007*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 1008*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpandd {{.*}}(%rip), %zmm0, %zmm0 1009*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 1010*9880d681SAndroid Build Coastguard Worker; 1011*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: fabs_v16f32: 1012*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 1013*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vandps {{.*}}(%rip), %zmm0, %zmm0 1014*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 1015*9880d681SAndroid Build Coastguard Worker; 1016*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fabs_v16f32: 1017*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 1018*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vandps {{.*}}(%rip), %zmm0, %zmm0 1019*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 1020*9880d681SAndroid Build Coastguard Worker{ 1021*9880d681SAndroid Build Coastguard Worker %t = call <16 x float> @llvm.fabs.v16f32(<16 x float> %p) 1022*9880d681SAndroid Build Coastguard Worker ret <16 x float> %t 1023*9880d681SAndroid Build Coastguard Worker} 1024*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.fabs.v16f32(<16 x float> %p) 1025