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 <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 
     15 define <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 
     26 define <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:    vpcmplew %ymm0, %ymm1, %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 
     37 define <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 
     48 define <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 
     60 define <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 
     72 define <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 
     84 define <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 
     96 define <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 
    110 define <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:    vpcmpleb %ymm2, %ymm3, %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 
    124 define <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 
    139 define <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:    vpcmplew %ymm1, %ymm2, %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 
    154 define <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 
    165 define <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 
    176 define <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:    vpcmplew %xmm0, %xmm1, %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 
    187 define <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 
    198 define <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 
    210 define <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 
    222 define <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 
    234 define <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 
    246 define <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 
    260 define <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:    vpcmpleb %xmm2, %xmm3, %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 
    274 define <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 
    289 define <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:    vpcmplew %xmm1, %xmm2, %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