Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw -mattr=+avx512vl| FileCheck %s
      2 
      3 ; 256-bit
      4 
      5 ; CHECK-LABEL: vpaddb256_test
      6 ; CHECK: vpaddb %ymm{{.*}}
      7 ; CHECK: ret
      8 define <32 x i8> @vpaddb256_test(<32 x i8> %i, <32 x i8> %j) nounwind readnone {
      9   %x = add <32 x i8> %i, %j
     10   ret <32 x i8> %x
     11 }
     12 
     13 ; CHECK-LABEL: vpaddb256_fold_test
     14 ; CHECK: vpaddb (%rdi), %ymm{{.*}}
     15 ; CHECK: ret
     16 define <32 x i8> @vpaddb256_fold_test(<32 x i8> %i, <32 x i8>* %j) nounwind {
     17   %tmp = load <32 x i8>, <32 x i8>* %j, align 4
     18   %x = add <32 x i8> %i, %tmp
     19   ret <32 x i8> %x
     20 }
     21 
     22 ; CHECK-LABEL: vpaddw256_test
     23 ; CHECK: vpaddw %ymm{{.*}}
     24 ; CHECK: ret
     25 define <16 x i16> @vpaddw256_test(<16 x i16> %i, <16 x i16> %j) nounwind readnone {
     26   %x = add <16 x i16> %i, %j
     27   ret <16 x i16> %x
     28 }
     29 
     30 ; CHECK-LABEL: vpaddw256_fold_test
     31 ; CHECK: vpaddw (%rdi), %ymm{{.*}}
     32 ; CHECK: ret
     33 define <16 x i16> @vpaddw256_fold_test(<16 x i16> %i, <16 x i16>* %j) nounwind {
     34   %tmp = load <16 x i16>, <16 x i16>* %j, align 4
     35   %x = add <16 x i16> %i, %tmp
     36   ret <16 x i16> %x
     37 }
     38 
     39 ; CHECK-LABEL: vpaddw256_mask_test
     40 ; CHECK: vpaddw %ymm{{.*%k[1-7].*}}
     41 ; CHECK: ret
     42 define <16 x i16> @vpaddw256_mask_test(<16 x i16> %i, <16 x i16> %j, <16 x i16> %mask1) nounwind readnone {
     43   %mask = icmp ne <16 x i16> %mask1, zeroinitializer
     44   %x = add <16 x i16> %i, %j
     45   %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %i
     46   ret <16 x i16> %r
     47 }
     48 
     49 ; CHECK-LABEL: vpaddw256_maskz_test
     50 ; CHECK: vpaddw %ymm{{.*{%k[1-7]} {z}.*}}
     51 ; CHECK: ret
     52 define <16 x i16> @vpaddw256_maskz_test(<16 x i16> %i, <16 x i16> %j, <16 x i16> %mask1) nounwind readnone {
     53   %mask = icmp ne <16 x i16> %mask1, zeroinitializer
     54   %x = add <16 x i16> %i, %j
     55   %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer
     56   ret <16 x i16> %r
     57 }
     58 
     59 ; CHECK-LABEL: vpaddw256_mask_fold_test
     60 ; CHECK: vpaddw (%rdi), %ymm{{.*%k[1-7]}}
     61 ; CHECK: ret
     62 define <16 x i16> @vpaddw256_mask_fold_test(<16 x i16> %i, <16 x i16>* %j.ptr, <16 x i16> %mask1) nounwind readnone {
     63   %mask = icmp ne <16 x i16> %mask1, zeroinitializer
     64   %j = load <16 x i16>, <16 x i16>* %j.ptr
     65   %x = add <16 x i16> %i, %j
     66   %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %i
     67   ret <16 x i16> %r
     68 }
     69 
     70 ; CHECK-LABEL: vpaddw256_maskz_fold_test
     71 ; CHECK: vpaddw (%rdi), %ymm{{.*{%k[1-7]} {z}}}
     72 ; CHECK: ret
     73 define <16 x i16> @vpaddw256_maskz_fold_test(<16 x i16> %i, <16 x i16>* %j.ptr, <16 x i16> %mask1) nounwind readnone {
     74   %mask = icmp ne <16 x i16> %mask1, zeroinitializer
     75   %j = load <16 x i16>, <16 x i16>* %j.ptr
     76   %x = add <16 x i16> %i, %j
     77   %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer
     78   ret <16 x i16> %r
     79 }
     80 
     81 ; CHECK-LABEL: vpsubb256_test
     82 ; CHECK: vpsubb %ymm{{.*}}
     83 ; CHECK: ret
     84 define <32 x i8> @vpsubb256_test(<32 x i8> %i, <32 x i8> %j) nounwind readnone {
     85   %x = sub <32 x i8> %i, %j
     86   ret <32 x i8> %x
     87 }
     88 
     89 ; CHECK-LABEL: vpsubw256_test
     90 ; CHECK: vpsubw %ymm{{.*}}
     91 ; CHECK: ret
     92 define <16 x i16> @vpsubw256_test(<16 x i16> %i, <16 x i16> %j) nounwind readnone {
     93   %x = sub <16 x i16> %i, %j
     94   ret <16 x i16> %x
     95 }
     96 
     97 ; CHECK-LABEL: vpmullw256_test
     98 ; CHECK: vpmullw %ymm{{.*}}
     99 ; CHECK: ret
    100 define <16 x i16> @vpmullw256_test(<16 x i16> %i, <16 x i16> %j) {
    101   %x = mul <16 x i16> %i, %j
    102   ret <16 x i16> %x
    103 }
    104 
    105 ; 128-bit
    106 
    107 ; CHECK-LABEL: vpaddb128_test
    108 ; CHECK: vpaddb %xmm{{.*}}
    109 ; CHECK: ret
    110 define <16 x i8> @vpaddb128_test(<16 x i8> %i, <16 x i8> %j) nounwind readnone {
    111   %x = add <16 x i8> %i, %j
    112   ret <16 x i8> %x
    113 }
    114 
    115 ; CHECK-LABEL: vpaddb128_fold_test
    116 ; CHECK: vpaddb (%rdi), %xmm{{.*}}
    117 ; CHECK: ret
    118 define <16 x i8> @vpaddb128_fold_test(<16 x i8> %i, <16 x i8>* %j) nounwind {
    119   %tmp = load <16 x i8>, <16 x i8>* %j, align 4
    120   %x = add <16 x i8> %i, %tmp
    121   ret <16 x i8> %x
    122 }
    123 
    124 ; CHECK-LABEL: vpaddw128_test
    125 ; CHECK: vpaddw %xmm{{.*}}
    126 ; CHECK: ret
    127 define <8 x i16> @vpaddw128_test(<8 x i16> %i, <8 x i16> %j) nounwind readnone {
    128   %x = add <8 x i16> %i, %j
    129   ret <8 x i16> %x
    130 }
    131 
    132 ; CHECK-LABEL: vpaddw128_fold_test
    133 ; CHECK: vpaddw (%rdi), %xmm{{.*}}
    134 ; CHECK: ret
    135 define <8 x i16> @vpaddw128_fold_test(<8 x i16> %i, <8 x i16>* %j) nounwind {
    136   %tmp = load <8 x i16>, <8 x i16>* %j, align 4
    137   %x = add <8 x i16> %i, %tmp
    138   ret <8 x i16> %x
    139 }
    140 
    141 ; CHECK-LABEL: vpaddw128_mask_test
    142 ; CHECK: vpaddw %xmm{{.*%k[1-7].*}}
    143 ; CHECK: ret
    144 define <8 x i16> @vpaddw128_mask_test(<8 x i16> %i, <8 x i16> %j, <8 x i16> %mask1) nounwind readnone {
    145   %mask = icmp ne <8 x i16> %mask1, zeroinitializer
    146   %x = add <8 x i16> %i, %j
    147   %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %i
    148   ret <8 x i16> %r
    149 }
    150 
    151 ; CHECK-LABEL: vpaddw128_maskz_test
    152 ; CHECK: vpaddw %xmm{{.*{%k[1-7]} {z}.*}}
    153 ; CHECK: ret
    154 define <8 x i16> @vpaddw128_maskz_test(<8 x i16> %i, <8 x i16> %j, <8 x i16> %mask1) nounwind readnone {
    155   %mask = icmp ne <8 x i16> %mask1, zeroinitializer
    156   %x = add <8 x i16> %i, %j
    157   %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> zeroinitializer
    158   ret <8 x i16> %r
    159 }
    160 
    161 ; CHECK-LABEL: vpaddw128_mask_fold_test
    162 ; CHECK: vpaddw (%rdi), %xmm{{.*%k[1-7]}}
    163 ; CHECK: ret
    164 define <8 x i16> @vpaddw128_mask_fold_test(<8 x i16> %i, <8 x i16>* %j.ptr, <8 x i16> %mask1) nounwind readnone {
    165   %mask = icmp ne <8 x i16> %mask1, zeroinitializer
    166   %j = load <8 x i16>, <8 x i16>* %j.ptr
    167   %x = add <8 x i16> %i, %j
    168   %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %i
    169   ret <8 x i16> %r
    170 }
    171 
    172 ; CHECK-LABEL: vpaddw128_maskz_fold_test
    173 ; CHECK: vpaddw (%rdi), %xmm{{.*{%k[1-7]} {z}}}
    174 ; CHECK: ret
    175 define <8 x i16> @vpaddw128_maskz_fold_test(<8 x i16> %i, <8 x i16>* %j.ptr, <8 x i16> %mask1) nounwind readnone {
    176   %mask = icmp ne <8 x i16> %mask1, zeroinitializer
    177   %j = load <8 x i16>, <8 x i16>* %j.ptr
    178   %x = add <8 x i16> %i, %j
    179   %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> zeroinitializer
    180   ret <8 x i16> %r
    181 }
    182 
    183 ; CHECK-LABEL: vpsubb128_test
    184 ; CHECK: vpsubb %xmm{{.*}}
    185 ; CHECK: ret
    186 define <16 x i8> @vpsubb128_test(<16 x i8> %i, <16 x i8> %j) nounwind readnone {
    187   %x = sub <16 x i8> %i, %j
    188   ret <16 x i8> %x
    189 }
    190 
    191 ; CHECK-LABEL: vpsubw128_test
    192 ; CHECK: vpsubw %xmm{{.*}}
    193 ; CHECK: ret
    194 define <8 x i16> @vpsubw128_test(<8 x i16> %i, <8 x i16> %j) nounwind readnone {
    195   %x = sub <8 x i16> %i, %j
    196   ret <8 x i16> %x
    197 }
    198 
    199 ; CHECK-LABEL: vpmullw128_test
    200 ; CHECK: vpmullw %xmm{{.*}}
    201 ; CHECK: ret
    202 define <8 x i16> @vpmullw128_test(<8 x i16> %i, <8 x i16> %j) {
    203   %x = mul <8 x i16> %i, %j
    204   ret <8 x i16> %x
    205 }
    206 
    207