[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / SystemZ / vec-const-07.ll
blob6fcf95b692182e44023f3b92996b71096650642f
1 ; Test vector replicates, v16i8 version.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>