1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s 3 4define <32 x i8> @test256_1(<32 x i8> %x, <32 x i8> %y) nounwind { 5; CHECK-LABEL: test256_1: 6; CHECK: ## %bb.0: 7; CHECK-NEXT: vpcmpeqb %ymm1, %ymm0, %k1 8; CHECK-NEXT: vpblendmb %ymm0, %ymm1, %ymm0 {%k1} 9; CHECK-NEXT: retq 10 %mask = icmp eq <32 x i8> %x, %y 11 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %y 12 ret <32 x i8> %max 13} 14 15define <32 x i8> @test256_2(<32 x i8> %x, <32 x i8> %y, <32 x i8> %x1) nounwind { 16; CHECK-LABEL: test256_2: 17; CHECK: ## %bb.0: 18; CHECK-NEXT: vpcmpgtb %ymm1, %ymm0, %k1 19; CHECK-NEXT: vpblendmb %ymm0, %ymm2, %ymm0 {%k1} 20; CHECK-NEXT: retq 21 %mask = icmp sgt <32 x i8> %x, %y 22 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1 23 ret <32 x i8> %max 24} 25 26define <16 x i16> @test256_3(<16 x i16> %x, <16 x i16> %y, <16 x i16> %x1) nounwind { 27; CHECK-LABEL: test256_3: 28; CHECK: ## %bb.0: 29; CHECK-NEXT: vpcmpnltw %ymm1, %ymm0, %k1 30; CHECK-NEXT: vpblendmw %ymm2, %ymm1, %ymm0 {%k1} 31; CHECK-NEXT: retq 32 %mask = icmp sge <16 x i16> %x, %y 33 %max = select <16 x i1> %mask, <16 x i16> %x1, <16 x i16> %y 34 ret <16 x i16> %max 35} 36 37define <32 x i8> @test256_4(<32 x i8> %x, <32 x i8> %y, <32 x i8> %x1) nounwind { 38; CHECK-LABEL: test256_4: 39; CHECK: ## %bb.0: 40; CHECK-NEXT: vpcmpnleub %ymm1, %ymm0, %k1 41; CHECK-NEXT: vpblendmb %ymm0, %ymm2, %ymm0 {%k1} 42; CHECK-NEXT: retq 43 %mask = icmp ugt <32 x i8> %x, %y 44 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1 45 ret <32 x i8> %max 46} 47 48define <16 x i16> @test256_5(<16 x i16> %x, <16 x i16> %x1, <16 x i16>* %yp) nounwind { 49; CHECK-LABEL: test256_5: 50; CHECK: ## %bb.0: 51; CHECK-NEXT: vpcmpeqw (%rdi), %ymm0, %k1 52; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1} 53; CHECK-NEXT: retq 54 %y = load <16 x i16>, <16 x i16>* %yp, align 4 55 %mask = icmp eq <16 x i16> %x, %y 56 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x1 57 ret <16 x i16> %max 58} 59 60define <16 x i16> @test256_6(<16 x i16> %x, <16 x i16> %x1, <16 x i16>* %y.ptr) nounwind { 61; CHECK-LABEL: test256_6: 62; CHECK: ## %bb.0: 63; CHECK-NEXT: vpcmpgtw (%rdi), %ymm0, %k1 64; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1} 65; CHECK-NEXT: retq 66 %y = load <16 x i16>, <16 x i16>* %y.ptr, align 4 67 %mask = icmp sgt <16 x i16> %x, %y 68 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x1 69 ret <16 x i16> %max 70} 71 72define <16 x i16> @test256_7(<16 x i16> %x, <16 x i16> %x1, <16 x i16>* %y.ptr) nounwind { 73; CHECK-LABEL: test256_7: 74; CHECK: ## %bb.0: 75; CHECK-NEXT: vpcmplew (%rdi), %ymm0, %k1 76; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1} 77; CHECK-NEXT: retq 78 %y = load <16 x i16>, <16 x i16>* %y.ptr, align 4 79 %mask = icmp sle <16 x i16> %x, %y 80 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x1 81 ret <16 x i16> %max 82} 83 84define <16 x i16> @test256_8(<16 x i16> %x, <16 x i16> %x1, <16 x i16>* %y.ptr) nounwind { 85; CHECK-LABEL: test256_8: 86; CHECK: ## %bb.0: 87; CHECK-NEXT: vpcmpleuw (%rdi), %ymm0, %k1 88; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1} 89; CHECK-NEXT: retq 90 %y = load <16 x i16>, <16 x i16>* %y.ptr, align 4 91 %mask = icmp ule <16 x i16> %x, %y 92 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x1 93 ret <16 x i16> %max 94} 95 96define <16 x i16> @test256_9(<16 x i16> %x, <16 x i16> %y, <16 x i16> %x1, <16 x i16> %y1) nounwind { 97; CHECK-LABEL: test256_9: 98; CHECK: ## %bb.0: 99; CHECK-NEXT: vpcmpeqw %ymm1, %ymm0, %k1 100; CHECK-NEXT: vpcmpeqw %ymm3, %ymm2, %k1 {%k1} 101; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1} 102; CHECK-NEXT: retq 103 %mask1 = icmp eq <16 x i16> %x1, %y1 104 %mask0 = icmp eq <16 x i16> %x, %y 105 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer 106 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %y 107 ret <16 x i16> %max 108} 109 110define <32 x i8> @test256_10(<32 x i8> %x, <32 x i8> %y, <32 x i8> %x1, <32 x i8> %y1) nounwind { 111; CHECK-LABEL: test256_10: 112; CHECK: ## %bb.0: 113; CHECK-NEXT: vpcmpleb %ymm1, %ymm0, %k1 114; CHECK-NEXT: vpcmpnltb %ymm3, %ymm2, %k1 {%k1} 115; CHECK-NEXT: vpblendmb %ymm0, %ymm2, %ymm0 {%k1} 116; CHECK-NEXT: retq 117 %mask1 = icmp sge <32 x i8> %x1, %y1 118 %mask0 = icmp sle <32 x i8> %x, %y 119 %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer 120 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1 121 ret <32 x i8> %max 122} 123 124define <32 x i8> @test256_11(<32 x i8> %x, <32 x i8>* %y.ptr, <32 x i8> %x1, <32 x i8> %y1) nounwind { 125; CHECK-LABEL: test256_11: 126; CHECK: ## %bb.0: 127; CHECK-NEXT: vpcmpgtb %ymm2, %ymm1, %k1 128; CHECK-NEXT: vpcmpgtb (%rdi), %ymm0, %k1 {%k1} 129; CHECK-NEXT: vpblendmb %ymm0, %ymm1, %ymm0 {%k1} 130; CHECK-NEXT: retq 131 %mask1 = icmp sgt <32 x i8> %x1, %y1 132 %y = load <32 x i8>, <32 x i8>* %y.ptr, align 4 133 %mask0 = icmp sgt <32 x i8> %x, %y 134 %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer 135 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1 136 ret <32 x i8> %max 137} 138 139define <16 x i16> @test256_12(<16 x i16> %x, <16 x i16>* %y.ptr, <16 x i16> %x1, <16 x i16> %y1) nounwind { 140; CHECK-LABEL: test256_12: 141; CHECK: ## %bb.0: 142; CHECK-NEXT: vpcmpnltw %ymm2, %ymm1, %k1 143; CHECK-NEXT: vpcmpleuw (%rdi), %ymm0, %k1 {%k1} 144; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1} 145; CHECK-NEXT: retq 146 %mask1 = icmp sge <16 x i16> %x1, %y1 147 %y = load <16 x i16>, <16 x i16>* %y.ptr, align 4 148 %mask0 = icmp ule <16 x i16> %x, %y 149 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer 150 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x1 151 ret <16 x i16> %max 152} 153 154define <16 x i8> @test128_1(<16 x i8> %x, <16 x i8> %y) nounwind { 155; CHECK-LABEL: test128_1: 156; CHECK: ## %bb.0: 157; CHECK-NEXT: vpcmpeqb %xmm1, %xmm0, %k1 158; CHECK-NEXT: vpblendmb %xmm0, %xmm1, %xmm0 {%k1} 159; CHECK-NEXT: retq 160 %mask = icmp eq <16 x i8> %x, %y 161 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %y 162 ret <16 x i8> %max 163} 164 165define <16 x i8> @test128_2(<16 x i8> %x, <16 x i8> %y, <16 x i8> %x1) nounwind { 166; CHECK-LABEL: test128_2: 167; CHECK: ## %bb.0: 168; CHECK-NEXT: vpcmpgtb %xmm1, %xmm0, %k1 169; CHECK-NEXT: vpblendmb %xmm0, %xmm2, %xmm0 {%k1} 170; CHECK-NEXT: retq 171 %mask = icmp sgt <16 x i8> %x, %y 172 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1 173 ret <16 x i8> %max 174} 175 176define <8 x i16> @test128_3(<8 x i16> %x, <8 x i16> %y, <8 x i16> %x1) nounwind { 177; CHECK-LABEL: test128_3: 178; CHECK: ## %bb.0: 179; CHECK-NEXT: vpcmpnltw %xmm1, %xmm0, %k1 180; CHECK-NEXT: vpblendmw %xmm2, %xmm1, %xmm0 {%k1} 181; CHECK-NEXT: retq 182 %mask = icmp sge <8 x i16> %x, %y 183 %max = select <8 x i1> %mask, <8 x i16> %x1, <8 x i16> %y 184 ret <8 x i16> %max 185} 186 187define <16 x i8> @test128_4(<16 x i8> %x, <16 x i8> %y, <16 x i8> %x1) nounwind { 188; CHECK-LABEL: test128_4: 189; CHECK: ## %bb.0: 190; CHECK-NEXT: vpcmpnleub %xmm1, %xmm0, %k1 191; CHECK-NEXT: vpblendmb %xmm0, %xmm2, %xmm0 {%k1} 192; CHECK-NEXT: retq 193 %mask = icmp ugt <16 x i8> %x, %y 194 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1 195 ret <16 x i8> %max 196} 197 198define <8 x i16> @test128_5(<8 x i16> %x, <8 x i16> %x1, <8 x i16>* %yp) nounwind { 199; CHECK-LABEL: test128_5: 200; CHECK: ## %bb.0: 201; CHECK-NEXT: vpcmpeqw (%rdi), %xmm0, %k1 202; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1} 203; CHECK-NEXT: retq 204 %y = load <8 x i16>, <8 x i16>* %yp, align 4 205 %mask = icmp eq <8 x i16> %x, %y 206 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1 207 ret <8 x i16> %max 208} 209 210define <8 x i16> @test128_6(<8 x i16> %x, <8 x i16> %x1, <8 x i16>* %y.ptr) nounwind { 211; CHECK-LABEL: test128_6: 212; CHECK: ## %bb.0: 213; CHECK-NEXT: vpcmpgtw (%rdi), %xmm0, %k1 214; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1} 215; CHECK-NEXT: retq 216 %y = load <8 x i16>, <8 x i16>* %y.ptr, align 4 217 %mask = icmp sgt <8 x i16> %x, %y 218 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1 219 ret <8 x i16> %max 220} 221 222define <8 x i16> @test128_7(<8 x i16> %x, <8 x i16> %x1, <8 x i16>* %y.ptr) nounwind { 223; CHECK-LABEL: test128_7: 224; CHECK: ## %bb.0: 225; CHECK-NEXT: vpcmplew (%rdi), %xmm0, %k1 226; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1} 227; CHECK-NEXT: retq 228 %y = load <8 x i16>, <8 x i16>* %y.ptr, align 4 229 %mask = icmp sle <8 x i16> %x, %y 230 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1 231 ret <8 x i16> %max 232} 233 234define <8 x i16> @test128_8(<8 x i16> %x, <8 x i16> %x1, <8 x i16>* %y.ptr) nounwind { 235; CHECK-LABEL: test128_8: 236; CHECK: ## %bb.0: 237; CHECK-NEXT: vpcmpleuw (%rdi), %xmm0, %k1 238; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1} 239; CHECK-NEXT: retq 240 %y = load <8 x i16>, <8 x i16>* %y.ptr, align 4 241 %mask = icmp ule <8 x i16> %x, %y 242 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1 243 ret <8 x i16> %max 244} 245 246define <8 x i16> @test128_9(<8 x i16> %x, <8 x i16> %y, <8 x i16> %x1, <8 x i16> %y1) nounwind { 247; CHECK-LABEL: test128_9: 248; CHECK: ## %bb.0: 249; CHECK-NEXT: vpcmpeqw %xmm1, %xmm0, %k1 250; CHECK-NEXT: vpcmpeqw %xmm3, %xmm2, %k1 {%k1} 251; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1} 252; CHECK-NEXT: retq 253 %mask1 = icmp eq <8 x i16> %x1, %y1 254 %mask0 = icmp eq <8 x i16> %x, %y 255 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer 256 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %y 257 ret <8 x i16> %max 258} 259 260define <16 x i8> @test128_10(<16 x i8> %x, <16 x i8> %y, <16 x i8> %x1, <16 x i8> %y1) nounwind { 261; CHECK-LABEL: test128_10: 262; CHECK: ## %bb.0: 263; CHECK-NEXT: vpcmpleb %xmm1, %xmm0, %k1 264; CHECK-NEXT: vpcmpnltb %xmm3, %xmm2, %k1 {%k1} 265; CHECK-NEXT: vpblendmb %xmm0, %xmm2, %xmm0 {%k1} 266; CHECK-NEXT: retq 267 %mask1 = icmp sge <16 x i8> %x1, %y1 268 %mask0 = icmp sle <16 x i8> %x, %y 269 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer 270 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1 271 ret <16 x i8> %max 272} 273 274define <16 x i8> @test128_11(<16 x i8> %x, <16 x i8>* %y.ptr, <16 x i8> %x1, <16 x i8> %y1) nounwind { 275; CHECK-LABEL: test128_11: 276; CHECK: ## %bb.0: 277; CHECK-NEXT: vpcmpgtb %xmm2, %xmm1, %k1 278; CHECK-NEXT: vpcmpgtb (%rdi), %xmm0, %k1 {%k1} 279; CHECK-NEXT: vpblendmb %xmm0, %xmm1, %xmm0 {%k1} 280; CHECK-NEXT: retq 281 %mask1 = icmp sgt <16 x i8> %x1, %y1 282 %y = load <16 x i8>, <16 x i8>* %y.ptr, align 4 283 %mask0 = icmp sgt <16 x i8> %x, %y 284 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer 285 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1 286 ret <16 x i8> %max 287} 288 289define <8 x i16> @test128_12(<8 x i16> %x, <8 x i16>* %y.ptr, <8 x i16> %x1, <8 x i16> %y1) nounwind { 290; CHECK-LABEL: test128_12: 291; CHECK: ## %bb.0: 292; CHECK-NEXT: vpcmpnltw %xmm2, %xmm1, %k1 293; CHECK-NEXT: vpcmpleuw (%rdi), %xmm0, %k1 {%k1} 294; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1} 295; CHECK-NEXT: retq 296 %mask1 = icmp sge <8 x i16> %x1, %y1 297 %y = load <8 x i16>, <8 x i16>* %y.ptr, align 4 298 %mask0 = icmp ule <8 x i16> %x, %y 299 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer 300 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1 301 ret <8 x i16> %max 302} 303