Home | History | Annotate | Download | only in SystemZ
      1 ; Test vector replicates, v16i8 version.
      2 ;
      3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
      4 
      5 ; Test a byte-granularity replicate with the lowest useful value.
      6 define <16 x i8> @f1() {
      7 ; CHECK-LABEL: f1:
      8 ; CHECK: vrepib %v24, 1
      9 ; CHECK: br %r14
     10   ret <16 x i8> <i8 1, i8 1, i8 1, i8 1,
     11                  i8 1, i8 1, i8 1, i8 1,
     12                  i8 1, i8 1, i8 1, i8 1,
     13                  i8 1, i8 1, i8 1, i8 1>
     14 }
     15 
     16 ; Test a byte-granularity replicate with an arbitrary value.
     17 define <16 x i8> @f2() {
     18 ; CHECK-LABEL: f2:
     19 ; CHECK: vrepib %v24, -55
     20 ; CHECK: br %r14
     21   ret <16 x i8> <i8 201, i8 201, i8 201, i8 201,
     22                  i8 201, i8 201, i8 201, i8 201,
     23                  i8 201, i8 201, i8 201, i8 201,
     24                  i8 201, i8 201, i8 201, i8 201>
     25 }
     26 
     27 ; Test a byte-granularity replicate with the highest useful value.
     28 define <16 x i8> @f3() {
     29 ; CHECK-LABEL: f3:
     30 ; CHECK: vrepib %v24, -2
     31 ; CHECK: br %r14
     32   ret <16 x i8> <i8 254, i8 254, i8 254, i8 254,
     33                  i8 254, i8 254, i8 254, i8 254,
     34                  i8 254, i8 254, i8 254, i8 254,
     35                  i8 254, i8 254, i8 254, i8 254>
     36 }
     37 
     38 ; Test a halfword-granularity replicate with the lowest useful value.
     39 define <16 x i8> @f4() {
     40 ; CHECK-LABEL: f4:
     41 ; CHECK: vrepih %v24, 1
     42 ; CHECK: br %r14
     43   ret <16 x i8> <i8 0, i8 1, i8 0, i8 1,
     44                  i8 0, i8 1, i8 0, i8 1,
     45                  i8 0, i8 1, i8 0, i8 1,
     46                  i8 0, i8 1, i8 0, i8 1>
     47 }
     48 
     49 ; Test a halfword-granularity replicate with an arbitrary value.
     50 define <16 x i8> @f5() {
     51 ; CHECK-LABEL: f5:
     52 ; CHECK: vrepih %v24, 25650
     53 ; CHECK: br %r14
     54   ret <16 x i8> <i8 100, i8 50, i8 100, i8 50,
     55                  i8 100, i8 50, i8 100, i8 50,
     56                  i8 100, i8 50, i8 100, i8 50,
     57                  i8 100, i8 50, i8 100, i8 50>
     58 }
     59 
     60 ; Test a halfword-granularity replicate with the highest useful value.
     61 define <16 x i8> @f6() {
     62 ; CHECK-LABEL: f6:
     63 ; CHECK: vrepih %v24, -2
     64 ; CHECK: br %r14
     65   ret <16 x i8> <i8 255, i8 254, i8 255, i8 254,
     66                  i8 255, i8 254, i8 255, i8 254,
     67                  i8 255, i8 254, i8 255, i8 254,
     68                  i8 255, i8 254, i8 255, i8 254>
     69 }
     70 
     71 ; Test a word-granularity replicate with the lowest useful positive value.
     72 define <16 x i8> @f7() {
     73 ; CHECK-LABEL: f7:
     74 ; CHECK: vrepif %v24, 1
     75 ; CHECK: br %r14
     76   ret <16 x i8> <i8 0, i8 0, i8 0, i8 1,
     77                  i8 0, i8 0, i8 0, i8 1,
     78                  i8 0, i8 0, i8 0, i8 1,
     79                  i8 0, i8 0, i8 0, i8 1>
     80 }
     81 
     82 ; Test a word-granularity replicate with the highest in-range value.
     83 define <16 x i8> @f8() {
     84 ; CHECK-LABEL: f8:
     85 ; CHECK: vrepif %v24, 32767
     86 ; CHECK: br %r14
     87   ret <16 x i8> <i8 0, i8 0, i8 127, i8 255,
     88                  i8 0, i8 0, i8 127, i8 255,
     89                  i8 0, i8 0, i8 127, i8 255,
     90                  i8 0, i8 0, i8 127, i8 255>
     91 }
     92 
     93 ; Test a word-granularity replicate with the next highest value.
     94 ; This cannot use VREPIF.
     95 define <16 x i8> @f9() {
     96 ; CHECK-LABEL: f9:
     97 ; CHECK-NOT: vrepif
     98 ; CHECK: br %r14
     99   ret <16 x i8> <i8 0, i8 0, i8 128, i8 0,
    100                  i8 0, i8 0, i8 128, i8 0,
    101                  i8 0, i8 0, i8 128, i8 0,
    102                  i8 0, i8 0, i8 128, i8 0>
    103 }
    104 
    105 ; Test a word-granularity replicate with the lowest in-range value.
    106 define <16 x i8> @f10() {
    107 ; CHECK-LABEL: f10:
    108 ; CHECK: vrepif %v24, -32768
    109 ; CHECK: br %r14
    110   ret <16 x i8> <i8 255, i8 255, i8 128, i8 0,
    111                  i8 255, i8 255, i8 128, i8 0,
    112                  i8 255, i8 255, i8 128, i8 0,
    113                  i8 255, i8 255, i8 128, i8 0>
    114 }
    115 
    116 ; Test a word-granularity replicate with the next lowest value.
    117 ; This cannot use VREPIF.
    118 define <16 x i8> @f11() {
    119 ; CHECK-LABEL: f11:
    120 ; CHECK-NOT: vrepif
    121 ; CHECK: br %r14
    122   ret <16 x i8> <i8 255, i8 255, i8 127, i8 255,
    123                  i8 255, i8 255, i8 127, i8 255,
    124                  i8 255, i8 255, i8 127, i8 255,
    125                  i8 255, i8 255, i8 127, i8 255>
    126 }
    127 
    128 ; Test a word-granularity replicate with the highest useful negative value.
    129 define <16 x i8> @f12() {
    130 ; CHECK-LABEL: f12:
    131 ; CHECK: vrepif %v24, -2
    132 ; CHECK: br %r14
    133   ret <16 x i8> <i8 255, i8 255, i8 255, i8 254,
    134                  i8 255, i8 255, i8 255, i8 254,
    135                  i8 255, i8 255, i8 255, i8 254,
    136                  i8 255, i8 255, i8 255, i8 254>
    137 }
    138 
    139 ; Test a doubleword-granularity replicate with the lowest useful positive
    140 ; value.
    141 define <16 x i8> @f13() {
    142 ; CHECK-LABEL: f13:
    143 ; CHECK: vrepig %v24, 1
    144 ; CHECK: br %r14
    145   ret <16 x i8> <i8 0, i8 0, i8 0, i8 0,
    146                  i8 0, i8 0, i8 0, i8 1,
    147                  i8 0, i8 0, i8 0, i8 0,
    148                  i8 0, i8 0, i8 0, i8 1>
    149 }
    150 
    151 ; Test a doubleword-granularity replicate with the highest in-range value.
    152 define <16 x i8> @f14() {
    153 ; CHECK-LABEL: f14:
    154 ; CHECK: vrepig %v24, 32767
    155 ; CHECK: br %r14
    156   ret <16 x i8> <i8 0, i8 0, i8 0, i8 0,
    157                  i8 0, i8 0, i8 127, i8 255,
    158                  i8 0, i8 0, i8 0, i8 0,
    159                  i8 0, i8 0, i8 127, i8 255>
    160 }
    161 
    162 ; Test a doubleword-granularity replicate with the next highest value.
    163 ; This cannot use VREPIG.
    164 define <16 x i8> @f15() {
    165 ; CHECK-LABEL: f15:
    166 ; CHECK-NOT: vrepig
    167 ; CHECK: br %r14
    168   ret <16 x i8> <i8 0, i8 0, i8 0, i8 0,
    169                  i8 0, i8 0, i8 128, i8 0,
    170                  i8 0, i8 0, i8 0, i8 0,
    171                  i8 0, i8 0, i8 128, i8 0>
    172 }
    173 
    174 ; Test a doubleword-granularity replicate with the lowest in-range value.
    175 define <16 x i8> @f16() {
    176 ; CHECK-LABEL: f16:
    177 ; CHECK: vrepig %v24, -32768
    178 ; CHECK: br %r14
    179   ret <16 x i8> <i8 255, i8 255, i8 255, i8 255,
    180                  i8 255, i8 255, i8 128, i8 0,
    181                  i8 255, i8 255, i8 255, i8 255,
    182                  i8 255, i8 255, i8 128, i8 0>
    183 }
    184 
    185 ; Test a doubleword-granularity replicate with the next lowest value.
    186 ; This cannot use VREPIG.
    187 define <16 x i8> @f17() {
    188 ; CHECK-LABEL: f17:
    189 ; CHECK-NOT: vrepig
    190 ; CHECK: br %r14
    191   ret <16 x i8> <i8 255, i8 255, i8 255, i8 255,
    192                  i8 255, i8 255, i8 127, i8 255,
    193                  i8 255, i8 255, i8 255, i8 255,
    194                  i8 255, i8 255, i8 127, i8 255>
    195 }
    196 
    197 ; Test a doubleword-granularity replicate with the highest useful negative
    198 ; value.
    199 define <16 x i8> @f18() {
    200 ; CHECK-LABEL: f18:
    201 ; CHECK: vrepig %v24, -2
    202 ; CHECK: br %r14
    203   ret <16 x i8> <i8 255, i8 255, i8 255, i8 255,
    204                  i8 255, i8 255, i8 255, i8 254,
    205                  i8 255, i8 255, i8 255, i8 255,
    206                  i8 255, i8 255, i8 255, i8 254>
    207 }
    208 
    209 ; Repeat f14 with undefs optimistically treated as 0.
    210 define <16 x i8> @f19() {
    211 ; CHECK-LABEL: f19:
    212 ; CHECK: vrepig %v24, 32767
    213 ; CHECK: br %r14
    214   ret <16 x i8> <i8 0, i8 undef, i8 0, i8 0,
    215                  i8 0, i8 0, i8 127, i8 255,
    216                  i8 undef, i8 0, i8 undef, i8 0,
    217                  i8 0, i8 0, i8 127, i8 255>
    218 }
    219 
    220 ; Repeat f18 with undefs optimistically treated as -1.
    221 define <16 x i8> @f20() {
    222 ; CHECK-LABEL: f20:
    223 ; CHECK: vrepig %v24, -2
    224 ; CHECK: br %r14
    225   ret <16 x i8> <i8 undef, i8 255, i8 255, i8 255,
    226                  i8 255, i8 255, i8 undef, i8 254,
    227                  i8 255, i8 255, i8 255, i8 undef,
    228                  i8 255, i8 undef, i8 255, i8 254>
    229 }
    230