Home | History | Annotate | Download | only in X86
      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 
      4 define <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 
     15 define <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 
     26 define <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 
     37 define <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 
     48 define <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 
     60 define <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 
     72 define <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 
     84 define <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 
     96 define <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 
    110 define <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 
    124 define <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 
    139 define <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 
    154 define <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 
    168 define <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 
    182 define <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 
    199 define <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 
    216 define <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 
    227 define <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 
    238 define <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 
    249 define <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 
    260 define <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 
    272 define <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 
    284 define <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 
    296 define <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 
    308 define <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 
    322 define <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 
    336 define <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 
    351 define <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 
    366 define <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 
    380 define <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 
    394 define <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 
    411 define <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