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 <4 x i64> @test256_1(<4 x i64> %x, <4 x i64> %y) nounwind { 5; CHECK-LABEL: test256_1: 6; CHECK: ## BB#0: 7; CHECK-NEXT: vpcmpeqq %ymm1, %ymm0, %k1 8; CHECK-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 9; CHECK-NEXT: retq 10 %mask = icmp eq <4 x i64> %x, %y 11 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %y 12 ret <4 x i64> %max 13} 14 15define <4 x i64> @test256_2(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1) nounwind { 16; CHECK-LABEL: test256_2: 17; CHECK: ## BB#0: 18; CHECK-NEXT: vpcmpgtq %ymm1, %ymm0, %k1 19; CHECK-NEXT: vpblendmq %ymm2, %ymm1, %ymm0 {%k1} 20; CHECK-NEXT: retq 21 %mask = icmp sgt <4 x i64> %x, %y 22 %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y 23 ret <4 x i64> %max 24} 25 26define <8 x i32> @test256_3(<8 x i32> %x, <8 x i32> %y, <8 x i32> %x1) nounwind { 27; CHECK-LABEL: test256_3: 28; CHECK: ## BB#0: 29; CHECK-NEXT: vpcmpled %ymm0, %ymm1, %k1 30; CHECK-NEXT: vpblendmd %ymm2, %ymm1, %ymm0 {%k1} 31; CHECK-NEXT: retq 32 %mask = icmp sge <8 x i32> %x, %y 33 %max = select <8 x i1> %mask, <8 x i32> %x1, <8 x i32> %y 34 ret <8 x i32> %max 35} 36 37define <4 x i64> @test256_4(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1) nounwind { 38; CHECK-LABEL: test256_4: 39; CHECK: ## BB#0: 40; CHECK-NEXT: vpcmpnleuq %ymm1, %ymm0, %k1 41; CHECK-NEXT: vpblendmq %ymm2, %ymm1, %ymm0 {%k1} 42; CHECK-NEXT: retq 43 %mask = icmp ugt <4 x i64> %x, %y 44 %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y 45 ret <4 x i64> %max 46} 47 48define <8 x i32> @test256_5(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind { 49; CHECK-LABEL: test256_5: 50; CHECK: ## BB#0: 51; CHECK-NEXT: vpcmpeqd (%rdi), %ymm0, %k1 52; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 53; CHECK-NEXT: retq 54 %y = load <8 x i32>, <8 x i32>* %yp, align 4 55 %mask = icmp eq <8 x i32> %x, %y 56 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1 57 ret <8 x i32> %max 58} 59 60define <8 x i32> @test256_6(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind { 61; CHECK-LABEL: test256_6: 62; CHECK: ## BB#0: 63; CHECK-NEXT: vpcmpgtd (%rdi), %ymm0, %k1 64; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 65; CHECK-NEXT: retq 66 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4 67 %mask = icmp sgt <8 x i32> %x, %y 68 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1 69 ret <8 x i32> %max 70} 71 72define <8 x i32> @test256_7(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind { 73; CHECK-LABEL: test256_7: 74; CHECK: ## BB#0: 75; CHECK-NEXT: vpcmpled (%rdi), %ymm0, %k1 76; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 77; CHECK-NEXT: retq 78 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4 79 %mask = icmp sle <8 x i32> %x, %y 80 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1 81 ret <8 x i32> %max 82} 83 84define <8 x i32> @test256_8(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind { 85; CHECK-LABEL: test256_8: 86; CHECK: ## BB#0: 87; CHECK-NEXT: vpcmpleud (%rdi), %ymm0, %k1 88; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 89; CHECK-NEXT: retq 90 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4 91 %mask = icmp ule <8 x i32> %x, %y 92 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1 93 ret <8 x i32> %max 94} 95 96define <8 x i32> @test256_9(<8 x i32> %x, <8 x i32> %y, <8 x i32> %x1, <8 x i32> %y1) nounwind { 97; CHECK-LABEL: test256_9: 98; CHECK: ## BB#0: 99; CHECK-NEXT: vpcmpeqd %ymm1, %ymm0, %k1 100; CHECK-NEXT: vpcmpeqd %ymm3, %ymm2, %k1 {%k1} 101; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 102; CHECK-NEXT: retq 103 %mask1 = icmp eq <8 x i32> %x1, %y1 104 %mask0 = icmp eq <8 x i32> %x, %y 105 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer 106 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %y 107 ret <8 x i32> %max 108} 109 110define <4 x i64> @test256_10(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1, <4 x i64> %y1) nounwind { 111; CHECK-LABEL: test256_10: 112; CHECK: ## BB#0: 113; CHECK-NEXT: vpcmpleq %ymm1, %ymm0, %k1 114; CHECK-NEXT: vpcmpleq %ymm2, %ymm3, %k1 {%k1} 115; CHECK-NEXT: vpblendmq %ymm0, %ymm2, %ymm0 {%k1} 116; CHECK-NEXT: retq 117 %mask1 = icmp sge <4 x i64> %x1, %y1 118 %mask0 = icmp sle <4 x i64> %x, %y 119 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer 120 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1 121 ret <4 x i64> %max 122} 123 124define <4 x i64> @test256_11(<4 x i64> %x, <4 x i64>* %y.ptr, <4 x i64> %x1, <4 x i64> %y1) nounwind { 125; CHECK-LABEL: test256_11: 126; CHECK: ## BB#0: 127; CHECK-NEXT: vpcmpgtq %ymm2, %ymm1, %k1 128; CHECK-NEXT: vpcmpgtq (%rdi), %ymm0, %k1 {%k1} 129; CHECK-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 130; CHECK-NEXT: retq 131 %mask1 = icmp sgt <4 x i64> %x1, %y1 132 %y = load <4 x i64>, <4 x i64>* %y.ptr, align 4 133 %mask0 = icmp sgt <4 x i64> %x, %y 134 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer 135 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1 136 ret <4 x i64> %max 137} 138 139define <8 x i32> @test256_12(<8 x i32> %x, <8 x i32>* %y.ptr, <8 x i32> %x1, <8 x i32> %y1) nounwind { 140; CHECK-LABEL: test256_12: 141; CHECK: ## BB#0: 142; CHECK-NEXT: vpcmpled %ymm1, %ymm2, %k1 143; CHECK-NEXT: vpcmpleud (%rdi), %ymm0, %k1 {%k1} 144; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 145; CHECK-NEXT: retq 146 %mask1 = icmp sge <8 x i32> %x1, %y1 147 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4 148 %mask0 = icmp ule <8 x i32> %x, %y 149 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer 150 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1 151 ret <8 x i32> %max 152} 153 154define <4 x i64> @test256_13(<4 x i64> %x, <4 x i64> %x1, i64* %yb.ptr) nounwind { 155; CHECK-LABEL: test256_13: 156; CHECK: ## BB#0: 157; CHECK-NEXT: vpcmpeqq (%rdi){1to4}, %ymm0, %k1 158; CHECK-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 159; CHECK-NEXT: retq 160 %yb = load i64, i64* %yb.ptr, align 4 161 %y.0 = insertelement <4 x i64> undef, i64 %yb, i32 0 162 %y = shufflevector <4 x i64> %y.0, <4 x i64> undef, <4 x i32> zeroinitializer 163 %mask = icmp eq <4 x i64> %x, %y 164 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1 165 ret <4 x i64> %max 166} 167 168define <8 x i32> @test256_14(<8 x i32> %x, i32* %yb.ptr, <8 x i32> %x1) nounwind { 169; CHECK-LABEL: test256_14: 170; CHECK: ## BB#0: 171; CHECK-NEXT: vpcmpled (%rdi){1to8}, %ymm0, %k1 172; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 173; CHECK-NEXT: retq 174 %yb = load i32, i32* %yb.ptr, align 4 175 %y.0 = insertelement <8 x i32> undef, i32 %yb, i32 0 176 %y = shufflevector <8 x i32> %y.0, <8 x i32> undef, <8 x i32> zeroinitializer 177 %mask = icmp sle <8 x i32> %x, %y 178 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1 179 ret <8 x i32> %max 180} 181 182define <8 x i32> @test256_15(<8 x i32> %x, i32* %yb.ptr, <8 x i32> %x1, <8 x i32> %y1) nounwind { 183; CHECK-LABEL: test256_15: 184; CHECK: ## BB#0: 185; CHECK-NEXT: vpcmpled %ymm1, %ymm2, %k1 186; CHECK-NEXT: vpcmpgtd (%rdi){1to8}, %ymm0, %k1 {%k1} 187; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 188; CHECK-NEXT: retq 189 %mask1 = icmp sge <8 x i32> %x1, %y1 190 %yb = load i32, i32* %yb.ptr, align 4 191 %y.0 = insertelement <8 x i32> undef, i32 %yb, i32 0 192 %y = shufflevector <8 x i32> %y.0, <8 x i32> undef, <8 x i32> zeroinitializer 193 %mask0 = icmp sgt <8 x i32> %x, %y 194 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer 195 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1 196 ret <8 x i32> %max 197} 198 199define <4 x i64> @test256_16(<4 x i64> %x, i64* %yb.ptr, <4 x i64> %x1, <4 x i64> %y1) nounwind { 200; CHECK-LABEL: test256_16: 201; CHECK: ## BB#0: 202; CHECK-NEXT: vpcmpleq %ymm1, %ymm2, %k1 203; CHECK-NEXT: vpcmpgtq (%rdi){1to4}, %ymm0, %k1 {%k1} 204; CHECK-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 205; CHECK-NEXT: retq 206 %mask1 = icmp sge <4 x i64> %x1, %y1 207 %yb = load i64, i64* %yb.ptr, align 4 208 %y.0 = insertelement <4 x i64> undef, i64 %yb, i32 0 209 %y = shufflevector <4 x i64> %y.0, <4 x i64> undef, <4 x i32> zeroinitializer 210 %mask0 = icmp sgt <4 x i64> %x, %y 211 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer 212 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1 213 ret <4 x i64> %max 214} 215 216define <2 x i64> @test128_1(<2 x i64> %x, <2 x i64> %y) nounwind { 217; CHECK-LABEL: test128_1: 218; CHECK: ## BB#0: 219; CHECK-NEXT: vpcmpeqq %xmm1, %xmm0, %k1 220; CHECK-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} 221; CHECK-NEXT: retq 222 %mask = icmp eq <2 x i64> %x, %y 223 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %y 224 ret <2 x i64> %max 225} 226 227define <2 x i64> @test128_2(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1) nounwind { 228; CHECK-LABEL: test128_2: 229; CHECK: ## BB#0: 230; CHECK-NEXT: vpcmpgtq %xmm1, %xmm0, %k1 231; CHECK-NEXT: vpblendmq %xmm2, %xmm1, %xmm0 {%k1} 232; CHECK-NEXT: retq 233 %mask = icmp sgt <2 x i64> %x, %y 234 %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y 235 ret <2 x i64> %max 236} 237 238define <4 x i32> @test128_3(<4 x i32> %x, <4 x i32> %y, <4 x i32> %x1) nounwind { 239; CHECK-LABEL: test128_3: 240; CHECK: ## BB#0: 241; CHECK-NEXT: vpcmpled %xmm0, %xmm1, %k1 242; CHECK-NEXT: vpblendmd %xmm2, %xmm1, %xmm0 {%k1} 243; CHECK-NEXT: retq 244 %mask = icmp sge <4 x i32> %x, %y 245 %max = select <4 x i1> %mask, <4 x i32> %x1, <4 x i32> %y 246 ret <4 x i32> %max 247} 248 249define <2 x i64> @test128_4(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1) nounwind { 250; CHECK-LABEL: test128_4: 251; CHECK: ## BB#0: 252; CHECK-NEXT: vpcmpnleuq %xmm1, %xmm0, %k1 253; CHECK-NEXT: vpblendmq %xmm2, %xmm1, %xmm0 {%k1} 254; CHECK-NEXT: retq 255 %mask = icmp ugt <2 x i64> %x, %y 256 %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y 257 ret <2 x i64> %max 258} 259 260define <4 x i32> @test128_5(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %yp) nounwind { 261; CHECK-LABEL: test128_5: 262; CHECK: ## BB#0: 263; CHECK-NEXT: vpcmpeqd (%rdi), %xmm0, %k1 264; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} 265; CHECK-NEXT: retq 266 %y = load <4 x i32>, <4 x i32>* %yp, align 4 267 %mask = icmp eq <4 x i32> %x, %y 268 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1 269 ret <4 x i32> %max 270} 271 272define <4 x i32> @test128_6(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind { 273; CHECK-LABEL: test128_6: 274; CHECK: ## BB#0: 275; CHECK-NEXT: vpcmpgtd (%rdi), %xmm0, %k1 276; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} 277; CHECK-NEXT: retq 278 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4 279 %mask = icmp sgt <4 x i32> %x, %y 280 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1 281 ret <4 x i32> %max 282} 283 284define <4 x i32> @test128_7(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind { 285; CHECK-LABEL: test128_7: 286; CHECK: ## BB#0: 287; CHECK-NEXT: vpcmpled (%rdi), %xmm0, %k1 288; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} 289; CHECK-NEXT: retq 290 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4 291 %mask = icmp sle <4 x i32> %x, %y 292 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1 293 ret <4 x i32> %max 294} 295 296define <4 x i32> @test128_8(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind { 297; CHECK-LABEL: test128_8: 298; CHECK: ## BB#0: 299; CHECK-NEXT: vpcmpleud (%rdi), %xmm0, %k1 300; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} 301; CHECK-NEXT: retq 302 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4 303 %mask = icmp ule <4 x i32> %x, %y 304 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1 305 ret <4 x i32> %max 306} 307 308define <4 x i32> @test128_9(<4 x i32> %x, <4 x i32> %y, <4 x i32> %x1, <4 x i32> %y1) nounwind { 309; CHECK-LABEL: test128_9: 310; CHECK: ## BB#0: 311; CHECK-NEXT: vpcmpeqd %xmm1, %xmm0, %k1 312; CHECK-NEXT: vpcmpeqd %xmm3, %xmm2, %k1 {%k1} 313; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} 314; CHECK-NEXT: retq 315 %mask1 = icmp eq <4 x i32> %x1, %y1 316 %mask0 = icmp eq <4 x i32> %x, %y 317 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer 318 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %y 319 ret <4 x i32> %max 320} 321 322define <2 x i64> @test128_10(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1, <2 x i64> %y1) nounwind { 323; CHECK-LABEL: test128_10: 324; CHECK: ## BB#0: 325; CHECK-NEXT: vpcmpleq %xmm1, %xmm0, %k1 326; CHECK-NEXT: vpcmpleq %xmm2, %xmm3, %k1 {%k1} 327; CHECK-NEXT: vpblendmq %xmm0, %xmm2, %xmm0 {%k1} 328; CHECK-NEXT: retq 329 %mask1 = icmp sge <2 x i64> %x1, %y1 330 %mask0 = icmp sle <2 x i64> %x, %y 331 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer 332 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1 333 ret <2 x i64> %max 334} 335 336define <2 x i64> @test128_11(<2 x i64> %x, <2 x i64>* %y.ptr, <2 x i64> %x1, <2 x i64> %y1) nounwind { 337; CHECK-LABEL: test128_11: 338; CHECK: ## BB#0: 339; CHECK-NEXT: vpcmpgtq %xmm2, %xmm1, %k1 340; CHECK-NEXT: vpcmpgtq (%rdi), %xmm0, %k1 {%k1} 341; CHECK-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} 342; CHECK-NEXT: retq 343 %mask1 = icmp sgt <2 x i64> %x1, %y1 344 %y = load <2 x i64>, <2 x i64>* %y.ptr, align 4 345 %mask0 = icmp sgt <2 x i64> %x, %y 346 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer 347 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1 348 ret <2 x i64> %max 349} 350 351define <4 x i32> @test128_12(<4 x i32> %x, <4 x i32>* %y.ptr, <4 x i32> %x1, <4 x i32> %y1) nounwind { 352; CHECK-LABEL: test128_12: 353; CHECK: ## BB#0: 354; CHECK-NEXT: vpcmpled %xmm1, %xmm2, %k1 355; CHECK-NEXT: vpcmpleud (%rdi), %xmm0, %k1 {%k1} 356; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} 357; CHECK-NEXT: retq 358 %mask1 = icmp sge <4 x i32> %x1, %y1 359 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4 360 %mask0 = icmp ule <4 x i32> %x, %y 361 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer 362 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1 363 ret <4 x i32> %max 364} 365 366define <2 x i64> @test128_13(<2 x i64> %x, <2 x i64> %x1, i64* %yb.ptr) nounwind { 367; CHECK-LABEL: test128_13: 368; CHECK: ## BB#0: 369; CHECK-NEXT: vpcmpeqq (%rdi){1to2}, %xmm0, %k1 370; CHECK-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} 371; CHECK-NEXT: retq 372 %yb = load i64, i64* %yb.ptr, align 4 373 %y.0 = insertelement <2 x i64> undef, i64 %yb, i32 0 374 %y = insertelement <2 x i64> %y.0, i64 %yb, i32 1 375 %mask = icmp eq <2 x i64> %x, %y 376 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1 377 ret <2 x i64> %max 378} 379 380define <4 x i32> @test128_14(<4 x i32> %x, i32* %yb.ptr, <4 x i32> %x1) nounwind { 381; CHECK-LABEL: test128_14: 382; CHECK: ## BB#0: 383; CHECK-NEXT: vpcmpled (%rdi){1to4}, %xmm0, %k1 384; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} 385; CHECK-NEXT: retq 386 %yb = load i32, i32* %yb.ptr, align 4 387 %y.0 = insertelement <4 x i32> undef, i32 %yb, i32 0 388 %y = shufflevector <4 x i32> %y.0, <4 x i32> undef, <4 x i32> zeroinitializer 389 %mask = icmp sle <4 x i32> %x, %y 390 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1 391 ret <4 x i32> %max 392} 393 394define <4 x i32> @test128_15(<4 x i32> %x, i32* %yb.ptr, <4 x i32> %x1, <4 x i32> %y1) nounwind { 395; CHECK-LABEL: test128_15: 396; CHECK: ## BB#0: 397; CHECK-NEXT: vpcmpled %xmm1, %xmm2, %k1 398; CHECK-NEXT: vpcmpgtd (%rdi){1to4}, %xmm0, %k1 {%k1} 399; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} 400; CHECK-NEXT: retq 401 %mask1 = icmp sge <4 x i32> %x1, %y1 402 %yb = load i32, i32* %yb.ptr, align 4 403 %y.0 = insertelement <4 x i32> undef, i32 %yb, i32 0 404 %y = shufflevector <4 x i32> %y.0, <4 x i32> undef, <4 x i32> zeroinitializer 405 %mask0 = icmp sgt <4 x i32> %x, %y 406 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer 407 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1 408 ret <4 x i32> %max 409} 410 411define <2 x i64> @test128_16(<2 x i64> %x, i64* %yb.ptr, <2 x i64> %x1, <2 x i64> %y1) nounwind { 412; CHECK-LABEL: test128_16: 413; CHECK: ## BB#0: 414; CHECK-NEXT: vpcmpleq %xmm1, %xmm2, %k1 415; CHECK-NEXT: vpcmpgtq (%rdi){1to2}, %xmm0, %k1 {%k1} 416; CHECK-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} 417; CHECK-NEXT: retq 418 %mask1 = icmp sge <2 x i64> %x1, %y1 419 %yb = load i64, i64* %yb.ptr, align 4 420 %y.0 = insertelement <2 x i64> undef, i64 %yb, i32 0 421 %y = insertelement <2 x i64> %y.0, i64 %yb, i32 1 422 %mask0 = icmp sgt <2 x i64> %x, %y 423 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer 424 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1 425 ret <2 x i64> %max 426} 427