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 -mcpu=knl | FileCheck %s --check-prefix=CHECK --check-prefix=KNL 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test1(<16 x float> %x, <16 x float> %y) nounwind { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1: 7*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcmpleps %zmm1, %zmm0, %k1 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 11*9880d681SAndroid Build Coastguard Worker %mask = fcmp ole <16 x float> %x, %y 12*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x float> %x, <16 x float> %y 13*9880d681SAndroid Build Coastguard Worker ret <16 x float> %max 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test2(<8 x double> %x, <8 x double> %y) nounwind { 17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 18*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcmplepd %zmm1, %zmm0, %k1 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vblendmpd %zmm0, %zmm1, %zmm0 {%k1} 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 22*9880d681SAndroid Build Coastguard Worker %mask = fcmp ole <8 x double> %x, %y 23*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %y 24*9880d681SAndroid Build Coastguard Worker ret <8 x double> %max 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test3(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %yp) nounwind { 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3: 29*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqd (%rdi), %zmm0, %k1 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 33*9880d681SAndroid Build Coastguard Worker %y = load <16 x i32>, <16 x i32>* %yp, align 4 34*9880d681SAndroid Build Coastguard Worker %mask = icmp eq <16 x i32> %x, %y 35*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 36*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %max 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test4_unsigned(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1) nounwind { 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test4_unsigned: 41*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpnltud %zmm1, %zmm0, %k1 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmd %zmm2, %zmm1, %zmm0 {%k1} 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 45*9880d681SAndroid Build Coastguard Worker %mask = icmp uge <16 x i32> %x, %y 46*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x i32> %x1, <16 x i32> %y 47*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %max 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test5(<8 x i64> %x, <8 x i64> %y) nounwind { 51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test5: 52*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqq %zmm1, %zmm0, %k1 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 56*9880d681SAndroid Build Coastguard Worker %mask = icmp eq <8 x i64> %x, %y 57*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %y 58*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %max 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test6_unsigned(<8 x i64> %x, <8 x i64> %y, <8 x i64> %x1) nounwind { 62*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test6_unsigned: 63*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpnleuq %zmm1, %zmm0, %k1 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmq %zmm2, %zmm1, %zmm0 {%k1} 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 67*9880d681SAndroid Build Coastguard Worker %mask = icmp ugt <8 x i64> %x, %y 68*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x i64> %x1, <8 x i64> %y 69*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %max 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test7(<4 x float> %a, <4 x float> %b) { 73*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test7: 74*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 75*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vxorps %xmm2, %xmm2, %xmm2 76*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltps %xmm2, %xmm0, %xmm2 77*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0 78*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 79*9880d681SAndroid Build Coastguard Worker; 80*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test7: 81*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 82*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpxord %xmm2, %xmm2, %xmm2 83*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltps %xmm2, %xmm0, %k1 84*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmps %xmm0, %xmm1, %xmm0 {%k1} 85*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Worker %mask = fcmp olt <4 x float> %a, zeroinitializer 88*9880d681SAndroid Build Coastguard Worker %c = select <4 x i1>%mask, <4 x float>%a, <4 x float>%b 89*9880d681SAndroid Build Coastguard Worker ret <4 x float>%c 90*9880d681SAndroid Build Coastguard Worker} 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test8(<2 x double> %a, <2 x double> %b) { 93*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test8: 94*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 95*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vxorpd %xmm2, %xmm2, %xmm2 96*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltpd %xmm2, %xmm0, %xmm2 97*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 98*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 99*9880d681SAndroid Build Coastguard Worker; 100*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test8: 101*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 102*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpxord %xmm2, %xmm2, %xmm2 103*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltpd %xmm2, %xmm0, %k1 104*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmpd %xmm0, %xmm1, %xmm0 {%k1} 105*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 106*9880d681SAndroid Build Coastguard Worker %mask = fcmp olt <2 x double> %a, zeroinitializer 107*9880d681SAndroid Build Coastguard Worker %c = select <2 x i1>%mask, <2 x double>%a, <2 x double>%b 108*9880d681SAndroid Build Coastguard Worker ret <2 x double>%c 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test9(<8 x i32> %x, <8 x i32> %y) nounwind { 112*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test9: 113*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 114*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM1<def> %YMM1<kill> %ZMM1<def> 115*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 116*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpeqd %zmm1, %zmm0, %k1 117*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 118*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 119*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 120*9880d681SAndroid Build Coastguard Worker; 121*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test9: 122*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 123*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpeqd %ymm1, %ymm0, %k1 124*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 125*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 126*9880d681SAndroid Build Coastguard Worker %mask = icmp eq <8 x i32> %x, %y 127*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %y 128*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %max 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test10(<8 x float> %x, <8 x float> %y) nounwind { 132*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test10: 133*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 134*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM1<def> %YMM1<kill> %ZMM1<def> 135*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 136*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpeqps %zmm1, %zmm0, %k1 137*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 138*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 139*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 140*9880d681SAndroid Build Coastguard Worker; 141*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test10: 142*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 143*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpeqps %ymm1, %ymm0, %k1 144*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmps %ymm0, %ymm1, %ymm0 {%k1} 145*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker %mask = fcmp oeq <8 x float> %x, %y 148*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x float> %x, <8 x float> %y 149*9880d681SAndroid Build Coastguard Worker ret <8 x float> %max 150*9880d681SAndroid Build Coastguard Worker} 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test11_unsigned(<8 x i32> %x, <8 x i32> %y) nounwind { 153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test11_unsigned: 154*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 157*9880d681SAndroid Build Coastguard Worker %mask = icmp ugt <8 x i32> %x, %y 158*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %y 159*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %max 160*9880d681SAndroid Build Coastguard Worker} 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Workerdefine i16 @test12(<16 x i64> %a, <16 x i64> %b) nounwind { 163*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test12: 164*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqq %zmm2, %zmm0, %k0 166*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqq %zmm3, %zmm1, %k1 167*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kunpckbw %k0, %k1, %k0 168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %k0, %eax 169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill> 170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 171*9880d681SAndroid Build Coastguard Worker %res = icmp eq <16 x i64> %a, %b 172*9880d681SAndroid Build Coastguard Worker %res1 = bitcast <16 x i1> %res to i16 173*9880d681SAndroid Build Coastguard Worker ret i16 %res1 174*9880d681SAndroid Build Coastguard Worker} 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Workerdefine i32 @test12_v32i32(<32 x i32> %a, <32 x i32> %b) nounwind { 177*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test12_v32i32: 178*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 179*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: pushq %rbp 180*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movq %rsp, %rbp 181*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: andq $-32, %rsp 182*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: subq $32, %rsp 183*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpeqd %zmm3, %zmm1, %k0 184*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $14, %k0, %k1 185*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 186*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 187*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $15, %k0, %k1 188*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 189*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %ecx 190*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %ecx, %xmm1 191*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1 192*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $13, %k0, %k1 193*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 194*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 195*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1 196*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $12, %k0, %k1 197*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 198*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 199*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1 200*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $11, %k0, %k1 201*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 202*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 203*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1 204*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $10, %k0, %k1 205*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 206*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 207*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1 208*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $9, %k0, %k1 209*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 210*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 211*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1 212*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $8, %k0, %k1 213*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 214*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 215*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $7, %eax, %xmm1, %xmm1 216*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $7, %k0, %k1 217*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 218*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 219*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $8, %eax, %xmm1, %xmm1 220*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $6, %k0, %k1 221*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 222*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 223*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $9, %eax, %xmm1, %xmm1 224*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $5, %k0, %k1 225*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 226*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 227*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $10, %eax, %xmm1, %xmm1 228*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $4, %k0, %k1 229*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 230*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 231*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $11, %eax, %xmm1, %xmm1 232*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $3, %k0, %k1 233*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 234*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 235*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $12, %eax, %xmm1, %xmm1 236*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $2, %k0, %k1 237*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 238*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 239*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $13, %eax, %xmm1, %xmm1 240*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $1, %k0, %k1 241*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 242*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 243*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $14, %eax, %xmm1, %xmm1 244*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $0, %k0, %k0 245*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k0, %k0 246*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 247*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 248*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxbd %xmm1, %zmm1 249*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpslld $31, %zmm1, %zmm1 250*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptestmd %zmm1, %zmm1, %k0 251*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) 252*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpeqd %zmm2, %zmm0, %k0 253*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $14, %k0, %k1 254*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 255*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 256*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $15, %k0, %k1 257*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 258*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %ecx 259*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %ecx, %xmm0 260*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0 261*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $13, %k0, %k1 262*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 263*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 264*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0 265*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $12, %k0, %k1 266*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 267*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 268*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0 269*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $11, %k0, %k1 270*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 271*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 272*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0 273*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $10, %k0, %k1 274*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 275*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 276*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0 277*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $9, %k0, %k1 278*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 279*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 280*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0 281*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $8, %k0, %k1 282*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 283*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 284*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0 285*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $7, %k0, %k1 286*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 287*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 288*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 289*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $6, %k0, %k1 290*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 291*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 292*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0 293*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $5, %k0, %k1 294*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 295*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 296*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0 297*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $4, %k0, %k1 298*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 299*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 300*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0 301*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $3, %k0, %k1 302*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 303*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 304*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0 305*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $2, %k0, %k1 306*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 307*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 308*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0 309*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $1, %k0, %k1 310*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 311*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 312*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0 313*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $0, %k0, %k0 314*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k0, %k0 315*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 316*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 317*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxbd %xmm0, %zmm0 318*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpslld $31, %zmm0, %zmm0 319*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 320*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, (%rsp) 321*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movl (%rsp), %eax 322*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movq %rbp, %rsp 323*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: popq %rbp 324*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 325*9880d681SAndroid Build Coastguard Worker; 326*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test12_v32i32: 327*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 328*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpeqd %zmm2, %zmm0, %k0 329*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpeqd %zmm3, %zmm1, %k1 330*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kunpckwd %k0, %k1, %k0 331*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovd %k0, %eax 332*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 333*9880d681SAndroid Build Coastguard Worker %res = icmp eq <32 x i32> %a, %b 334*9880d681SAndroid Build Coastguard Worker %res1 = bitcast <32 x i1> %res to i32 335*9880d681SAndroid Build Coastguard Worker ret i32 %res1 336*9880d681SAndroid Build Coastguard Worker} 337*9880d681SAndroid Build Coastguard Worker 338*9880d681SAndroid Build Coastguard Workerdefine i64 @test12_v64i16(<64 x i16> %a, <64 x i16> %b) nounwind { 339*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test12_v64i16: 340*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 341*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: pushq %rbp 342*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movq %rsp, %rbp 343*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: andq $-32, %rsp 344*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: subq $64, %rsp 345*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpeqw %ymm5, %ymm1, %ymm1 346*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxwd %ymm1, %zmm1 347*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpslld $31, %zmm1, %zmm1 348*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptestmd %zmm1, %zmm1, %k0 349*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $14, %k0, %k1 350*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 351*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 352*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $15, %k0, %k1 353*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 354*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %ecx 355*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %ecx, %xmm1 356*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1 357*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $13, %k0, %k1 358*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 359*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 360*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1 361*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $12, %k0, %k1 362*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 363*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 364*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1 365*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $11, %k0, %k1 366*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 367*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 368*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1 369*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $10, %k0, %k1 370*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 371*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 372*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1 373*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $9, %k0, %k1 374*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 375*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 376*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1 377*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $8, %k0, %k1 378*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 379*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 380*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $7, %eax, %xmm1, %xmm1 381*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $7, %k0, %k1 382*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 383*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 384*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $8, %eax, %xmm1, %xmm1 385*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $6, %k0, %k1 386*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 387*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 388*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $9, %eax, %xmm1, %xmm1 389*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $5, %k0, %k1 390*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 391*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 392*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $10, %eax, %xmm1, %xmm1 393*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $4, %k0, %k1 394*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 395*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 396*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $11, %eax, %xmm1, %xmm1 397*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $3, %k0, %k1 398*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 399*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 400*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $12, %eax, %xmm1, %xmm1 401*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $2, %k0, %k1 402*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 403*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 404*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $13, %eax, %xmm1, %xmm1 405*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $1, %k0, %k1 406*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 407*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 408*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $14, %eax, %xmm1, %xmm1 409*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $0, %k0, %k0 410*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k0, %k0 411*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 412*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 413*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxbd %xmm1, %zmm1 414*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpslld $31, %zmm1, %zmm1 415*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptestmd %zmm1, %zmm1, %k0 416*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) 417*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpeqw %ymm4, %ymm0, %ymm0 418*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxwd %ymm0, %zmm0 419*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpslld $31, %zmm0, %zmm0 420*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 421*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $14, %k0, %k1 422*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 423*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 424*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $15, %k0, %k1 425*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 426*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %ecx 427*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %ecx, %xmm0 428*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0 429*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $13, %k0, %k1 430*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 431*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 432*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0 433*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $12, %k0, %k1 434*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 435*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 436*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0 437*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $11, %k0, %k1 438*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 439*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 440*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0 441*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $10, %k0, %k1 442*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 443*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 444*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0 445*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $9, %k0, %k1 446*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 447*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 448*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0 449*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $8, %k0, %k1 450*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 451*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 452*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0 453*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $7, %k0, %k1 454*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 455*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 456*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 457*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $6, %k0, %k1 458*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 459*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 460*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0 461*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $5, %k0, %k1 462*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 463*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 464*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0 465*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $4, %k0, %k1 466*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 467*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 468*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0 469*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $3, %k0, %k1 470*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 471*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 472*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0 473*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $2, %k0, %k1 474*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 475*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 476*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0 477*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $1, %k0, %k1 478*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 479*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 480*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0 481*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $0, %k0, %k0 482*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k0, %k0 483*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 484*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 485*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxbd %xmm0, %zmm0 486*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpslld $31, %zmm0, %zmm0 487*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 488*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, (%rsp) 489*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpeqw %ymm7, %ymm3, %ymm0 490*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxwd %ymm0, %zmm0 491*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpslld $31, %zmm0, %zmm0 492*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 493*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $14, %k0, %k1 494*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 495*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 496*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $15, %k0, %k1 497*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 498*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %ecx 499*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %ecx, %xmm0 500*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0 501*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $13, %k0, %k1 502*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 503*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 504*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0 505*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $12, %k0, %k1 506*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 507*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 508*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0 509*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $11, %k0, %k1 510*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 511*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 512*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0 513*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $10, %k0, %k1 514*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 515*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 516*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0 517*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $9, %k0, %k1 518*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 519*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 520*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0 521*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $8, %k0, %k1 522*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 523*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 524*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0 525*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $7, %k0, %k1 526*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 527*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 528*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 529*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $6, %k0, %k1 530*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 531*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 532*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0 533*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $5, %k0, %k1 534*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 535*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 536*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0 537*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $4, %k0, %k1 538*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 539*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 540*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0 541*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $3, %k0, %k1 542*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 543*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 544*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0 545*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $2, %k0, %k1 546*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 547*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 548*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0 549*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $1, %k0, %k1 550*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 551*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 552*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0 553*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $0, %k0, %k0 554*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k0, %k0 555*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 556*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 557*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxbd %xmm0, %zmm0 558*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpslld $31, %zmm0, %zmm0 559*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 560*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) 561*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpeqw %ymm6, %ymm2, %ymm0 562*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxwd %ymm0, %zmm0 563*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpslld $31, %zmm0, %zmm0 564*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 565*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $14, %k0, %k1 566*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 567*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 568*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $15, %k0, %k1 569*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 570*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %ecx 571*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %ecx, %xmm0 572*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0 573*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $13, %k0, %k1 574*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 575*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 576*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0 577*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $12, %k0, %k1 578*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 579*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 580*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0 581*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $11, %k0, %k1 582*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 583*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 584*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0 585*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $10, %k0, %k1 586*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 587*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 588*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0 589*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $9, %k0, %k1 590*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 591*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 592*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0 593*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $8, %k0, %k1 594*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 595*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 596*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0 597*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $7, %k0, %k1 598*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 599*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 600*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 601*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $6, %k0, %k1 602*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 603*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 604*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0 605*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $5, %k0, %k1 606*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 607*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 608*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0 609*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $4, %k0, %k1 610*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 611*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 612*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0 613*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $3, %k0, %k1 614*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 615*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 616*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0 617*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $2, %k0, %k1 618*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 619*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 620*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0 621*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $1, %k0, %k1 622*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k1, %k1 623*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k1, %eax 624*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0 625*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $0, %k0, %k0 626*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k0, %k0 627*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 628*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 629*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxbd %xmm0, %zmm0 630*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpslld $31, %zmm0, %zmm0 631*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 632*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) 633*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movl (%rsp), %ecx 634*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movl {{[0-9]+}}(%rsp), %eax 635*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: shlq $32, %rax 636*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: orq %rcx, %rax 637*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movq %rbp, %rsp 638*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: popq %rbp 639*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 640*9880d681SAndroid Build Coastguard Worker; 641*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test12_v64i16: 642*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 643*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpeqw %zmm2, %zmm0, %k0 644*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpeqw %zmm3, %zmm1, %k1 645*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kunpckdq %k0, %k1, %k0 646*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovq %k0, %rax 647*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 648*9880d681SAndroid Build Coastguard Worker %res = icmp eq <64 x i16> %a, %b 649*9880d681SAndroid Build Coastguard Worker %res1 = bitcast <64 x i1> %res to i64 650*9880d681SAndroid Build Coastguard Worker ret i64 %res1 651*9880d681SAndroid Build Coastguard Worker} 652*9880d681SAndroid Build Coastguard Worker 653*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test13(<16 x float>%a, <16 x float>%b) 654*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test13: 655*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 656*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcmpeqps %zmm1, %zmm0, %k1 657*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpbroadcastd {{.*}}(%rip), %zmm0 {%k1} {z} 658*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 659*9880d681SAndroid Build Coastguard Worker{ 660*9880d681SAndroid Build Coastguard Worker %cmpvector_i = fcmp oeq <16 x float> %a, %b 661*9880d681SAndroid Build Coastguard Worker %conv = zext <16 x i1> %cmpvector_i to <16 x i32> 662*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %conv 663*9880d681SAndroid Build Coastguard Worker} 664*9880d681SAndroid Build Coastguard Worker 665*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test14(<16 x i32>%a, <16 x i32>%b) { 666*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test14: 667*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 668*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsubd %zmm1, %zmm0, %zmm1 669*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtd %zmm0, %zmm1, %k1 670*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa32 %zmm1, %zmm0 {%k1} {z} 671*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 672*9880d681SAndroid Build Coastguard Worker %sub_r = sub <16 x i32> %a, %b 673*9880d681SAndroid Build Coastguard Worker %cmp.i2.i = icmp sgt <16 x i32> %sub_r, %a 674*9880d681SAndroid Build Coastguard Worker %sext.i3.i = sext <16 x i1> %cmp.i2.i to <16 x i32> 675*9880d681SAndroid Build Coastguard Worker %mask = icmp eq <16 x i32> %sext.i3.i, zeroinitializer 676*9880d681SAndroid Build Coastguard Worker %res = select <16 x i1> %mask, <16 x i32> zeroinitializer, <16 x i32> %sub_r 677*9880d681SAndroid Build Coastguard Worker ret <16 x i32>%res 678*9880d681SAndroid Build Coastguard Worker} 679*9880d681SAndroid Build Coastguard Worker 680*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test15(<8 x i64>%a, <8 x i64>%b) { 681*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test15: 682*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 683*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsubq %zmm1, %zmm0, %zmm1 684*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtq %zmm0, %zmm1, %k1 685*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa64 %zmm1, %zmm0 {%k1} {z} 686*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 687*9880d681SAndroid Build Coastguard Worker %sub_r = sub <8 x i64> %a, %b 688*9880d681SAndroid Build Coastguard Worker %cmp.i2.i = icmp sgt <8 x i64> %sub_r, %a 689*9880d681SAndroid Build Coastguard Worker %sext.i3.i = sext <8 x i1> %cmp.i2.i to <8 x i64> 690*9880d681SAndroid Build Coastguard Worker %mask = icmp eq <8 x i64> %sext.i3.i, zeroinitializer 691*9880d681SAndroid Build Coastguard Worker %res = select <8 x i1> %mask, <8 x i64> zeroinitializer, <8 x i64> %sub_r 692*9880d681SAndroid Build Coastguard Worker ret <8 x i64>%res 693*9880d681SAndroid Build Coastguard Worker} 694*9880d681SAndroid Build Coastguard Worker 695*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test16(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1) nounwind { 696*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test16: 697*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 698*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpled %zmm0, %zmm1, %k1 699*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmd %zmm2, %zmm1, %zmm0 {%k1} 700*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 701*9880d681SAndroid Build Coastguard Worker %mask = icmp sge <16 x i32> %x, %y 702*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x i32> %x1, <16 x i32> %y 703*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %max 704*9880d681SAndroid Build Coastguard Worker} 705*9880d681SAndroid Build Coastguard Worker 706*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test17(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %y.ptr) nounwind { 707*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test17: 708*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 709*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtd (%rdi), %zmm0, %k1 710*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 711*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 712*9880d681SAndroid Build Coastguard Worker %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4 713*9880d681SAndroid Build Coastguard Worker %mask = icmp sgt <16 x i32> %x, %y 714*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 715*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %max 716*9880d681SAndroid Build Coastguard Worker} 717*9880d681SAndroid Build Coastguard Worker 718*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test18(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %y.ptr) nounwind { 719*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test18: 720*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 721*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpled (%rdi), %zmm0, %k1 722*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 723*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 724*9880d681SAndroid Build Coastguard Worker %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4 725*9880d681SAndroid Build Coastguard Worker %mask = icmp sle <16 x i32> %x, %y 726*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 727*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %max 728*9880d681SAndroid Build Coastguard Worker} 729*9880d681SAndroid Build Coastguard Worker 730*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test19(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %y.ptr) nounwind { 731*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test19: 732*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 733*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpleud (%rdi), %zmm0, %k1 734*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 735*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 736*9880d681SAndroid Build Coastguard Worker %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4 737*9880d681SAndroid Build Coastguard Worker %mask = icmp ule <16 x i32> %x, %y 738*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 739*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %max 740*9880d681SAndroid Build Coastguard Worker} 741*9880d681SAndroid Build Coastguard Worker 742*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test20(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1, <16 x i32> %y1) nounwind { 743*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test20: 744*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 745*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqd %zmm1, %zmm0, %k1 746*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqd %zmm3, %zmm2, %k1 {%k1} 747*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 748*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 749*9880d681SAndroid Build Coastguard Worker %mask1 = icmp eq <16 x i32> %x1, %y1 750*9880d681SAndroid Build Coastguard Worker %mask0 = icmp eq <16 x i32> %x, %y 751*9880d681SAndroid Build Coastguard Worker %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer 752*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %y 753*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %max 754*9880d681SAndroid Build Coastguard Worker} 755*9880d681SAndroid Build Coastguard Worker 756*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test21(<8 x i64> %x, <8 x i64> %y, <8 x i64> %x1, <8 x i64> %y1) nounwind { 757*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test21: 758*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 759*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpleq %zmm1, %zmm0, %k1 760*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpleq %zmm2, %zmm3, %k1 {%k1} 761*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmq %zmm0, %zmm2, %zmm0 {%k1} 762*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 763*9880d681SAndroid Build Coastguard Worker %mask1 = icmp sge <8 x i64> %x1, %y1 764*9880d681SAndroid Build Coastguard Worker %mask0 = icmp sle <8 x i64> %x, %y 765*9880d681SAndroid Build Coastguard Worker %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer 766*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1 767*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %max 768*9880d681SAndroid Build Coastguard Worker} 769*9880d681SAndroid Build Coastguard Worker 770*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test22(<8 x i64> %x, <8 x i64>* %y.ptr, <8 x i64> %x1, <8 x i64> %y1) nounwind { 771*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test22: 772*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 773*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtq %zmm2, %zmm1, %k1 774*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtq (%rdi), %zmm0, %k1 {%k1} 775*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 776*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 777*9880d681SAndroid Build Coastguard Worker %mask1 = icmp sgt <8 x i64> %x1, %y1 778*9880d681SAndroid Build Coastguard Worker %y = load <8 x i64>, <8 x i64>* %y.ptr, align 4 779*9880d681SAndroid Build Coastguard Worker %mask0 = icmp sgt <8 x i64> %x, %y 780*9880d681SAndroid Build Coastguard Worker %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer 781*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1 782*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %max 783*9880d681SAndroid Build Coastguard Worker} 784*9880d681SAndroid Build Coastguard Worker 785*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test23(<16 x i32> %x, <16 x i32>* %y.ptr, <16 x i32> %x1, <16 x i32> %y1) nounwind { 786*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test23: 787*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 788*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpled %zmm1, %zmm2, %k1 789*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpleud (%rdi), %zmm0, %k1 {%k1} 790*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 791*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 792*9880d681SAndroid Build Coastguard Worker %mask1 = icmp sge <16 x i32> %x1, %y1 793*9880d681SAndroid Build Coastguard Worker %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4 794*9880d681SAndroid Build Coastguard Worker %mask0 = icmp ule <16 x i32> %x, %y 795*9880d681SAndroid Build Coastguard Worker %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer 796*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 797*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %max 798*9880d681SAndroid Build Coastguard Worker} 799*9880d681SAndroid Build Coastguard Worker 800*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test24(<8 x i64> %x, <8 x i64> %x1, i64* %yb.ptr) nounwind { 801*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test24: 802*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 803*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqq (%rdi){1to8}, %zmm0, %k1 804*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 805*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 806*9880d681SAndroid Build Coastguard Worker %yb = load i64, i64* %yb.ptr, align 4 807*9880d681SAndroid Build Coastguard Worker %y.0 = insertelement <8 x i64> undef, i64 %yb, i32 0 808*9880d681SAndroid Build Coastguard Worker %y = shufflevector <8 x i64> %y.0, <8 x i64> undef, <8 x i32> zeroinitializer 809*9880d681SAndroid Build Coastguard Worker %mask = icmp eq <8 x i64> %x, %y 810*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1 811*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %max 812*9880d681SAndroid Build Coastguard Worker} 813*9880d681SAndroid Build Coastguard Worker 814*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test25(<16 x i32> %x, i32* %yb.ptr, <16 x i32> %x1) nounwind { 815*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test25: 816*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 817*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpled (%rdi){1to16}, %zmm0, %k1 818*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 819*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 820*9880d681SAndroid Build Coastguard Worker %yb = load i32, i32* %yb.ptr, align 4 821*9880d681SAndroid Build Coastguard Worker %y.0 = insertelement <16 x i32> undef, i32 %yb, i32 0 822*9880d681SAndroid Build Coastguard Worker %y = shufflevector <16 x i32> %y.0, <16 x i32> undef, <16 x i32> zeroinitializer 823*9880d681SAndroid Build Coastguard Worker %mask = icmp sle <16 x i32> %x, %y 824*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 825*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %max 826*9880d681SAndroid Build Coastguard Worker} 827*9880d681SAndroid Build Coastguard Worker 828*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test26(<16 x i32> %x, i32* %yb.ptr, <16 x i32> %x1, <16 x i32> %y1) nounwind { 829*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test26: 830*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 831*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpled %zmm1, %zmm2, %k1 832*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtd (%rdi){1to16}, %zmm0, %k1 {%k1} 833*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 834*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 835*9880d681SAndroid Build Coastguard Worker %mask1 = icmp sge <16 x i32> %x1, %y1 836*9880d681SAndroid Build Coastguard Worker %yb = load i32, i32* %yb.ptr, align 4 837*9880d681SAndroid Build Coastguard Worker %y.0 = insertelement <16 x i32> undef, i32 %yb, i32 0 838*9880d681SAndroid Build Coastguard Worker %y = shufflevector <16 x i32> %y.0, <16 x i32> undef, <16 x i32> zeroinitializer 839*9880d681SAndroid Build Coastguard Worker %mask0 = icmp sgt <16 x i32> %x, %y 840*9880d681SAndroid Build Coastguard Worker %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer 841*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 842*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %max 843*9880d681SAndroid Build Coastguard Worker} 844*9880d681SAndroid Build Coastguard Worker 845*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test27(<8 x i64> %x, i64* %yb.ptr, <8 x i64> %x1, <8 x i64> %y1) nounwind { 846*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test27: 847*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 848*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpleq %zmm1, %zmm2, %k1 849*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpleq (%rdi){1to8}, %zmm0, %k1 {%k1} 850*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 851*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 852*9880d681SAndroid Build Coastguard Worker %mask1 = icmp sge <8 x i64> %x1, %y1 853*9880d681SAndroid Build Coastguard Worker %yb = load i64, i64* %yb.ptr, align 4 854*9880d681SAndroid Build Coastguard Worker %y.0 = insertelement <8 x i64> undef, i64 %yb, i32 0 855*9880d681SAndroid Build Coastguard Worker %y = shufflevector <8 x i64> %y.0, <8 x i64> undef, <8 x i32> zeroinitializer 856*9880d681SAndroid Build Coastguard Worker %mask0 = icmp sle <8 x i64> %x, %y 857*9880d681SAndroid Build Coastguard Worker %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer 858*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1 859*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %max 860*9880d681SAndroid Build Coastguard Worker} 861*9880d681SAndroid Build Coastguard Worker 862*9880d681SAndroid Build Coastguard Workerdefine <8 x i32>@test28(<8 x i64> %x, <8 x i64> %y, <8 x i64> %x1, <8 x i64> %y1) { 863*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test28: 864*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 865*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpgtq %zmm1, %zmm0, %k0 866*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpgtq %zmm3, %zmm2, %k1 867*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kxnorw %k1, %k0, %k1 868*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 869*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z} 870*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovqd %zmm0, %ymm0 871*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 872*9880d681SAndroid Build Coastguard Worker; 873*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test28: 874*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 875*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpgtq %zmm1, %zmm0, %k0 876*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpgtq %zmm3, %zmm2, %k1 877*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kxnorb %k1, %k0, %k0 878*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovm2d %k0, %ymm0 879*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 880*9880d681SAndroid Build Coastguard Worker %x_gt_y = icmp sgt <8 x i64> %x, %y 881*9880d681SAndroid Build Coastguard Worker %x1_gt_y1 = icmp sgt <8 x i64> %x1, %y1 882*9880d681SAndroid Build Coastguard Worker %res = icmp eq <8 x i1>%x_gt_y, %x1_gt_y1 883*9880d681SAndroid Build Coastguard Worker %resse = sext <8 x i1>%res to <8 x i32> 884*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %resse 885*9880d681SAndroid Build Coastguard Worker} 886*9880d681SAndroid Build Coastguard Worker 887*9880d681SAndroid Build Coastguard Workerdefine <16 x i8>@test29(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1, <16 x i32> %y1) { 888*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test29: 889*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 890*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpgtd %zmm1, %zmm0, %k0 891*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpgtd %zmm3, %zmm2, %k1 892*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kxorw %k1, %k0, %k1 893*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 894*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z} 895*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovdb %zmm0, %xmm0 896*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 897*9880d681SAndroid Build Coastguard Worker; 898*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test29: 899*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 900*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpgtd %zmm1, %zmm0, %k0 901*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpgtd %zmm3, %zmm2, %k1 902*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kxorw %k1, %k0, %k0 903*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovm2b %k0, %xmm0 904*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 905*9880d681SAndroid Build Coastguard Worker %x_gt_y = icmp sgt <16 x i32> %x, %y 906*9880d681SAndroid Build Coastguard Worker %x1_gt_y1 = icmp sgt <16 x i32> %x1, %y1 907*9880d681SAndroid Build Coastguard Worker %res = icmp ne <16 x i1>%x_gt_y, %x1_gt_y1 908*9880d681SAndroid Build Coastguard Worker %resse = sext <16 x i1>%res to <16 x i8> 909*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %resse 910*9880d681SAndroid Build Coastguard Worker} 911*9880d681SAndroid Build Coastguard Worker 912*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test30(<4 x double> %x, <4 x double> %y) nounwind { 913*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test30: 914*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 915*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm2 916*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 917*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 918*9880d681SAndroid Build Coastguard Worker; 919*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test30: 920*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 921*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpeqpd %ymm1, %ymm0, %k1 922*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmpd %ymm0, %ymm1, %ymm0 {%k1} 923*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 924*9880d681SAndroid Build Coastguard Worker 925*9880d681SAndroid Build Coastguard Worker %mask = fcmp oeq <4 x double> %x, %y 926*9880d681SAndroid Build Coastguard Worker %max = select <4 x i1> %mask, <4 x double> %x, <4 x double> %y 927*9880d681SAndroid Build Coastguard Worker ret <4 x double> %max 928*9880d681SAndroid Build Coastguard Worker} 929*9880d681SAndroid Build Coastguard Worker 930*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test31(<2 x double> %x, <2 x double> %x1, <2 x double>* %yp) nounwind { 931*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test31: 932*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 933*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltpd (%rdi), %xmm0, %xmm2 934*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 935*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 936*9880d681SAndroid Build Coastguard Worker; 937*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test31: 938*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 939*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltpd (%rdi), %xmm0, %k1 940*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmpd %xmm0, %xmm1, %xmm0 {%k1} 941*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 942*9880d681SAndroid Build Coastguard Worker 943*9880d681SAndroid Build Coastguard Worker %y = load <2 x double>, <2 x double>* %yp, align 4 944*9880d681SAndroid Build Coastguard Worker %mask = fcmp olt <2 x double> %x, %y 945*9880d681SAndroid Build Coastguard Worker %max = select <2 x i1> %mask, <2 x double> %x, <2 x double> %x1 946*9880d681SAndroid Build Coastguard Worker ret <2 x double> %max 947*9880d681SAndroid Build Coastguard Worker} 948*9880d681SAndroid Build Coastguard Worker 949*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test32(<4 x double> %x, <4 x double> %x1, <4 x double>* %yp) nounwind { 950*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test32: 951*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 952*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltpd (%rdi), %ymm0, %ymm2 953*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 954*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 955*9880d681SAndroid Build Coastguard Worker; 956*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test32: 957*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 958*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltpd (%rdi), %ymm0, %k1 959*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmpd %ymm0, %ymm1, %ymm0 {%k1} 960*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 961*9880d681SAndroid Build Coastguard Worker 962*9880d681SAndroid Build Coastguard Worker %y = load <4 x double>, <4 x double>* %yp, align 4 963*9880d681SAndroid Build Coastguard Worker %mask = fcmp ogt <4 x double> %y, %x 964*9880d681SAndroid Build Coastguard Worker %max = select <4 x i1> %mask, <4 x double> %x, <4 x double> %x1 965*9880d681SAndroid Build Coastguard Worker ret <4 x double> %max 966*9880d681SAndroid Build Coastguard Worker} 967*9880d681SAndroid Build Coastguard Worker 968*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test33(<8 x double> %x, <8 x double> %x1, <8 x double>* %yp) nounwind { 969*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test33: 970*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 971*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcmpltpd (%rdi), %zmm0, %k1 972*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vblendmpd %zmm0, %zmm1, %zmm0 {%k1} 973*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 974*9880d681SAndroid Build Coastguard Worker %y = load <8 x double>, <8 x double>* %yp, align 4 975*9880d681SAndroid Build Coastguard Worker %mask = fcmp olt <8 x double> %x, %y 976*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %x1 977*9880d681SAndroid Build Coastguard Worker ret <8 x double> %max 978*9880d681SAndroid Build Coastguard Worker} 979*9880d681SAndroid Build Coastguard Worker 980*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test34(<4 x float> %x, <4 x float> %x1, <4 x float>* %yp) nounwind { 981*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test34: 982*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 983*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltps (%rdi), %xmm0, %xmm2 984*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0 985*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 986*9880d681SAndroid Build Coastguard Worker; 987*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test34: 988*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 989*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltps (%rdi), %xmm0, %k1 990*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmps %xmm0, %xmm1, %xmm0 {%k1} 991*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 992*9880d681SAndroid Build Coastguard Worker %y = load <4 x float>, <4 x float>* %yp, align 4 993*9880d681SAndroid Build Coastguard Worker %mask = fcmp olt <4 x float> %x, %y 994*9880d681SAndroid Build Coastguard Worker %max = select <4 x i1> %mask, <4 x float> %x, <4 x float> %x1 995*9880d681SAndroid Build Coastguard Worker ret <4 x float> %max 996*9880d681SAndroid Build Coastguard Worker} 997*9880d681SAndroid Build Coastguard Worker 998*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test35(<8 x float> %x, <8 x float> %x1, <8 x float>* %yp) nounwind { 999*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test35: 1000*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 1001*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM1<def> %YMM1<kill> %ZMM1<def> 1002*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 1003*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovups (%rdi), %ymm2 1004*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltps %zmm2, %zmm0, %k1 1005*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 1006*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 1007*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 1008*9880d681SAndroid Build Coastguard Worker; 1009*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test35: 1010*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 1011*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltps (%rdi), %ymm0, %k1 1012*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmps %ymm0, %ymm1, %ymm0 {%k1} 1013*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 1014*9880d681SAndroid Build Coastguard Worker 1015*9880d681SAndroid Build Coastguard Worker %y = load <8 x float>, <8 x float>* %yp, align 4 1016*9880d681SAndroid Build Coastguard Worker %mask = fcmp ogt <8 x float> %y, %x 1017*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x float> %x, <8 x float> %x1 1018*9880d681SAndroid Build Coastguard Worker ret <8 x float> %max 1019*9880d681SAndroid Build Coastguard Worker} 1020*9880d681SAndroid Build Coastguard Worker 1021*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test36(<16 x float> %x, <16 x float> %x1, <16 x float>* %yp) nounwind { 1022*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test36: 1023*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 1024*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcmpltps (%rdi), %zmm0, %k1 1025*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 1026*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 1027*9880d681SAndroid Build Coastguard Worker %y = load <16 x float>, <16 x float>* %yp, align 4 1028*9880d681SAndroid Build Coastguard Worker %mask = fcmp olt <16 x float> %x, %y 1029*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x float> %x, <16 x float> %x1 1030*9880d681SAndroid Build Coastguard Worker ret <16 x float> %max 1031*9880d681SAndroid Build Coastguard Worker} 1032*9880d681SAndroid Build Coastguard Worker 1033*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test37(<8 x double> %x, <8 x double> %x1, double* %ptr) nounwind { 1034*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test37: 1035*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 1036*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcmpltpd (%rdi){1to8}, %zmm0, %k1 1037*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vblendmpd %zmm0, %zmm1, %zmm0 {%k1} 1038*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 1039*9880d681SAndroid Build Coastguard Worker 1040*9880d681SAndroid Build Coastguard Worker %a = load double, double* %ptr 1041*9880d681SAndroid Build Coastguard Worker %v = insertelement <8 x double> undef, double %a, i32 0 1042*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x double> %v, <8 x double> undef, <8 x i32> zeroinitializer 1043*9880d681SAndroid Build Coastguard Worker 1044*9880d681SAndroid Build Coastguard Worker %mask = fcmp ogt <8 x double> %shuffle, %x 1045*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %x1 1046*9880d681SAndroid Build Coastguard Worker ret <8 x double> %max 1047*9880d681SAndroid Build Coastguard Worker} 1048*9880d681SAndroid Build Coastguard Worker 1049*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test38(<4 x double> %x, <4 x double> %x1, double* %ptr) nounwind { 1050*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test38: 1051*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 1052*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vbroadcastsd (%rdi), %ymm2 1053*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltpd %ymm2, %ymm0, %ymm2 1054*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1055*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 1056*9880d681SAndroid Build Coastguard Worker; 1057*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test38: 1058*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 1059*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltpd (%rdi){1to4}, %ymm0, %k1 1060*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmpd %ymm0, %ymm1, %ymm0 {%k1} 1061*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 1062*9880d681SAndroid Build Coastguard Worker 1063*9880d681SAndroid Build Coastguard Worker %a = load double, double* %ptr 1064*9880d681SAndroid Build Coastguard Worker %v = insertelement <4 x double> undef, double %a, i32 0 1065*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %v, <4 x double> undef, <4 x i32> zeroinitializer 1066*9880d681SAndroid Build Coastguard Worker 1067*9880d681SAndroid Build Coastguard Worker %mask = fcmp ogt <4 x double> %shuffle, %x 1068*9880d681SAndroid Build Coastguard Worker %max = select <4 x i1> %mask, <4 x double> %x, <4 x double> %x1 1069*9880d681SAndroid Build Coastguard Worker ret <4 x double> %max 1070*9880d681SAndroid Build Coastguard Worker} 1071*9880d681SAndroid Build Coastguard Worker 1072*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test39(<2 x double> %x, <2 x double> %x1, double* %ptr) nounwind { 1073*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test39: 1074*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 1075*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovddup {{.*#+}} xmm2 = mem[0,0] 1076*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltpd %xmm2, %xmm0, %xmm2 1077*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 1078*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 1079*9880d681SAndroid Build Coastguard Worker; 1080*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test39: 1081*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 1082*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltpd (%rdi){1to2}, %xmm0, %k1 1083*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmpd %xmm0, %xmm1, %xmm0 {%k1} 1084*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 1085*9880d681SAndroid Build Coastguard Worker 1086*9880d681SAndroid Build Coastguard Worker %a = load double, double* %ptr 1087*9880d681SAndroid Build Coastguard Worker %v = insertelement <2 x double> undef, double %a, i32 0 1088*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 0, i32 0> 1089*9880d681SAndroid Build Coastguard Worker 1090*9880d681SAndroid Build Coastguard Worker %mask = fcmp ogt <2 x double> %shuffle, %x 1091*9880d681SAndroid Build Coastguard Worker %max = select <2 x i1> %mask, <2 x double> %x, <2 x double> %x1 1092*9880d681SAndroid Build Coastguard Worker ret <2 x double> %max 1093*9880d681SAndroid Build Coastguard Worker} 1094*9880d681SAndroid Build Coastguard Worker 1095*9880d681SAndroid Build Coastguard Worker 1096*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test40(<16 x float> %x, <16 x float> %x1, float* %ptr) nounwind { 1097*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test40: 1098*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 1099*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcmpltps (%rdi){1to16}, %zmm0, %k1 1100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 1101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 1102*9880d681SAndroid Build Coastguard Worker 1103*9880d681SAndroid Build Coastguard Worker %a = load float, float* %ptr 1104*9880d681SAndroid Build Coastguard Worker %v = insertelement <16 x float> undef, float %a, i32 0 1105*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <16 x float> %v, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 1106*9880d681SAndroid Build Coastguard Worker 1107*9880d681SAndroid Build Coastguard Worker %mask = fcmp ogt <16 x float> %shuffle, %x 1108*9880d681SAndroid Build Coastguard Worker %max = select <16 x i1> %mask, <16 x float> %x, <16 x float> %x1 1109*9880d681SAndroid Build Coastguard Worker ret <16 x float> %max 1110*9880d681SAndroid Build Coastguard Worker} 1111*9880d681SAndroid Build Coastguard Worker 1112*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test41(<8 x float> %x, <8 x float> %x1, float* %ptr) nounwind { 1113*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test41: 1114*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 1115*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM1<def> %YMM1<kill> %ZMM1<def> 1116*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 1117*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vbroadcastss (%rdi), %ymm2 1118*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltps %zmm2, %zmm0, %k1 1119*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 1120*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 1121*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 1122*9880d681SAndroid Build Coastguard Worker; 1123*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test41: 1124*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 1125*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltps (%rdi){1to8}, %ymm0, %k1 1126*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmps %ymm0, %ymm1, %ymm0 {%k1} 1127*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 1128*9880d681SAndroid Build Coastguard Worker 1129*9880d681SAndroid Build Coastguard Worker %a = load float, float* %ptr 1130*9880d681SAndroid Build Coastguard Worker %v = insertelement <8 x float> undef, float %a, i32 0 1131*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x float> %v, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 1132*9880d681SAndroid Build Coastguard Worker 1133*9880d681SAndroid Build Coastguard Worker %mask = fcmp ogt <8 x float> %shuffle, %x 1134*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x float> %x, <8 x float> %x1 1135*9880d681SAndroid Build Coastguard Worker ret <8 x float> %max 1136*9880d681SAndroid Build Coastguard Worker} 1137*9880d681SAndroid Build Coastguard Worker 1138*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test42(<4 x float> %x, <4 x float> %x1, float* %ptr) nounwind { 1139*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test42: 1140*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 1141*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vbroadcastss (%rdi), %xmm2 1142*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltps %xmm2, %xmm0, %xmm2 1143*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0 1144*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 1145*9880d681SAndroid Build Coastguard Worker; 1146*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test42: 1147*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 1148*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltps (%rdi){1to4}, %xmm0, %k1 1149*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmps %xmm0, %xmm1, %xmm0 {%k1} 1150*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 1151*9880d681SAndroid Build Coastguard Worker 1152*9880d681SAndroid Build Coastguard Worker %a = load float, float* %ptr 1153*9880d681SAndroid Build Coastguard Worker %v = insertelement <4 x float> undef, float %a, i32 0 1154*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0> 1155*9880d681SAndroid Build Coastguard Worker 1156*9880d681SAndroid Build Coastguard Worker %mask = fcmp ogt <4 x float> %shuffle, %x 1157*9880d681SAndroid Build Coastguard Worker %max = select <4 x i1> %mask, <4 x float> %x, <4 x float> %x1 1158*9880d681SAndroid Build Coastguard Worker ret <4 x float> %max 1159*9880d681SAndroid Build Coastguard Worker} 1160*9880d681SAndroid Build Coastguard Worker 1161*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test43(<8 x double> %x, <8 x double> %x1, double* %ptr,<8 x i1> %mask_in) nounwind { 1162*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test43: 1163*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 1164*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxwq %xmm2, %zmm2 1165*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpsllq $63, %zmm2, %zmm2 1166*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptestmq %zmm2, %zmm2, %k1 1167*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltpd (%rdi){1to8}, %zmm0, %k1 {%k1} 1168*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendmpd %zmm0, %zmm1, %zmm0 {%k1} 1169*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 1170*9880d681SAndroid Build Coastguard Worker; 1171*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test43: 1172*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 1173*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpsllw $15, %xmm2, %xmm2 1174*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovw2m %xmm2, %k1 1175*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltpd (%rdi){1to8}, %zmm0, %k1 {%k1} 1176*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vblendmpd %zmm0, %zmm1, %zmm0 {%k1} 1177*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 1178*9880d681SAndroid Build Coastguard Worker 1179*9880d681SAndroid Build Coastguard Worker %a = load double, double* %ptr 1180*9880d681SAndroid Build Coastguard Worker %v = insertelement <8 x double> undef, double %a, i32 0 1181*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x double> %v, <8 x double> undef, <8 x i32> zeroinitializer 1182*9880d681SAndroid Build Coastguard Worker 1183*9880d681SAndroid Build Coastguard Worker %mask_cmp = fcmp ogt <8 x double> %shuffle, %x 1184*9880d681SAndroid Build Coastguard Worker %mask = and <8 x i1> %mask_cmp, %mask_in 1185*9880d681SAndroid Build Coastguard Worker %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %x1 1186*9880d681SAndroid Build Coastguard Worker ret <8 x double> %max 1187*9880d681SAndroid Build Coastguard Worker} 1188*9880d681SAndroid Build Coastguard Worker 1189*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test44(<4 x i16> %x, <4 x i16> %y) #0 { 1190*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test44: 1191*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 1192*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpxor %xmm2, %xmm2, %xmm2 1193*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7] 1194*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7] 1195*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 1196*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 1197*9880d681SAndroid Build Coastguard Worker; 1198*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test44: 1199*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 1200*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpxord %xmm2, %xmm2, %xmm2 1201*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7] 1202*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7] 1203*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpeqd %xmm1, %xmm0, %k0 1204*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovm2d %k0, %xmm0 1205*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 1206*9880d681SAndroid Build Coastguard Worker %mask = icmp eq <4 x i16> %x, %y 1207*9880d681SAndroid Build Coastguard Worker %1 = sext <4 x i1> %mask to <4 x i32> 1208*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %1 1209*9880d681SAndroid Build Coastguard Worker} 1210*9880d681SAndroid Build Coastguard Worker 1211*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test45(<2 x i16> %x, <2 x i16> %y) #0 { 1212*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test45: 1213*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 1214*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpxor %xmm2, %xmm2, %xmm2 1215*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7] 1216*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7] 1217*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0 1218*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpsrlq $63, %xmm0, %xmm0 1219*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 1220*9880d681SAndroid Build Coastguard Worker; 1221*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test45: 1222*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 1223*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpxord %xmm2, %xmm2, %xmm2 1224*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7] 1225*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7] 1226*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpeqq %xmm1, %xmm0, %k1 1227*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovdqa64 {{.*}}(%rip), %xmm0 {%k1} {z} 1228*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 1229*9880d681SAndroid Build Coastguard Worker %mask = icmp eq <2 x i16> %x, %y 1230*9880d681SAndroid Build Coastguard Worker %1 = zext <2 x i1> %mask to <2 x i64> 1231*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 1232*9880d681SAndroid Build Coastguard Worker} 1233*9880d681SAndroid Build Coastguard Worker 1234*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test46(<2 x float> %x, <2 x float> %y) #0 { 1235*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test46: 1236*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 1237*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpeqps %xmm1, %xmm0, %xmm0 1238*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 1239*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpsllq $32, %xmm0, %xmm0 1240*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpsrad $31, %xmm0, %xmm1 1241*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1242*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3] 1243*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 1244*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 1245*9880d681SAndroid Build Coastguard Worker; 1246*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test46: 1247*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 1248*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpeqps %xmm1, %xmm0, %k1 1249*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovdqa64 {{.*}}(%rip), %xmm0 {%k1} {z} 1250*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 1251*9880d681SAndroid Build Coastguard Worker %mask = fcmp oeq <2 x float> %x, %y 1252*9880d681SAndroid Build Coastguard Worker %1 = zext <2 x i1> %mask to <2 x i64> 1253*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 1254*9880d681SAndroid Build Coastguard Worker} 1255