303 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s3 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, %k18; CHECK-NEXT: vpblendmb %ymm0, %ymm1, %ymm0 {%k1}9; CHECK-NEXT: retq10 %mask = icmp eq <32 x i8> %x, %y11 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %y12 ret <32 x i8> %max13}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, %k119; CHECK-NEXT: vpblendmb %ymm0, %ymm2, %ymm0 {%k1}20; CHECK-NEXT: retq21 %mask = icmp sgt <32 x i8> %x, %y22 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x123 ret <32 x i8> %max24}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, %k130; CHECK-NEXT: vpblendmw %ymm2, %ymm1, %ymm0 {%k1}31; CHECK-NEXT: retq32 %mask = icmp sge <16 x i16> %x, %y33 %max = select <16 x i1> %mask, <16 x i16> %x1, <16 x i16> %y34 ret <16 x i16> %max35}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, %k141; CHECK-NEXT: vpblendmb %ymm0, %ymm2, %ymm0 {%k1}42; CHECK-NEXT: retq43 %mask = icmp ugt <32 x i8> %x, %y44 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x145 ret <32 x i8> %max46}47 48define <16 x i16> @test256_5(<16 x i16> %x, <16 x i16> %x1, ptr %yp) nounwind {49; CHECK-LABEL: test256_5:50; CHECK: ## %bb.0:51; CHECK-NEXT: vpcmpeqw (%rdi), %ymm0, %k152; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}53; CHECK-NEXT: retq54 %y = load <16 x i16>, ptr %yp, align 455 %mask = icmp eq <16 x i16> %x, %y56 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x157 ret <16 x i16> %max58}59 60define <16 x i16> @test256_6(<16 x i16> %x, <16 x i16> %x1, ptr %y.ptr) nounwind {61; CHECK-LABEL: test256_6:62; CHECK: ## %bb.0:63; CHECK-NEXT: vpcmpgtw (%rdi), %ymm0, %k164; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}65; CHECK-NEXT: retq66 %y = load <16 x i16>, ptr %y.ptr, align 467 %mask = icmp sgt <16 x i16> %x, %y68 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x169 ret <16 x i16> %max70}71 72define <16 x i16> @test256_7(<16 x i16> %x, <16 x i16> %x1, ptr %y.ptr) nounwind {73; CHECK-LABEL: test256_7:74; CHECK: ## %bb.0:75; CHECK-NEXT: vpcmplew (%rdi), %ymm0, %k176; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}77; CHECK-NEXT: retq78 %y = load <16 x i16>, ptr %y.ptr, align 479 %mask = icmp sle <16 x i16> %x, %y80 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x181 ret <16 x i16> %max82}83 84define <16 x i16> @test256_8(<16 x i16> %x, <16 x i16> %x1, ptr %y.ptr) nounwind {85; CHECK-LABEL: test256_8:86; CHECK: ## %bb.0:87; CHECK-NEXT: vpcmpleuw (%rdi), %ymm0, %k188; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}89; CHECK-NEXT: retq90 %y = load <16 x i16>, ptr %y.ptr, align 491 %mask = icmp ule <16 x i16> %x, %y92 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x193 ret <16 x i16> %max94}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, %k1100; CHECK-NEXT: vpcmpeqw %ymm3, %ymm2, %k1 {%k1}101; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}102; CHECK-NEXT: retq103 %mask1 = icmp eq <16 x i16> %x1, %y1104 %mask0 = icmp eq <16 x i16> %x, %y105 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer106 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %y107 ret <16 x i16> %max108}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, %k1114; CHECK-NEXT: vpcmpnltb %ymm3, %ymm2, %k1 {%k1}115; CHECK-NEXT: vpblendmb %ymm0, %ymm2, %ymm0 {%k1}116; CHECK-NEXT: retq117 %mask1 = icmp sge <32 x i8> %x1, %y1118 %mask0 = icmp sle <32 x i8> %x, %y119 %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer120 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1121 ret <32 x i8> %max122}123 124define <32 x i8> @test256_11(<32 x i8> %x, ptr %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, %k1128; CHECK-NEXT: vpcmpgtb (%rdi), %ymm0, %k1 {%k1}129; CHECK-NEXT: vpblendmb %ymm0, %ymm1, %ymm0 {%k1}130; CHECK-NEXT: retq131 %mask1 = icmp sgt <32 x i8> %x1, %y1132 %y = load <32 x i8>, ptr %y.ptr, align 4133 %mask0 = icmp sgt <32 x i8> %x, %y134 %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer135 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1136 ret <32 x i8> %max137}138 139define <16 x i16> @test256_12(<16 x i16> %x, ptr %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, %k1143; CHECK-NEXT: vpcmpleuw (%rdi), %ymm0, %k1 {%k1}144; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}145; CHECK-NEXT: retq146 %mask1 = icmp sge <16 x i16> %x1, %y1147 %y = load <16 x i16>, ptr %y.ptr, align 4148 %mask0 = icmp ule <16 x i16> %x, %y149 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer150 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x1151 ret <16 x i16> %max152}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, %k1158; CHECK-NEXT: vpblendmb %xmm0, %xmm1, %xmm0 {%k1}159; CHECK-NEXT: retq160 %mask = icmp eq <16 x i8> %x, %y161 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %y162 ret <16 x i8> %max163}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, %k1169; CHECK-NEXT: vpblendmb %xmm0, %xmm2, %xmm0 {%k1}170; CHECK-NEXT: retq171 %mask = icmp sgt <16 x i8> %x, %y172 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1173 ret <16 x i8> %max174}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, %k1180; CHECK-NEXT: vpblendmw %xmm2, %xmm1, %xmm0 {%k1}181; CHECK-NEXT: retq182 %mask = icmp sge <8 x i16> %x, %y183 %max = select <8 x i1> %mask, <8 x i16> %x1, <8 x i16> %y184 ret <8 x i16> %max185}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, %k1191; CHECK-NEXT: vpblendmb %xmm0, %xmm2, %xmm0 {%k1}192; CHECK-NEXT: retq193 %mask = icmp ugt <16 x i8> %x, %y194 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1195 ret <16 x i8> %max196}197 198define <8 x i16> @test128_5(<8 x i16> %x, <8 x i16> %x1, ptr %yp) nounwind {199; CHECK-LABEL: test128_5:200; CHECK: ## %bb.0:201; CHECK-NEXT: vpcmpeqw (%rdi), %xmm0, %k1202; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}203; CHECK-NEXT: retq204 %y = load <8 x i16>, ptr %yp, align 4205 %mask = icmp eq <8 x i16> %x, %y206 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1207 ret <8 x i16> %max208}209 210define <8 x i16> @test128_6(<8 x i16> %x, <8 x i16> %x1, ptr %y.ptr) nounwind {211; CHECK-LABEL: test128_6:212; CHECK: ## %bb.0:213; CHECK-NEXT: vpcmpgtw (%rdi), %xmm0, %k1214; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}215; CHECK-NEXT: retq216 %y = load <8 x i16>, ptr %y.ptr, align 4217 %mask = icmp sgt <8 x i16> %x, %y218 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1219 ret <8 x i16> %max220}221 222define <8 x i16> @test128_7(<8 x i16> %x, <8 x i16> %x1, ptr %y.ptr) nounwind {223; CHECK-LABEL: test128_7:224; CHECK: ## %bb.0:225; CHECK-NEXT: vpcmplew (%rdi), %xmm0, %k1226; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}227; CHECK-NEXT: retq228 %y = load <8 x i16>, ptr %y.ptr, align 4229 %mask = icmp sle <8 x i16> %x, %y230 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1231 ret <8 x i16> %max232}233 234define <8 x i16> @test128_8(<8 x i16> %x, <8 x i16> %x1, ptr %y.ptr) nounwind {235; CHECK-LABEL: test128_8:236; CHECK: ## %bb.0:237; CHECK-NEXT: vpcmpleuw (%rdi), %xmm0, %k1238; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}239; CHECK-NEXT: retq240 %y = load <8 x i16>, ptr %y.ptr, align 4241 %mask = icmp ule <8 x i16> %x, %y242 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1243 ret <8 x i16> %max244}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, %k1250; CHECK-NEXT: vpcmpeqw %xmm3, %xmm2, %k1 {%k1}251; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}252; CHECK-NEXT: retq253 %mask1 = icmp eq <8 x i16> %x1, %y1254 %mask0 = icmp eq <8 x i16> %x, %y255 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer256 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %y257 ret <8 x i16> %max258}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, %k1264; CHECK-NEXT: vpcmpnltb %xmm3, %xmm2, %k1 {%k1}265; CHECK-NEXT: vpblendmb %xmm0, %xmm2, %xmm0 {%k1}266; CHECK-NEXT: retq267 %mask1 = icmp sge <16 x i8> %x1, %y1268 %mask0 = icmp sle <16 x i8> %x, %y269 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer270 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1271 ret <16 x i8> %max272}273 274define <16 x i8> @test128_11(<16 x i8> %x, ptr %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, %k1278; CHECK-NEXT: vpcmpgtb (%rdi), %xmm0, %k1 {%k1}279; CHECK-NEXT: vpblendmb %xmm0, %xmm1, %xmm0 {%k1}280; CHECK-NEXT: retq281 %mask1 = icmp sgt <16 x i8> %x1, %y1282 %y = load <16 x i8>, ptr %y.ptr, align 4283 %mask0 = icmp sgt <16 x i8> %x, %y284 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer285 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1286 ret <16 x i8> %max287}288 289define <8 x i16> @test128_12(<8 x i16> %x, ptr %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, %k1293; CHECK-NEXT: vpcmpleuw (%rdi), %xmm0, %k1 {%k1}294; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}295; CHECK-NEXT: retq296 %mask1 = icmp sge <8 x i16> %x1, %y1297 %y = load <8 x i16>, ptr %y.ptr, align 4298 %mask0 = icmp ule <8 x i16> %x, %y299 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer300 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1301 ret <8 x i16> %max302}303