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 <64 x i8> @test1(<64 x i8> %x, <64 x i8> %y) nounwind {
      5 ; CHECK-LABEL: test1:
      6 ; CHECK:       ## BB#0:
      7 ; CHECK-NEXT:    vpcmpeqb %zmm1, %zmm0, %k1
      8 ; CHECK-NEXT:    vpblendmb %zmm0, %zmm1, %zmm0 {%k1}
      9 ; CHECK-NEXT:    retq
     10   %mask = icmp eq <64 x i8> %x, %y
     11   %max = select <64 x i1> %mask, <64 x i8> %x, <64 x i8> %y
     12   ret <64 x i8> %max
     13 }
     14 
     15 define <64 x i8> @test2(<64 x i8> %x, <64 x i8> %y, <64 x i8> %x1) nounwind {
     16 ; CHECK-LABEL: test2:
     17 ; CHECK:       ## BB#0:
     18 ; CHECK-NEXT:    vpcmpgtb %zmm1, %zmm0, %k1
     19 ; CHECK-NEXT:    vpblendmb %zmm2, %zmm1, %zmm0 {%k1}
     20 ; CHECK-NEXT:    retq
     21   %mask = icmp sgt <64 x i8> %x, %y
     22   %max = select <64 x i1> %mask, <64 x i8> %x1, <64 x i8> %y
     23   ret <64 x i8> %max
     24 }
     25 
     26 define <32 x i16> @test3(<32 x i16> %x, <32 x i16> %y, <32 x i16> %x1) nounwind {
     27 ; CHECK-LABEL: test3:
     28 ; CHECK:       ## BB#0:
     29 ; CHECK-NEXT:    vpcmplew %zmm0, %zmm1, %k1
     30 ; CHECK-NEXT:    vpblendmw %zmm2, %zmm1, %zmm0 {%k1}
     31 ; CHECK-NEXT:    retq
     32   %mask = icmp sge <32 x i16> %x, %y
     33   %max = select <32 x i1> %mask, <32 x i16> %x1, <32 x i16> %y
     34   ret <32 x i16> %max
     35 }
     36 
     37 define <64 x i8> @test4(<64 x i8> %x, <64 x i8> %y, <64 x i8> %x1) nounwind {
     38 ; CHECK-LABEL: test4:
     39 ; CHECK:       ## BB#0:
     40 ; CHECK-NEXT:    vpcmpnleub %zmm1, %zmm0, %k1
     41 ; CHECK-NEXT:    vpblendmb %zmm2, %zmm1, %zmm0 {%k1}
     42 ; CHECK-NEXT:    retq
     43   %mask = icmp ugt <64 x i8> %x, %y
     44   %max = select <64 x i1> %mask, <64 x i8> %x1, <64 x i8> %y
     45   ret <64 x i8> %max
     46 }
     47 
     48 define <32 x i16> @test5(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %yp) nounwind {
     49 ; CHECK-LABEL: test5:
     50 ; CHECK:       ## BB#0:
     51 ; CHECK-NEXT:    vpcmpeqw (%rdi), %zmm0, %k1
     52 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
     53 ; CHECK-NEXT:    retq
     54   %y = load <32 x i16>, <32 x i16>* %yp, align 4
     55   %mask = icmp eq <32 x i16> %x, %y
     56   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1
     57   ret <32 x i16> %max
     58 }
     59 
     60 define <32 x i16> @test6(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %y.ptr) nounwind {
     61 ; CHECK-LABEL: test6:
     62 ; CHECK:       ## BB#0:
     63 ; CHECK-NEXT:    vpcmpgtw (%rdi), %zmm0, %k1
     64 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
     65 ; CHECK-NEXT:    retq
     66   %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4
     67   %mask = icmp sgt <32 x i16> %x, %y
     68   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1
     69   ret <32 x i16> %max
     70 }
     71 
     72 define <32 x i16> @test7(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %y.ptr) nounwind {
     73 ; CHECK-LABEL: test7:
     74 ; CHECK:       ## BB#0:
     75 ; CHECK-NEXT:    vpcmplew (%rdi), %zmm0, %k1
     76 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
     77 ; CHECK-NEXT:    retq
     78   %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4
     79   %mask = icmp sle <32 x i16> %x, %y
     80   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1
     81   ret <32 x i16> %max
     82 }
     83 
     84 define <32 x i16> @test8(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %y.ptr) nounwind {
     85 ; CHECK-LABEL: test8:
     86 ; CHECK:       ## BB#0:
     87 ; CHECK-NEXT:    vpcmpleuw (%rdi), %zmm0, %k1
     88 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
     89 ; CHECK-NEXT:    retq
     90   %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4
     91   %mask = icmp ule <32 x i16> %x, %y
     92   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1
     93   ret <32 x i16> %max
     94 }
     95 
     96 define <32 x i16> @test9(<32 x i16> %x, <32 x i16> %y, <32 x i16> %x1, <32 x i16> %y1) nounwind {
     97 ; CHECK-LABEL: test9:
     98 ; CHECK:       ## BB#0:
     99 ; CHECK-NEXT:    vpcmpeqw %zmm1, %zmm0, %k1
    100 ; CHECK-NEXT:    vpcmpeqw %zmm3, %zmm2, %k1 {%k1}
    101 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
    102 ; CHECK-NEXT:    retq
    103   %mask1 = icmp eq <32 x i16> %x1, %y1
    104   %mask0 = icmp eq <32 x i16> %x, %y
    105   %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer
    106   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %y
    107   ret <32 x i16> %max
    108 }
    109 
    110 define <64 x i8> @test10(<64 x i8> %x, <64 x i8> %y, <64 x i8> %x1, <64 x i8> %y1) nounwind {
    111 ; CHECK-LABEL: test10:
    112 ; CHECK:       ## BB#0:
    113 ; CHECK-NEXT:    vpcmpleb %zmm1, %zmm0, %k1
    114 ; CHECK-NEXT:    vpcmpleb %zmm2, %zmm3, %k1 {%k1}
    115 ; CHECK-NEXT:    vpblendmb %zmm0, %zmm2, %zmm0 {%k1}
    116 ; CHECK-NEXT:    retq
    117   %mask1 = icmp sge <64 x i8> %x1, %y1
    118   %mask0 = icmp sle <64 x i8> %x, %y
    119   %mask = select <64 x i1> %mask0, <64 x i1> %mask1, <64 x i1> zeroinitializer
    120   %max = select <64 x i1> %mask, <64 x i8> %x, <64 x i8> %x1
    121   ret <64 x i8> %max
    122 }
    123 
    124 define <64 x i8> @test11(<64 x i8> %x, <64 x i8>* %y.ptr, <64 x i8> %x1, <64 x i8> %y1) nounwind {
    125 ; CHECK-LABEL: test11:
    126 ; CHECK:       ## BB#0:
    127 ; CHECK-NEXT:    vpcmpgtb %zmm2, %zmm1, %k1
    128 ; CHECK-NEXT:    vpcmpgtb (%rdi), %zmm0, %k1 {%k1}
    129 ; CHECK-NEXT:    vpblendmb %zmm0, %zmm1, %zmm0 {%k1}
    130 ; CHECK-NEXT:    retq
    131   %mask1 = icmp sgt <64 x i8> %x1, %y1
    132   %y = load <64 x i8>, <64 x i8>* %y.ptr, align 4
    133   %mask0 = icmp sgt <64 x i8> %x, %y
    134   %mask = select <64 x i1> %mask0, <64 x i1> %mask1, <64 x i1> zeroinitializer
    135   %max = select <64 x i1> %mask, <64 x i8> %x, <64 x i8> %x1
    136   ret <64 x i8> %max
    137 }
    138 
    139 define <32 x i16> @test12(<32 x i16> %x, <32 x i16>* %y.ptr, <32 x i16> %x1, <32 x i16> %y1) nounwind {
    140 ; CHECK-LABEL: test12:
    141 ; CHECK:       ## BB#0:
    142 ; CHECK-NEXT:    vpcmplew %zmm1, %zmm2, %k1
    143 ; CHECK-NEXT:    vpcmpleuw (%rdi), %zmm0, %k1 {%k1}
    144 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
    145 ; CHECK-NEXT:    retq
    146   %mask1 = icmp sge <32 x i16> %x1, %y1
    147   %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4
    148   %mask0 = icmp ule <32 x i16> %x, %y
    149   %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer
    150   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1
    151   ret <32 x i16> %max
    152 }
    153