1138 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefix=VLX3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=NoVLX4 5define <4 x i64> @test256_1(<4 x i64> %x, <4 x i64> %y) nounwind {6; VLX-LABEL: test256_1:7; VLX: # %bb.0:8; VLX-NEXT: vpcmpeqq %ymm1, %ymm0, %k19; VLX-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}10; VLX-NEXT: retq11;12; NoVLX-LABEL: test256_1:13; NoVLX: # %bb.0:14; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm115; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016; NoVLX-NEXT: vpcmpeqq %zmm1, %zmm0, %k117; NoVLX-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}18; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm019; NoVLX-NEXT: retq20 %mask = icmp eq <4 x i64> %x, %y21 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %y22 ret <4 x i64> %max23}24 25define <4 x i64> @test256_2(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1) nounwind {26; VLX-LABEL: test256_2:27; VLX: # %bb.0:28; VLX-NEXT: vpcmpgtq %ymm1, %ymm0, %k129; VLX-NEXT: vpblendmq %ymm2, %ymm1, %ymm0 {%k1}30; VLX-NEXT: retq31;32; NoVLX-LABEL: test256_2:33; NoVLX: # %bb.0:34; NoVLX-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm235; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm136; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm037; NoVLX-NEXT: vpcmpgtq %zmm1, %zmm0, %k138; NoVLX-NEXT: vpblendmq %zmm2, %zmm1, %zmm0 {%k1}39; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm040; NoVLX-NEXT: retq41 %mask = icmp sgt <4 x i64> %x, %y42 %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y43 ret <4 x i64> %max44}45 46define <8 x i32> @test256_3(<8 x i32> %x, <8 x i32> %y, <8 x i32> %x1) nounwind {47; VLX-LABEL: test256_3:48; VLX: # %bb.0:49; VLX-NEXT: vpcmpnltd %ymm1, %ymm0, %k150; VLX-NEXT: vpblendmd %ymm2, %ymm1, %ymm0 {%k1}51; VLX-NEXT: retq52;53; NoVLX-LABEL: test256_3:54; NoVLX: # %bb.0:55; NoVLX-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm256; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm157; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm058; NoVLX-NEXT: vpcmpnltd %zmm1, %zmm0, %k159; NoVLX-NEXT: vpblendmd %zmm2, %zmm1, %zmm0 {%k1}60; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm061; NoVLX-NEXT: retq62 %mask = icmp sge <8 x i32> %x, %y63 %max = select <8 x i1> %mask, <8 x i32> %x1, <8 x i32> %y64 ret <8 x i32> %max65}66 67define <4 x i64> @test256_4(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1) nounwind {68; VLX-LABEL: test256_4:69; VLX: # %bb.0:70; VLX-NEXT: vpcmpnleuq %ymm1, %ymm0, %k171; VLX-NEXT: vpblendmq %ymm2, %ymm1, %ymm0 {%k1}72; VLX-NEXT: retq73;74; NoVLX-LABEL: test256_4:75; NoVLX: # %bb.0:76; NoVLX-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm277; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm178; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm079; NoVLX-NEXT: vpcmpnleuq %zmm1, %zmm0, %k180; NoVLX-NEXT: vpblendmq %zmm2, %zmm1, %zmm0 {%k1}81; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm082; NoVLX-NEXT: retq83 %mask = icmp ugt <4 x i64> %x, %y84 %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y85 ret <4 x i64> %max86}87 88define <8 x i32> @test256_5(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {89; VLX-LABEL: test256_5:90; VLX: # %bb.0:91; VLX-NEXT: vpcmpeqd (%rdi), %ymm0, %k192; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}93; VLX-NEXT: retq94;95; NoVLX-LABEL: test256_5:96; NoVLX: # %bb.0:97; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm198; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm099; NoVLX-NEXT: vmovdqu (%rdi), %ymm2100; NoVLX-NEXT: vpcmpeqd %zmm2, %zmm0, %k1101; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}102; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0103; NoVLX-NEXT: retq104 %y = load <8 x i32>, ptr %yp, align 4105 %mask = icmp eq <8 x i32> %x, %y106 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1107 ret <8 x i32> %max108}109 110define <8 x i32> @test256_5b(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {111; VLX-LABEL: test256_5b:112; VLX: # %bb.0:113; VLX-NEXT: vpcmpeqd (%rdi), %ymm0, %k1114; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}115; VLX-NEXT: retq116;117; NoVLX-LABEL: test256_5b:118; NoVLX: # %bb.0:119; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1120; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0121; NoVLX-NEXT: vmovdqu (%rdi), %ymm2122; NoVLX-NEXT: vpcmpeqd %zmm0, %zmm2, %k1123; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}124; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0125; NoVLX-NEXT: retq126 %y = load <8 x i32>, ptr %yp, align 4127 %mask = icmp eq <8 x i32> %y, %x128 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1129 ret <8 x i32> %max130}131 132define <8 x i32> @test256_6(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {133; VLX-LABEL: test256_6:134; VLX: # %bb.0:135; VLX-NEXT: vpcmpgtd (%rdi), %ymm0, %k1136; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}137; VLX-NEXT: retq138;139; NoVLX-LABEL: test256_6:140; NoVLX: # %bb.0:141; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1142; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0143; NoVLX-NEXT: vmovdqu (%rdi), %ymm2144; NoVLX-NEXT: vpcmpgtd %zmm2, %zmm0, %k1145; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}146; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0147; NoVLX-NEXT: retq148 %y = load <8 x i32>, ptr %y.ptr, align 4149 %mask = icmp sgt <8 x i32> %x, %y150 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1151 ret <8 x i32> %max152}153 154define <8 x i32> @test256_6b(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {155; VLX-LABEL: test256_6b:156; VLX: # %bb.0:157; VLX-NEXT: vpcmpgtd (%rdi), %ymm0, %k1158; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}159; VLX-NEXT: retq160;161; NoVLX-LABEL: test256_6b:162; NoVLX: # %bb.0:163; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1164; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0165; NoVLX-NEXT: vmovdqu (%rdi), %ymm2166; NoVLX-NEXT: vpcmpgtd %zmm2, %zmm0, %k1167; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}168; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0169; NoVLX-NEXT: retq170 %y = load <8 x i32>, ptr %y.ptr, align 4171 %mask = icmp slt <8 x i32> %y, %x172 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1173 ret <8 x i32> %max174}175 176define <8 x i32> @test256_7(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {177; VLX-LABEL: test256_7:178; VLX: # %bb.0:179; VLX-NEXT: vpcmpled (%rdi), %ymm0, %k1180; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}181; VLX-NEXT: retq182;183; NoVLX-LABEL: test256_7:184; NoVLX: # %bb.0:185; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1186; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0187; NoVLX-NEXT: vmovdqu (%rdi), %ymm2188; NoVLX-NEXT: vpcmpled %zmm2, %zmm0, %k1189; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}190; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0191; NoVLX-NEXT: retq192 %y = load <8 x i32>, ptr %y.ptr, align 4193 %mask = icmp sle <8 x i32> %x, %y194 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1195 ret <8 x i32> %max196}197 198define <8 x i32> @test256_7b(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {199; VLX-LABEL: test256_7b:200; VLX: # %bb.0:201; VLX-NEXT: vpcmpled (%rdi), %ymm0, %k1202; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}203; VLX-NEXT: retq204;205; NoVLX-LABEL: test256_7b:206; NoVLX: # %bb.0:207; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1208; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0209; NoVLX-NEXT: vmovdqu (%rdi), %ymm2210; NoVLX-NEXT: vpcmpnltd %zmm0, %zmm2, %k1211; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}212; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0213; NoVLX-NEXT: retq214 %y = load <8 x i32>, ptr %y.ptr, align 4215 %mask = icmp sge <8 x i32> %y, %x216 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1217 ret <8 x i32> %max218}219 220define <8 x i32> @test256_8(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {221; VLX-LABEL: test256_8:222; VLX: # %bb.0:223; VLX-NEXT: vpcmpleud (%rdi), %ymm0, %k1224; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}225; VLX-NEXT: retq226;227; NoVLX-LABEL: test256_8:228; NoVLX: # %bb.0:229; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1230; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0231; NoVLX-NEXT: vmovdqu (%rdi), %ymm2232; NoVLX-NEXT: vpcmpleud %zmm2, %zmm0, %k1233; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}234; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0235; NoVLX-NEXT: retq236 %y = load <8 x i32>, ptr %y.ptr, align 4237 %mask = icmp ule <8 x i32> %x, %y238 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1239 ret <8 x i32> %max240}241 242define <8 x i32> @test256_8b(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {243; VLX-LABEL: test256_8b:244; VLX: # %bb.0:245; VLX-NEXT: vpcmpleud (%rdi), %ymm0, %k1246; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}247; VLX-NEXT: retq248;249; NoVLX-LABEL: test256_8b:250; NoVLX: # %bb.0:251; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1252; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0253; NoVLX-NEXT: vmovdqu (%rdi), %ymm2254; NoVLX-NEXT: vpcmpnltud %zmm0, %zmm2, %k1255; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}256; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0257; NoVLX-NEXT: retq258 %y = load <8 x i32>, ptr %y.ptr, align 4259 %mask = icmp uge <8 x i32> %y, %x260 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1261 ret <8 x i32> %max262}263 264define <8 x i32> @test256_9(<8 x i32> %x, <8 x i32> %y, <8 x i32> %x1, <8 x i32> %y1) nounwind {265; VLX-LABEL: test256_9:266; VLX: # %bb.0:267; VLX-NEXT: vpcmpeqd %ymm1, %ymm0, %k1268; VLX-NEXT: vpcmpeqd %ymm3, %ymm2, %k1 {%k1}269; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}270; VLX-NEXT: retq271;272; NoVLX-LABEL: test256_9:273; NoVLX: # %bb.0:274; NoVLX-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3275; NoVLX-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2276; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1277; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0278; NoVLX-NEXT: vpcmpeqd %zmm1, %zmm0, %k1279; NoVLX-NEXT: vpcmpeqd %zmm3, %zmm2, %k1 {%k1}280; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}281; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0282; NoVLX-NEXT: retq283 %mask1 = icmp eq <8 x i32> %x1, %y1284 %mask0 = icmp eq <8 x i32> %x, %y285 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer286 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %y287 ret <8 x i32> %max288}289 290define <4 x i64> @test256_10(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1, <4 x i64> %y1) nounwind {291; VLX-LABEL: test256_10:292; VLX: # %bb.0:293; VLX-NEXT: vpcmpleq %ymm1, %ymm0, %k1294; VLX-NEXT: vpcmpnltq %ymm3, %ymm2, %k1 {%k1}295; VLX-NEXT: vpblendmq %ymm0, %ymm2, %ymm0 {%k1}296; VLX-NEXT: retq297;298; NoVLX-LABEL: test256_10:299; NoVLX: # %bb.0:300; NoVLX-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3301; NoVLX-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2302; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1303; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0304; NoVLX-NEXT: vpcmpleq %zmm1, %zmm0, %k1305; NoVLX-NEXT: vpcmpnltq %zmm3, %zmm2, %k1 {%k1}306; NoVLX-NEXT: vpblendmq %zmm0, %zmm2, %zmm0 {%k1}307; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0308; NoVLX-NEXT: retq309 %mask1 = icmp sge <4 x i64> %x1, %y1310 %mask0 = icmp sle <4 x i64> %x, %y311 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer312 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1313 ret <4 x i64> %max314}315 316define <4 x i64> @test256_11(<4 x i64> %x, ptr %y.ptr, <4 x i64> %x1, <4 x i64> %y1) nounwind {317; VLX-LABEL: test256_11:318; VLX: # %bb.0:319; VLX-NEXT: vpcmpgtq %ymm2, %ymm1, %k1320; VLX-NEXT: vpcmpgtq (%rdi), %ymm0, %k1 {%k1}321; VLX-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}322; VLX-NEXT: retq323;324; NoVLX-LABEL: test256_11:325; NoVLX: # %bb.0:326; NoVLX-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2327; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1328; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0329; NoVLX-NEXT: vmovdqu (%rdi), %ymm3330; NoVLX-NEXT: vpcmpgtq %zmm3, %zmm0, %k1331; NoVLX-NEXT: vpcmpgtq %zmm2, %zmm1, %k1 {%k1}332; NoVLX-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}333; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0334; NoVLX-NEXT: retq335 %mask1 = icmp sgt <4 x i64> %x1, %y1336 %y = load <4 x i64>, ptr %y.ptr, align 4337 %mask0 = icmp sgt <4 x i64> %x, %y338 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer339 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1340 ret <4 x i64> %max341}342 343define <8 x i32> @test256_12(<8 x i32> %x, ptr %y.ptr, <8 x i32> %x1, <8 x i32> %y1) nounwind {344; VLX-LABEL: test256_12:345; VLX: # %bb.0:346; VLX-NEXT: vpcmpnltd %ymm2, %ymm1, %k1347; VLX-NEXT: vpcmpleud (%rdi), %ymm0, %k1 {%k1}348; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}349; VLX-NEXT: retq350;351; NoVLX-LABEL: test256_12:352; NoVLX: # %bb.0:353; NoVLX-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2354; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1355; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0356; NoVLX-NEXT: vmovdqu (%rdi), %ymm3357; NoVLX-NEXT: vpcmpleud %zmm3, %zmm0, %k1358; NoVLX-NEXT: vpcmpnltd %zmm2, %zmm1, %k1 {%k1}359; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}360; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0361; NoVLX-NEXT: retq362 %mask1 = icmp sge <8 x i32> %x1, %y1363 %y = load <8 x i32>, ptr %y.ptr, align 4364 %mask0 = icmp ule <8 x i32> %x, %y365 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer366 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1367 ret <8 x i32> %max368}369 370define <4 x i64> @test256_13(<4 x i64> %x, <4 x i64> %x1, ptr %yb.ptr) nounwind {371; VLX-LABEL: test256_13:372; VLX: # %bb.0:373; VLX-NEXT: vpcmpeqq (%rdi){1to4}, %ymm0, %k1374; VLX-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}375; VLX-NEXT: retq376;377; NoVLX-LABEL: test256_13:378; NoVLX: # %bb.0:379; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1380; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0381; NoVLX-NEXT: vpcmpeqq (%rdi){1to8}, %zmm0, %k1382; NoVLX-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}383; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0384; NoVLX-NEXT: retq385 %yb = load i64, ptr %yb.ptr, align 4386 %y.0 = insertelement <4 x i64> undef, i64 %yb, i32 0387 %y = shufflevector <4 x i64> %y.0, <4 x i64> undef, <4 x i32> zeroinitializer388 %mask = icmp eq <4 x i64> %x, %y389 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1390 ret <4 x i64> %max391}392 393define <8 x i32> @test256_14(<8 x i32> %x, ptr %yb.ptr, <8 x i32> %x1) nounwind {394; VLX-LABEL: test256_14:395; VLX: # %bb.0:396; VLX-NEXT: vpcmpled (%rdi){1to8}, %ymm0, %k1397; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}398; VLX-NEXT: retq399;400; NoVLX-LABEL: test256_14:401; NoVLX: # %bb.0:402; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1403; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0404; NoVLX-NEXT: vpcmpled (%rdi){1to16}, %zmm0, %k1405; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}406; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0407; NoVLX-NEXT: retq408 %yb = load i32, ptr %yb.ptr, align 4409 %y.0 = insertelement <8 x i32> undef, i32 %yb, i32 0410 %y = shufflevector <8 x i32> %y.0, <8 x i32> undef, <8 x i32> zeroinitializer411 %mask = icmp sle <8 x i32> %x, %y412 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1413 ret <8 x i32> %max414}415 416define <8 x i32> @test256_15(<8 x i32> %x, ptr %yb.ptr, <8 x i32> %x1, <8 x i32> %y1) nounwind {417; VLX-LABEL: test256_15:418; VLX: # %bb.0:419; VLX-NEXT: vpcmpnltd %ymm2, %ymm1, %k1420; VLX-NEXT: vpcmpgtd (%rdi){1to8}, %ymm0, %k1 {%k1}421; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}422; VLX-NEXT: retq423;424; NoVLX-LABEL: test256_15:425; NoVLX: # %bb.0:426; NoVLX-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2427; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1428; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0429; NoVLX-NEXT: vpcmpnltd %zmm2, %zmm1, %k1430; NoVLX-NEXT: vpcmpgtd (%rdi){1to16}, %zmm0, %k1 {%k1}431; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}432; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0433; NoVLX-NEXT: retq434 %mask1 = icmp sge <8 x i32> %x1, %y1435 %yb = load i32, ptr %yb.ptr, align 4436 %y.0 = insertelement <8 x i32> undef, i32 %yb, i32 0437 %y = shufflevector <8 x i32> %y.0, <8 x i32> undef, <8 x i32> zeroinitializer438 %mask0 = icmp sgt <8 x i32> %x, %y439 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer440 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1441 ret <8 x i32> %max442}443 444define <4 x i64> @test256_16(<4 x i64> %x, ptr %yb.ptr, <4 x i64> %x1, <4 x i64> %y1) nounwind {445; VLX-LABEL: test256_16:446; VLX: # %bb.0:447; VLX-NEXT: vpcmpnltq %ymm2, %ymm1, %k1448; VLX-NEXT: vpcmpgtq (%rdi){1to4}, %ymm0, %k1 {%k1}449; VLX-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}450; VLX-NEXT: retq451;452; NoVLX-LABEL: test256_16:453; NoVLX: # %bb.0:454; NoVLX-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2455; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1456; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0457; NoVLX-NEXT: vpcmpnltq %zmm2, %zmm1, %k1458; NoVLX-NEXT: vpcmpgtq (%rdi){1to8}, %zmm0, %k1 {%k1}459; NoVLX-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}460; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0461; NoVLX-NEXT: retq462 %mask1 = icmp sge <4 x i64> %x1, %y1463 %yb = load i64, ptr %yb.ptr, align 4464 %y.0 = insertelement <4 x i64> undef, i64 %yb, i32 0465 %y = shufflevector <4 x i64> %y.0, <4 x i64> undef, <4 x i32> zeroinitializer466 %mask0 = icmp sgt <4 x i64> %x, %y467 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer468 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1469 ret <4 x i64> %max470}471 472define <8 x i32> @test256_17(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {473; VLX-LABEL: test256_17:474; VLX: # %bb.0:475; VLX-NEXT: vpcmpneqd (%rdi), %ymm0, %k1476; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}477; VLX-NEXT: retq478;479; NoVLX-LABEL: test256_17:480; NoVLX: # %bb.0:481; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1482; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0483; NoVLX-NEXT: vmovdqu (%rdi), %ymm2484; NoVLX-NEXT: vpcmpneqd %zmm2, %zmm0, %k1485; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}486; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0487; NoVLX-NEXT: retq488 %y = load <8 x i32>, ptr %yp, align 4489 %mask = icmp ne <8 x i32> %x, %y490 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1491 ret <8 x i32> %max492}493 494define <8 x i32> @test256_18(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {495; VLX-LABEL: test256_18:496; VLX: # %bb.0:497; VLX-NEXT: vpcmpneqd (%rdi), %ymm0, %k1498; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}499; VLX-NEXT: retq500;501; NoVLX-LABEL: test256_18:502; NoVLX: # %bb.0:503; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1504; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0505; NoVLX-NEXT: vmovdqu (%rdi), %ymm2506; NoVLX-NEXT: vpcmpneqd %zmm0, %zmm2, %k1507; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}508; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0509; NoVLX-NEXT: retq510 %y = load <8 x i32>, ptr %yp, align 4511 %mask = icmp ne <8 x i32> %y, %x512 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1513 ret <8 x i32> %max514}515 516define <8 x i32> @test256_19(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {517; VLX-LABEL: test256_19:518; VLX: # %bb.0:519; VLX-NEXT: vpcmpnltud (%rdi), %ymm0, %k1520; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}521; VLX-NEXT: retq522;523; NoVLX-LABEL: test256_19:524; NoVLX: # %bb.0:525; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1526; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0527; NoVLX-NEXT: vmovdqu (%rdi), %ymm2528; NoVLX-NEXT: vpcmpnltud %zmm2, %zmm0, %k1529; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}530; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0531; NoVLX-NEXT: retq532 %y = load <8 x i32>, ptr %yp, align 4533 %mask = icmp uge <8 x i32> %x, %y534 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1535 ret <8 x i32> %max536}537 538define <8 x i32> @test256_20(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {539; VLX-LABEL: test256_20:540; VLX: # %bb.0:541; VLX-NEXT: vpcmpleud (%rdi), %ymm0, %k1542; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}543; VLX-NEXT: retq544;545; NoVLX-LABEL: test256_20:546; NoVLX: # %bb.0:547; NoVLX-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1548; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0549; NoVLX-NEXT: vmovdqu (%rdi), %ymm2550; NoVLX-NEXT: vpcmpnltud %zmm0, %zmm2, %k1551; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}552; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0553; NoVLX-NEXT: retq554 %y = load <8 x i32>, ptr %yp, align 4555 %mask = icmp uge <8 x i32> %y, %x556 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1557 ret <8 x i32> %max558}559 560define <2 x i64> @test128_1(<2 x i64> %x, <2 x i64> %y) nounwind {561; VLX-LABEL: test128_1:562; VLX: # %bb.0:563; VLX-NEXT: vpcmpeqq %xmm1, %xmm0, %k1564; VLX-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}565; VLX-NEXT: retq566;567; NoVLX-LABEL: test128_1:568; NoVLX: # %bb.0:569; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1570; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0571; NoVLX-NEXT: vpcmpeqq %zmm1, %zmm0, %k1572; NoVLX-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}573; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0574; NoVLX-NEXT: retq575 %mask = icmp eq <2 x i64> %x, %y576 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %y577 ret <2 x i64> %max578}579 580define <2 x i64> @test128_2(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1) nounwind {581; VLX-LABEL: test128_2:582; VLX: # %bb.0:583; VLX-NEXT: vpcmpgtq %xmm1, %xmm0, %k1584; VLX-NEXT: vpblendmq %xmm2, %xmm1, %xmm0 {%k1}585; VLX-NEXT: retq586;587; NoVLX-LABEL: test128_2:588; NoVLX: # %bb.0:589; NoVLX-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2590; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1591; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0592; NoVLX-NEXT: vpcmpgtq %zmm1, %zmm0, %k1593; NoVLX-NEXT: vpblendmq %zmm2, %zmm1, %zmm0 {%k1}594; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0595; NoVLX-NEXT: retq596 %mask = icmp sgt <2 x i64> %x, %y597 %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y598 ret <2 x i64> %max599}600 601define <4 x i32> @test128_3(<4 x i32> %x, <4 x i32> %y, <4 x i32> %x1) nounwind {602; VLX-LABEL: test128_3:603; VLX: # %bb.0:604; VLX-NEXT: vpcmpnltd %xmm1, %xmm0, %k1605; VLX-NEXT: vpblendmd %xmm2, %xmm1, %xmm0 {%k1}606; VLX-NEXT: retq607;608; NoVLX-LABEL: test128_3:609; NoVLX: # %bb.0:610; NoVLX-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2611; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1612; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0613; NoVLX-NEXT: vpcmpnltd %zmm1, %zmm0, %k1614; NoVLX-NEXT: vpblendmd %zmm2, %zmm1, %zmm0 {%k1}615; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0616; NoVLX-NEXT: retq617 %mask = icmp sge <4 x i32> %x, %y618 %max = select <4 x i1> %mask, <4 x i32> %x1, <4 x i32> %y619 ret <4 x i32> %max620}621 622define <2 x i64> @test128_4(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1) nounwind {623; VLX-LABEL: test128_4:624; VLX: # %bb.0:625; VLX-NEXT: vpcmpnleuq %xmm1, %xmm0, %k1626; VLX-NEXT: vpblendmq %xmm2, %xmm1, %xmm0 {%k1}627; VLX-NEXT: retq628;629; NoVLX-LABEL: test128_4:630; NoVLX: # %bb.0:631; NoVLX-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2632; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1633; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0634; NoVLX-NEXT: vpcmpnleuq %zmm1, %zmm0, %k1635; NoVLX-NEXT: vpblendmq %zmm2, %zmm1, %zmm0 {%k1}636; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0637; NoVLX-NEXT: retq638 %mask = icmp ugt <2 x i64> %x, %y639 %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y640 ret <2 x i64> %max641}642 643define <4 x i32> @test128_5(<4 x i32> %x, <4 x i32> %x1, ptr %yp) nounwind {644; VLX-LABEL: test128_5:645; VLX: # %bb.0:646; VLX-NEXT: vpcmpeqd (%rdi), %xmm0, %k1647; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}648; VLX-NEXT: retq649;650; NoVLX-LABEL: test128_5:651; NoVLX: # %bb.0:652; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1653; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0654; NoVLX-NEXT: vmovdqu (%rdi), %xmm2655; NoVLX-NEXT: vpcmpeqd %zmm2, %zmm0, %k1656; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}657; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0658; NoVLX-NEXT: retq659 %y = load <4 x i32>, ptr %yp, align 4660 %mask = icmp eq <4 x i32> %x, %y661 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1662 ret <4 x i32> %max663}664 665define <4 x i32> @test128_5b(<4 x i32> %x, <4 x i32> %x1, ptr %yp) nounwind {666; VLX-LABEL: test128_5b:667; VLX: # %bb.0:668; VLX-NEXT: vpcmpeqd (%rdi), %xmm0, %k1669; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}670; VLX-NEXT: retq671;672; NoVLX-LABEL: test128_5b:673; NoVLX: # %bb.0:674; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1675; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0676; NoVLX-NEXT: vmovdqu (%rdi), %xmm2677; NoVLX-NEXT: vpcmpeqd %zmm0, %zmm2, %k1678; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}679; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0680; NoVLX-NEXT: retq681 %y = load <4 x i32>, ptr %yp, align 4682 %mask = icmp eq <4 x i32> %y, %x683 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1684 ret <4 x i32> %max685}686 687define <4 x i32> @test128_6(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {688; VLX-LABEL: test128_6:689; VLX: # %bb.0:690; VLX-NEXT: vpcmpgtd (%rdi), %xmm0, %k1691; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}692; VLX-NEXT: retq693;694; NoVLX-LABEL: test128_6:695; NoVLX: # %bb.0:696; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1697; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0698; NoVLX-NEXT: vmovdqu (%rdi), %xmm2699; NoVLX-NEXT: vpcmpgtd %zmm2, %zmm0, %k1700; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}701; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0702; NoVLX-NEXT: retq703 %y = load <4 x i32>, ptr %y.ptr, align 4704 %mask = icmp sgt <4 x i32> %x, %y705 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1706 ret <4 x i32> %max707}708 709define <4 x i32> @test128_6b(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {710; VLX-LABEL: test128_6b:711; VLX: # %bb.0:712; VLX-NEXT: vpcmpgtd (%rdi), %xmm0, %k1713; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}714; VLX-NEXT: retq715;716; NoVLX-LABEL: test128_6b:717; NoVLX: # %bb.0:718; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1719; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0720; NoVLX-NEXT: vmovdqu (%rdi), %xmm2721; NoVLX-NEXT: vpcmpgtd %zmm2, %zmm0, %k1722; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}723; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0724; NoVLX-NEXT: retq725 %y = load <4 x i32>, ptr %y.ptr, align 4726 %mask = icmp slt <4 x i32> %y, %x727 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1728 ret <4 x i32> %max729}730 731define <4 x i32> @test128_7(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {732; VLX-LABEL: test128_7:733; VLX: # %bb.0:734; VLX-NEXT: vpcmpled (%rdi), %xmm0, %k1735; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}736; VLX-NEXT: retq737;738; NoVLX-LABEL: test128_7:739; NoVLX: # %bb.0:740; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1741; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0742; NoVLX-NEXT: vmovdqu (%rdi), %xmm2743; NoVLX-NEXT: vpcmpled %zmm2, %zmm0, %k1744; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}745; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0746; NoVLX-NEXT: retq747 %y = load <4 x i32>, ptr %y.ptr, align 4748 %mask = icmp sle <4 x i32> %x, %y749 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1750 ret <4 x i32> %max751}752 753define <4 x i32> @test128_7b(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {754; VLX-LABEL: test128_7b:755; VLX: # %bb.0:756; VLX-NEXT: vpcmpled (%rdi), %xmm0, %k1757; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}758; VLX-NEXT: retq759;760; NoVLX-LABEL: test128_7b:761; NoVLX: # %bb.0:762; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1763; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0764; NoVLX-NEXT: vmovdqu (%rdi), %xmm2765; NoVLX-NEXT: vpcmpnltd %zmm0, %zmm2, %k1766; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}767; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0768; NoVLX-NEXT: retq769 %y = load <4 x i32>, ptr %y.ptr, align 4770 %mask = icmp sge <4 x i32> %y, %x771 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1772 ret <4 x i32> %max773}774 775define <4 x i32> @test128_8(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {776; VLX-LABEL: test128_8:777; VLX: # %bb.0:778; VLX-NEXT: vpcmpleud (%rdi), %xmm0, %k1779; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}780; VLX-NEXT: retq781;782; NoVLX-LABEL: test128_8:783; NoVLX: # %bb.0:784; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1785; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0786; NoVLX-NEXT: vmovdqu (%rdi), %xmm2787; NoVLX-NEXT: vpcmpleud %zmm2, %zmm0, %k1788; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}789; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0790; NoVLX-NEXT: retq791 %y = load <4 x i32>, ptr %y.ptr, align 4792 %mask = icmp ule <4 x i32> %x, %y793 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1794 ret <4 x i32> %max795}796 797define <4 x i32> @test128_8b(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {798; VLX-LABEL: test128_8b:799; VLX: # %bb.0:800; VLX-NEXT: vpcmpleud (%rdi), %xmm0, %k1801; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}802; VLX-NEXT: retq803;804; NoVLX-LABEL: test128_8b:805; NoVLX: # %bb.0:806; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1807; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0808; NoVLX-NEXT: vmovdqu (%rdi), %xmm2809; NoVLX-NEXT: vpcmpnltud %zmm0, %zmm2, %k1810; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}811; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0812; NoVLX-NEXT: retq813 %y = load <4 x i32>, ptr %y.ptr, align 4814 %mask = icmp uge <4 x i32> %y, %x815 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1816 ret <4 x i32> %max817}818 819define <4 x i32> @test128_9(<4 x i32> %x, <4 x i32> %y, <4 x i32> %x1, <4 x i32> %y1) nounwind {820; VLX-LABEL: test128_9:821; VLX: # %bb.0:822; VLX-NEXT: vpcmpeqd %xmm1, %xmm0, %k1823; VLX-NEXT: vpcmpeqd %xmm3, %xmm2, %k1 {%k1}824; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}825; VLX-NEXT: retq826;827; NoVLX-LABEL: test128_9:828; NoVLX: # %bb.0:829; NoVLX-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3830; NoVLX-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2831; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1832; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0833; NoVLX-NEXT: vpcmpeqd %zmm1, %zmm0, %k1834; NoVLX-NEXT: vpcmpeqd %zmm3, %zmm2, %k1 {%k1}835; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}836; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0837; NoVLX-NEXT: retq838 %mask1 = icmp eq <4 x i32> %x1, %y1839 %mask0 = icmp eq <4 x i32> %x, %y840 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer841 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %y842 ret <4 x i32> %max843}844 845define <2 x i64> @test128_10(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1, <2 x i64> %y1) nounwind {846; VLX-LABEL: test128_10:847; VLX: # %bb.0:848; VLX-NEXT: vpcmpleq %xmm1, %xmm0, %k1849; VLX-NEXT: vpcmpnltq %xmm3, %xmm2, %k1 {%k1}850; VLX-NEXT: vpblendmq %xmm0, %xmm2, %xmm0 {%k1}851; VLX-NEXT: retq852;853; NoVLX-LABEL: test128_10:854; NoVLX: # %bb.0:855; NoVLX-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3856; NoVLX-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2857; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1858; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0859; NoVLX-NEXT: vpcmpleq %zmm1, %zmm0, %k1860; NoVLX-NEXT: vpcmpnltq %zmm3, %zmm2, %k1 {%k1}861; NoVLX-NEXT: vpblendmq %zmm0, %zmm2, %zmm0 {%k1}862; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0863; NoVLX-NEXT: retq864 %mask1 = icmp sge <2 x i64> %x1, %y1865 %mask0 = icmp sle <2 x i64> %x, %y866 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer867 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1868 ret <2 x i64> %max869}870 871define <2 x i64> @test128_11(<2 x i64> %x, ptr %y.ptr, <2 x i64> %x1, <2 x i64> %y1) nounwind {872; VLX-LABEL: test128_11:873; VLX: # %bb.0:874; VLX-NEXT: vpcmpgtq %xmm2, %xmm1, %k1875; VLX-NEXT: vpcmpgtq (%rdi), %xmm0, %k1 {%k1}876; VLX-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}877; VLX-NEXT: retq878;879; NoVLX-LABEL: test128_11:880; NoVLX: # %bb.0:881; NoVLX-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2882; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1883; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0884; NoVLX-NEXT: vmovdqu (%rdi), %xmm3885; NoVLX-NEXT: vpcmpgtq %zmm3, %zmm0, %k1886; NoVLX-NEXT: vpcmpgtq %zmm2, %zmm1, %k1 {%k1}887; NoVLX-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}888; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0889; NoVLX-NEXT: retq890 %mask1 = icmp sgt <2 x i64> %x1, %y1891 %y = load <2 x i64>, ptr %y.ptr, align 4892 %mask0 = icmp sgt <2 x i64> %x, %y893 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer894 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1895 ret <2 x i64> %max896}897 898define <4 x i32> @test128_12(<4 x i32> %x, ptr %y.ptr, <4 x i32> %x1, <4 x i32> %y1) nounwind {899; VLX-LABEL: test128_12:900; VLX: # %bb.0:901; VLX-NEXT: vpcmpnltd %xmm2, %xmm1, %k1902; VLX-NEXT: vpcmpleud (%rdi), %xmm0, %k1 {%k1}903; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}904; VLX-NEXT: retq905;906; NoVLX-LABEL: test128_12:907; NoVLX: # %bb.0:908; NoVLX-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2909; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1910; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0911; NoVLX-NEXT: vmovdqu (%rdi), %xmm3912; NoVLX-NEXT: vpcmpleud %zmm3, %zmm0, %k1913; NoVLX-NEXT: vpcmpnltd %zmm2, %zmm1, %k1 {%k1}914; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}915; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0916; NoVLX-NEXT: retq917 %mask1 = icmp sge <4 x i32> %x1, %y1918 %y = load <4 x i32>, ptr %y.ptr, align 4919 %mask0 = icmp ule <4 x i32> %x, %y920 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer921 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1922 ret <4 x i32> %max923}924 925define <2 x i64> @test128_13(<2 x i64> %x, <2 x i64> %x1, ptr %yb.ptr) nounwind {926; VLX-LABEL: test128_13:927; VLX: # %bb.0:928; VLX-NEXT: vpcmpeqq (%rdi){1to2}, %xmm0, %k1929; VLX-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}930; VLX-NEXT: retq931;932; NoVLX-LABEL: test128_13:933; NoVLX: # %bb.0:934; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1935; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0936; NoVLX-NEXT: vpcmpeqq (%rdi){1to8}, %zmm0, %k1937; NoVLX-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}938; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0939; NoVLX-NEXT: retq940 %yb = load i64, ptr %yb.ptr, align 4941 %y.0 = insertelement <2 x i64> undef, i64 %yb, i32 0942 %y = insertelement <2 x i64> %y.0, i64 %yb, i32 1943 %mask = icmp eq <2 x i64> %x, %y944 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1945 ret <2 x i64> %max946}947 948define <4 x i32> @test128_14(<4 x i32> %x, ptr %yb.ptr, <4 x i32> %x1) nounwind {949; VLX-LABEL: test128_14:950; VLX: # %bb.0:951; VLX-NEXT: vpcmpled (%rdi){1to4}, %xmm0, %k1952; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}953; VLX-NEXT: retq954;955; NoVLX-LABEL: test128_14:956; NoVLX: # %bb.0:957; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1958; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0959; NoVLX-NEXT: vpcmpled (%rdi){1to16}, %zmm0, %k1960; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}961; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0962; NoVLX-NEXT: retq963 %yb = load i32, ptr %yb.ptr, align 4964 %y.0 = insertelement <4 x i32> undef, i32 %yb, i32 0965 %y = shufflevector <4 x i32> %y.0, <4 x i32> undef, <4 x i32> zeroinitializer966 %mask = icmp sle <4 x i32> %x, %y967 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1968 ret <4 x i32> %max969}970 971define <4 x i32> @test128_15(<4 x i32> %x, ptr %yb.ptr, <4 x i32> %x1, <4 x i32> %y1) nounwind {972; VLX-LABEL: test128_15:973; VLX: # %bb.0:974; VLX-NEXT: vpcmpnltd %xmm2, %xmm1, %k1975; VLX-NEXT: vpcmpgtd (%rdi){1to4}, %xmm0, %k1 {%k1}976; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}977; VLX-NEXT: retq978;979; NoVLX-LABEL: test128_15:980; NoVLX: # %bb.0:981; NoVLX-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2982; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1983; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0984; NoVLX-NEXT: vpcmpnltd %zmm2, %zmm1, %k1985; NoVLX-NEXT: vpcmpgtd (%rdi){1to16}, %zmm0, %k1 {%k1}986; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}987; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0988; NoVLX-NEXT: retq989 %mask1 = icmp sge <4 x i32> %x1, %y1990 %yb = load i32, ptr %yb.ptr, align 4991 %y.0 = insertelement <4 x i32> undef, i32 %yb, i32 0992 %y = shufflevector <4 x i32> %y.0, <4 x i32> undef, <4 x i32> zeroinitializer993 %mask0 = icmp sgt <4 x i32> %x, %y994 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer995 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1996 ret <4 x i32> %max997}998 999define <2 x i64> @test128_16(<2 x i64> %x, ptr %yb.ptr, <2 x i64> %x1, <2 x i64> %y1) nounwind {1000; VLX-LABEL: test128_16:1001; VLX: # %bb.0:1002; VLX-NEXT: vpcmpnltq %xmm2, %xmm1, %k11003; VLX-NEXT: vpcmpgtq (%rdi){1to2}, %xmm0, %k1 {%k1}1004; VLX-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}1005; VLX-NEXT: retq1006;1007; NoVLX-LABEL: test128_16:1008; NoVLX: # %bb.0:1009; NoVLX-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm21010; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11011; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm01012; NoVLX-NEXT: vpcmpnltq %zmm2, %zmm1, %k11013; NoVLX-NEXT: vpcmpgtq (%rdi){1to8}, %zmm0, %k1 {%k1}1014; NoVLX-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}1015; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01016; NoVLX-NEXT: retq1017 %mask1 = icmp sge <2 x i64> %x1, %y11018 %yb = load i64, ptr %yb.ptr, align 41019 %y.0 = insertelement <2 x i64> undef, i64 %yb, i32 01020 %y = insertelement <2 x i64> %y.0, i64 %yb, i32 11021 %mask0 = icmp sgt <2 x i64> %x, %y1022 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer1023 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x11024 ret <2 x i64> %max1025}1026 1027define <4 x i32> @test128_17(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {1028; VLX-LABEL: test128_17:1029; VLX: # %bb.0:1030; VLX-NEXT: vpcmpneqd (%rdi), %xmm0, %k11031; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}1032; VLX-NEXT: retq1033;1034; NoVLX-LABEL: test128_17:1035; NoVLX: # %bb.0:1036; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11037; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm01038; NoVLX-NEXT: vmovdqu (%rdi), %xmm21039; NoVLX-NEXT: vpcmpneqd %zmm2, %zmm0, %k11040; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}1041; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01042; NoVLX-NEXT: retq1043 %y = load <4 x i32>, ptr %y.ptr, align 41044 %mask = icmp ne <4 x i32> %x, %y1045 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x11046 ret <4 x i32> %max1047}1048 1049define <4 x i32> @test128_18(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {1050; VLX-LABEL: test128_18:1051; VLX: # %bb.0:1052; VLX-NEXT: vpcmpneqd (%rdi), %xmm0, %k11053; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}1054; VLX-NEXT: retq1055;1056; NoVLX-LABEL: test128_18:1057; NoVLX: # %bb.0:1058; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11059; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm01060; NoVLX-NEXT: vmovdqu (%rdi), %xmm21061; NoVLX-NEXT: vpcmpneqd %zmm0, %zmm2, %k11062; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}1063; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01064; NoVLX-NEXT: retq1065 %y = load <4 x i32>, ptr %y.ptr, align 41066 %mask = icmp ne <4 x i32> %y, %x1067 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x11068 ret <4 x i32> %max1069}1070 1071define <4 x i32> @test128_19(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {1072; VLX-LABEL: test128_19:1073; VLX: # %bb.0:1074; VLX-NEXT: vpcmpnltud (%rdi), %xmm0, %k11075; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}1076; VLX-NEXT: retq1077;1078; NoVLX-LABEL: test128_19:1079; NoVLX: # %bb.0:1080; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11081; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm01082; NoVLX-NEXT: vmovdqu (%rdi), %xmm21083; NoVLX-NEXT: vpcmpnltud %zmm2, %zmm0, %k11084; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}1085; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01086; NoVLX-NEXT: retq1087 %y = load <4 x i32>, ptr %y.ptr, align 41088 %mask = icmp uge <4 x i32> %x, %y1089 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x11090 ret <4 x i32> %max1091}1092 1093define <4 x i32> @test128_20(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {1094; VLX-LABEL: test128_20:1095; VLX: # %bb.0:1096; VLX-NEXT: vpcmpleud (%rdi), %xmm0, %k11097; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}1098; VLX-NEXT: retq1099;1100; NoVLX-LABEL: test128_20:1101; NoVLX: # %bb.0:1102; NoVLX-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11103; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm01104; NoVLX-NEXT: vmovdqu (%rdi), %xmm21105; NoVLX-NEXT: vpcmpnltud %zmm0, %zmm2, %k11106; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}1107; NoVLX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01108; NoVLX-NEXT: retq1109 %y = load <4 x i32>, ptr %y.ptr, align 41110 %mask = icmp uge <4 x i32> %y, %x1111 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x11112 ret <4 x i32> %max1113}1114 1115define <8 x i32> @testnm_and(<8 x i32> %a, <8 x i32> %b, <8 x i32> %x, <8 x i32> %y) {1116; VLX-LABEL: testnm_and:1117; VLX: # %bb.0:1118; VLX-NEXT: vpor %ymm1, %ymm0, %ymm01119; VLX-NEXT: vptestnmd %ymm0, %ymm0, %k11120; VLX-NEXT: vpblendmd %ymm2, %ymm3, %ymm0 {%k1}1121; VLX-NEXT: retq1122;1123; NoVLX-LABEL: testnm_and:1124; NoVLX: # %bb.0:1125; NoVLX-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm31126; NoVLX-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm21127; NoVLX-NEXT: vpor %ymm1, %ymm0, %ymm01128; NoVLX-NEXT: vptestnmd %zmm0, %zmm0, %k11129; NoVLX-NEXT: vpblendmd %zmm2, %zmm3, %zmm0 {%k1}1130; NoVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01131; NoVLX-NEXT: retq1132 %c = icmp eq <8 x i32> %a, zeroinitializer1133 %d = icmp eq <8 x i32> %b, zeroinitializer1134 %e = and <8 x i1> %c, %d1135 %z = select <8 x i1> %e, <8 x i32> %x, <8 x i32> %y1136 ret <8 x i32> %z1137}1138