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=skx | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @test1(<64 x i8> %x, <64 x i8> %y) nounwind { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1: 6*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqb %zmm1, %zmm0, %k1 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmb %zmm0, %zmm1, %zmm0 {%k1} 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 10*9880d681SAndroid Build Coastguard Worker %mask = icmp eq <64 x i8> %x, %y 11*9880d681SAndroid Build Coastguard Worker %max = select <64 x i1> %mask, <64 x i8> %x, <64 x i8> %y 12*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %max 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @test2(<64 x i8> %x, <64 x i8> %y, <64 x i8> %x1) nounwind { 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 17*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtb %zmm1, %zmm0, %k1 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmb %zmm2, %zmm1, %zmm0 {%k1} 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 21*9880d681SAndroid Build Coastguard Worker %mask = icmp sgt <64 x i8> %x, %y 22*9880d681SAndroid Build Coastguard Worker %max = select <64 x i1> %mask, <64 x i8> %x1, <64 x i8> %y 23*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %max 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @test3(<32 x i16> %x, <32 x i16> %y, <32 x i16> %x1) nounwind { 27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3: 28*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmplew %zmm0, %zmm1, %k1 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmw %zmm2, %zmm1, %zmm0 {%k1} 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 32*9880d681SAndroid Build Coastguard Worker %mask = icmp sge <32 x i16> %x, %y 33*9880d681SAndroid Build Coastguard Worker %max = select <32 x i1> %mask, <32 x i16> %x1, <32 x i16> %y 34*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %max 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @test4(<64 x i8> %x, <64 x i8> %y, <64 x i8> %x1) nounwind { 38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test4: 39*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpnleub %zmm1, %zmm0, %k1 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmb %zmm2, %zmm1, %zmm0 {%k1} 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 43*9880d681SAndroid Build Coastguard Worker %mask = icmp ugt <64 x i8> %x, %y 44*9880d681SAndroid Build Coastguard Worker %max = select <64 x i1> %mask, <64 x i8> %x1, <64 x i8> %y 45*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %max 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @test5(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %yp) nounwind { 49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test5: 50*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqw (%rdi), %zmm0, %k1 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmw %zmm0, %zmm1, %zmm0 {%k1} 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 54*9880d681SAndroid Build Coastguard Worker %y = load <32 x i16>, <32 x i16>* %yp, align 4 55*9880d681SAndroid Build Coastguard Worker %mask = icmp eq <32 x i16> %x, %y 56*9880d681SAndroid Build Coastguard Worker %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1 57*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %max 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @test6(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %y.ptr) nounwind { 61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test6: 62*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtw (%rdi), %zmm0, %k1 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmw %zmm0, %zmm1, %zmm0 {%k1} 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 66*9880d681SAndroid Build Coastguard Worker %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4 67*9880d681SAndroid Build Coastguard Worker %mask = icmp sgt <32 x i16> %x, %y 68*9880d681SAndroid Build Coastguard Worker %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1 69*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %max 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @test7(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %y.ptr) nounwind { 73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test7: 74*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmplew (%rdi), %zmm0, %k1 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmw %zmm0, %zmm1, %zmm0 {%k1} 77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 78*9880d681SAndroid Build Coastguard Worker %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4 79*9880d681SAndroid Build Coastguard Worker %mask = icmp sle <32 x i16> %x, %y 80*9880d681SAndroid Build Coastguard Worker %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1 81*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %max 82*9880d681SAndroid Build Coastguard Worker} 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @test8(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %y.ptr) nounwind { 85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8: 86*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpleuw (%rdi), %zmm0, %k1 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmw %zmm0, %zmm1, %zmm0 {%k1} 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 90*9880d681SAndroid Build Coastguard Worker %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4 91*9880d681SAndroid Build Coastguard Worker %mask = icmp ule <32 x i16> %x, %y 92*9880d681SAndroid Build Coastguard Worker %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1 93*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %max 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @test9(<32 x i16> %x, <32 x i16> %y, <32 x i16> %x1, <32 x i16> %y1) nounwind { 97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test9: 98*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqw %zmm1, %zmm0, %k1 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqw %zmm3, %zmm2, %k1 {%k1} 101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmw %zmm0, %zmm1, %zmm0 {%k1} 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 103*9880d681SAndroid Build Coastguard Worker %mask1 = icmp eq <32 x i16> %x1, %y1 104*9880d681SAndroid Build Coastguard Worker %mask0 = icmp eq <32 x i16> %x, %y 105*9880d681SAndroid Build Coastguard Worker %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer 106*9880d681SAndroid Build Coastguard Worker %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %y 107*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %max 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @test10(<64 x i8> %x, <64 x i8> %y, <64 x i8> %x1, <64 x i8> %y1) nounwind { 111*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test10: 112*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpleb %zmm1, %zmm0, %k1 114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpleb %zmm2, %zmm3, %k1 {%k1} 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmb %zmm0, %zmm2, %zmm0 {%k1} 116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 117*9880d681SAndroid Build Coastguard Worker %mask1 = icmp sge <64 x i8> %x1, %y1 118*9880d681SAndroid Build Coastguard Worker %mask0 = icmp sle <64 x i8> %x, %y 119*9880d681SAndroid Build Coastguard Worker %mask = select <64 x i1> %mask0, <64 x i1> %mask1, <64 x i1> zeroinitializer 120*9880d681SAndroid Build Coastguard Worker %max = select <64 x i1> %mask, <64 x i8> %x, <64 x i8> %x1 121*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %max 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @test11(<64 x i8> %x, <64 x i8>* %y.ptr, <64 x i8> %x1, <64 x i8> %y1) nounwind { 125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test11: 126*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtb %zmm2, %zmm1, %k1 128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtb (%rdi), %zmm0, %k1 {%k1} 129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmb %zmm0, %zmm1, %zmm0 {%k1} 130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 131*9880d681SAndroid Build Coastguard Worker %mask1 = icmp sgt <64 x i8> %x1, %y1 132*9880d681SAndroid Build Coastguard Worker %y = load <64 x i8>, <64 x i8>* %y.ptr, align 4 133*9880d681SAndroid Build Coastguard Worker %mask0 = icmp sgt <64 x i8> %x, %y 134*9880d681SAndroid Build Coastguard Worker %mask = select <64 x i1> %mask0, <64 x i1> %mask1, <64 x i1> zeroinitializer 135*9880d681SAndroid Build Coastguard Worker %max = select <64 x i1> %mask, <64 x i8> %x, <64 x i8> %x1 136*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %max 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @test12(<32 x i16> %x, <32 x i16>* %y.ptr, <32 x i16> %x1, <32 x i16> %y1) nounwind { 140*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test12: 141*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmplew %zmm1, %zmm2, %k1 143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpleuw (%rdi), %zmm0, %k1 {%k1} 144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmw %zmm0, %zmm1, %zmm0 {%k1} 145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 146*9880d681SAndroid Build Coastguard Worker %mask1 = icmp sge <32 x i16> %x1, %y1 147*9880d681SAndroid Build Coastguard Worker %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4 148*9880d681SAndroid Build Coastguard Worker %mask0 = icmp ule <32 x i16> %x, %y 149*9880d681SAndroid Build Coastguard Worker %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer 150*9880d681SAndroid Build Coastguard Worker %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1 151*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %max 152*9880d681SAndroid Build Coastguard Worker} 153