[X86] combineTargetShuffle - commute VPERMV3 shuffles so any load is on the RHS
[llvm-project.git] / llvm / test / CodeGen / SystemZ / int-conv-11.ll
blob48e3a4d0dda63e95267233aaa1d42bc678ab88f3
1 ; Test spills of zero extensions when high GR32s are available.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 | FileCheck %s
5 ; Test a case where we spill the source of at least one LLCRMux.  We want
6 ; to use LLC(H) if possible.
7 define void @f1(ptr %ptr) {
8 ; CHECK-LABEL: f1:
9 ; CHECK: llc{{h?}} {{%r[0-9]+}}, 1{{[67]}}{{[379]}}(%r15)
10 ; CHECK: br %r14
11   %val0 = load volatile i32, ptr %ptr
12   %val1 = load volatile i32, ptr %ptr
13   %val2 = load volatile i32, ptr %ptr
14   %val3 = load volatile i32, ptr %ptr
15   %val4 = load volatile i32, ptr %ptr
16   %val5 = load volatile i32, ptr %ptr
17   %val6 = load volatile i32, ptr %ptr
18   %val7 = load volatile i32, ptr %ptr
19   %val8 = load volatile i32, ptr %ptr
20   %val9 = load volatile i32, ptr %ptr
21   %val10 = load volatile i32, ptr %ptr
22   %val11 = load volatile i32, ptr %ptr
23   %val12 = load volatile i32, ptr %ptr
24   %val13 = load volatile i32, ptr %ptr
25   %val14 = load volatile i32, ptr %ptr
26   %val15 = load volatile i32, ptr %ptr
27   %val16 = load volatile i32, ptr %ptr
28   %val17 = load volatile i32, ptr %ptr
29   %val18 = load volatile i32, ptr %ptr
30   %val19 = load volatile i32, ptr %ptr
31   %val20 = load volatile i32, ptr %ptr
32   %val21 = load volatile i32, ptr %ptr
33   %val22 = load volatile i32, ptr %ptr
34   %val23 = load volatile i32, ptr %ptr
35   %val24 = load volatile i32, ptr %ptr
36   %val25 = load volatile i32, ptr %ptr
37   %val26 = load volatile i32, ptr %ptr
38   %val27 = load volatile i32, ptr %ptr
39   %val28 = load volatile i32, ptr %ptr
40   %val29 = load volatile i32, ptr %ptr
41   %val30 = load volatile i32, ptr %ptr
42   %val31 = load volatile i32, ptr %ptr
44   %trunc0 = trunc i32 %val0 to i8
45   %trunc1 = trunc i32 %val1 to i8
46   %trunc2 = trunc i32 %val2 to i8
47   %trunc3 = trunc i32 %val3 to i8
48   %trunc4 = trunc i32 %val4 to i8
49   %trunc5 = trunc i32 %val5 to i8
50   %trunc6 = trunc i32 %val6 to i8
51   %trunc7 = trunc i32 %val7 to i8
52   %trunc8 = trunc i32 %val8 to i8
53   %trunc9 = trunc i32 %val9 to i8
54   %trunc10 = trunc i32 %val10 to i8
55   %trunc11 = trunc i32 %val11 to i8
56   %trunc12 = trunc i32 %val12 to i8
57   %trunc13 = trunc i32 %val13 to i8
58   %trunc14 = trunc i32 %val14 to i8
59   %trunc15 = trunc i32 %val15 to i8
60   %trunc16 = trunc i32 %val16 to i8
61   %trunc17 = trunc i32 %val17 to i8
62   %trunc18 = trunc i32 %val18 to i8
63   %trunc19 = trunc i32 %val19 to i8
64   %trunc20 = trunc i32 %val20 to i8
65   %trunc21 = trunc i32 %val21 to i8
66   %trunc22 = trunc i32 %val22 to i8
67   %trunc23 = trunc i32 %val23 to i8
68   %trunc24 = trunc i32 %val24 to i8
69   %trunc25 = trunc i32 %val25 to i8
70   %trunc26 = trunc i32 %val26 to i8
71   %trunc27 = trunc i32 %val27 to i8
72   %trunc28 = trunc i32 %val28 to i8
73   %trunc29 = trunc i32 %val29 to i8
74   %trunc30 = trunc i32 %val30 to i8
75   %trunc31 = trunc i32 %val31 to i8
77   %ext0 = zext i8 %trunc0 to i32
78   %ext1 = zext i8 %trunc1 to i32
79   %ext2 = zext i8 %trunc2 to i32
80   %ext3 = zext i8 %trunc3 to i32
81   %ext4 = zext i8 %trunc4 to i32
82   %ext5 = zext i8 %trunc5 to i32
83   %ext6 = zext i8 %trunc6 to i32
84   %ext7 = zext i8 %trunc7 to i32
85   %ext8 = zext i8 %trunc8 to i32
86   %ext9 = zext i8 %trunc9 to i32
87   %ext10 = zext i8 %trunc10 to i32
88   %ext11 = zext i8 %trunc11 to i32
89   %ext12 = zext i8 %trunc12 to i32
90   %ext13 = zext i8 %trunc13 to i32
91   %ext14 = zext i8 %trunc14 to i32
92   %ext15 = zext i8 %trunc15 to i32
93   %ext16 = zext i8 %trunc16 to i32
94   %ext17 = zext i8 %trunc17 to i32
95   %ext18 = zext i8 %trunc18 to i32
96   %ext19 = zext i8 %trunc19 to i32
97   %ext20 = zext i8 %trunc20 to i32
98   %ext21 = zext i8 %trunc21 to i32
99   %ext22 = zext i8 %trunc22 to i32
100   %ext23 = zext i8 %trunc23 to i32
101   %ext24 = zext i8 %trunc24 to i32
102   %ext25 = zext i8 %trunc25 to i32
103   %ext26 = zext i8 %trunc26 to i32
104   %ext27 = zext i8 %trunc27 to i32
105   %ext28 = zext i8 %trunc28 to i32
106   %ext29 = zext i8 %trunc29 to i32
107   %ext30 = zext i8 %trunc30 to i32
108   %ext31 = zext i8 %trunc31 to i32
110   store volatile i32 %val0, ptr %ptr
111   store volatile i32 %val1, ptr %ptr
112   store volatile i32 %val2, ptr %ptr
113   store volatile i32 %val3, ptr %ptr
114   store volatile i32 %val4, ptr %ptr
115   store volatile i32 %val5, ptr %ptr
116   store volatile i32 %val6, ptr %ptr
117   store volatile i32 %val7, ptr %ptr
118   store volatile i32 %val8, ptr %ptr
119   store volatile i32 %val9, ptr %ptr
120   store volatile i32 %val10, ptr %ptr
121   store volatile i32 %val11, ptr %ptr
122   store volatile i32 %val12, ptr %ptr
123   store volatile i32 %val13, ptr %ptr
124   store volatile i32 %val14, ptr %ptr
125   store volatile i32 %val15, ptr %ptr
126   store volatile i32 %val16, ptr %ptr
127   store volatile i32 %val17, ptr %ptr
128   store volatile i32 %val18, ptr %ptr
129   store volatile i32 %val19, ptr %ptr
130   store volatile i32 %val20, ptr %ptr
131   store volatile i32 %val21, ptr %ptr
132   store volatile i32 %val22, ptr %ptr
133   store volatile i32 %val23, ptr %ptr
134   store volatile i32 %val24, ptr %ptr
135   store volatile i32 %val25, ptr %ptr
136   store volatile i32 %val26, ptr %ptr
137   store volatile i32 %val27, ptr %ptr
138   store volatile i32 %val28, ptr %ptr
139   store volatile i32 %val29, ptr %ptr
140   store volatile i32 %val30, ptr %ptr
141   store volatile i32 %val31, ptr %ptr
143   store volatile i32 %ext0, ptr %ptr
144   store volatile i32 %ext1, ptr %ptr
145   store volatile i32 %ext2, ptr %ptr
146   store volatile i32 %ext3, ptr %ptr
147   store volatile i32 %ext4, ptr %ptr
148   store volatile i32 %ext5, ptr %ptr
149   store volatile i32 %ext6, ptr %ptr
150   store volatile i32 %ext7, ptr %ptr
151   store volatile i32 %ext8, ptr %ptr
152   store volatile i32 %ext9, ptr %ptr
153   store volatile i32 %ext10, ptr %ptr
154   store volatile i32 %ext11, ptr %ptr
155   store volatile i32 %ext12, ptr %ptr
156   store volatile i32 %ext13, ptr %ptr
157   store volatile i32 %ext14, ptr %ptr
158   store volatile i32 %ext15, ptr %ptr
159   store volatile i32 %ext16, ptr %ptr
160   store volatile i32 %ext17, ptr %ptr
161   store volatile i32 %ext18, ptr %ptr
162   store volatile i32 %ext19, ptr %ptr
163   store volatile i32 %ext20, ptr %ptr
164   store volatile i32 %ext21, ptr %ptr
165   store volatile i32 %ext22, ptr %ptr
166   store volatile i32 %ext23, ptr %ptr
167   store volatile i32 %ext24, ptr %ptr
168   store volatile i32 %ext25, ptr %ptr
169   store volatile i32 %ext26, ptr %ptr
170   store volatile i32 %ext27, ptr %ptr
171   store volatile i32 %ext28, ptr %ptr
172   store volatile i32 %ext29, ptr %ptr
173   store volatile i32 %ext30, ptr %ptr
174   store volatile i32 %ext31, ptr %ptr
176   ret void
179 ; Same again with i16, which should use LLH(H).
180 define void @f2(ptr %ptr) {
181 ; CHECK-LABEL: f2:
182 ; CHECK: llh{{h?}} {{%r[0-9]+}}, 1{{[67]}}{{[268]}}(%r15)
183 ; CHECK: br %r14
184   %val0 = load volatile i32, ptr %ptr
185   %val1 = load volatile i32, ptr %ptr
186   %val2 = load volatile i32, ptr %ptr
187   %val3 = load volatile i32, ptr %ptr
188   %val4 = load volatile i32, ptr %ptr
189   %val5 = load volatile i32, ptr %ptr
190   %val6 = load volatile i32, ptr %ptr
191   %val7 = load volatile i32, ptr %ptr
192   %val8 = load volatile i32, ptr %ptr
193   %val9 = load volatile i32, ptr %ptr
194   %val10 = load volatile i32, ptr %ptr
195   %val11 = load volatile i32, ptr %ptr
196   %val12 = load volatile i32, ptr %ptr
197   %val13 = load volatile i32, ptr %ptr
198   %val14 = load volatile i32, ptr %ptr
199   %val15 = load volatile i32, ptr %ptr
200   %val16 = load volatile i32, ptr %ptr
201   %val17 = load volatile i32, ptr %ptr
202   %val18 = load volatile i32, ptr %ptr
203   %val19 = load volatile i32, ptr %ptr
204   %val20 = load volatile i32, ptr %ptr
205   %val21 = load volatile i32, ptr %ptr
206   %val22 = load volatile i32, ptr %ptr
207   %val23 = load volatile i32, ptr %ptr
208   %val24 = load volatile i32, ptr %ptr
209   %val25 = load volatile i32, ptr %ptr
210   %val26 = load volatile i32, ptr %ptr
211   %val27 = load volatile i32, ptr %ptr
212   %val28 = load volatile i32, ptr %ptr
213   %val29 = load volatile i32, ptr %ptr
214   %val30 = load volatile i32, ptr %ptr
215   %val31 = load volatile i32, ptr %ptr
217   %trunc0 = trunc i32 %val0 to i16
218   %trunc1 = trunc i32 %val1 to i16
219   %trunc2 = trunc i32 %val2 to i16
220   %trunc3 = trunc i32 %val3 to i16
221   %trunc4 = trunc i32 %val4 to i16
222   %trunc5 = trunc i32 %val5 to i16
223   %trunc6 = trunc i32 %val6 to i16
224   %trunc7 = trunc i32 %val7 to i16
225   %trunc8 = trunc i32 %val8 to i16
226   %trunc9 = trunc i32 %val9 to i16
227   %trunc10 = trunc i32 %val10 to i16
228   %trunc11 = trunc i32 %val11 to i16
229   %trunc12 = trunc i32 %val12 to i16
230   %trunc13 = trunc i32 %val13 to i16
231   %trunc14 = trunc i32 %val14 to i16
232   %trunc15 = trunc i32 %val15 to i16
233   %trunc16 = trunc i32 %val16 to i16
234   %trunc17 = trunc i32 %val17 to i16
235   %trunc18 = trunc i32 %val18 to i16
236   %trunc19 = trunc i32 %val19 to i16
237   %trunc20 = trunc i32 %val20 to i16
238   %trunc21 = trunc i32 %val21 to i16
239   %trunc22 = trunc i32 %val22 to i16
240   %trunc23 = trunc i32 %val23 to i16
241   %trunc24 = trunc i32 %val24 to i16
242   %trunc25 = trunc i32 %val25 to i16
243   %trunc26 = trunc i32 %val26 to i16
244   %trunc27 = trunc i32 %val27 to i16
245   %trunc28 = trunc i32 %val28 to i16
246   %trunc29 = trunc i32 %val29 to i16
247   %trunc30 = trunc i32 %val30 to i16
248   %trunc31 = trunc i32 %val31 to i16
250   %ext0 = zext i16 %trunc0 to i32
251   %ext1 = zext i16 %trunc1 to i32
252   %ext2 = zext i16 %trunc2 to i32
253   %ext3 = zext i16 %trunc3 to i32
254   %ext4 = zext i16 %trunc4 to i32
255   %ext5 = zext i16 %trunc5 to i32
256   %ext6 = zext i16 %trunc6 to i32
257   %ext7 = zext i16 %trunc7 to i32
258   %ext8 = zext i16 %trunc8 to i32
259   %ext9 = zext i16 %trunc9 to i32
260   %ext10 = zext i16 %trunc10 to i32
261   %ext11 = zext i16 %trunc11 to i32
262   %ext12 = zext i16 %trunc12 to i32
263   %ext13 = zext i16 %trunc13 to i32
264   %ext14 = zext i16 %trunc14 to i32
265   %ext15 = zext i16 %trunc15 to i32
266   %ext16 = zext i16 %trunc16 to i32
267   %ext17 = zext i16 %trunc17 to i32
268   %ext18 = zext i16 %trunc18 to i32
269   %ext19 = zext i16 %trunc19 to i32
270   %ext20 = zext i16 %trunc20 to i32
271   %ext21 = zext i16 %trunc21 to i32
272   %ext22 = zext i16 %trunc22 to i32
273   %ext23 = zext i16 %trunc23 to i32
274   %ext24 = zext i16 %trunc24 to i32
275   %ext25 = zext i16 %trunc25 to i32
276   %ext26 = zext i16 %trunc26 to i32
277   %ext27 = zext i16 %trunc27 to i32
278   %ext28 = zext i16 %trunc28 to i32
279   %ext29 = zext i16 %trunc29 to i32
280   %ext30 = zext i16 %trunc30 to i32
281   %ext31 = zext i16 %trunc31 to i32
283   store volatile i32 %val0, ptr %ptr
284   store volatile i32 %val1, ptr %ptr
285   store volatile i32 %val2, ptr %ptr
286   store volatile i32 %val3, ptr %ptr
287   store volatile i32 %val4, ptr %ptr
288   store volatile i32 %val5, ptr %ptr
289   store volatile i32 %val6, ptr %ptr
290   store volatile i32 %val7, ptr %ptr
291   store volatile i32 %val8, ptr %ptr
292   store volatile i32 %val9, ptr %ptr
293   store volatile i32 %val10, ptr %ptr
294   store volatile i32 %val11, ptr %ptr
295   store volatile i32 %val12, ptr %ptr
296   store volatile i32 %val13, ptr %ptr
297   store volatile i32 %val14, ptr %ptr
298   store volatile i32 %val15, ptr %ptr
299   store volatile i32 %val16, ptr %ptr
300   store volatile i32 %val17, ptr %ptr
301   store volatile i32 %val18, ptr %ptr
302   store volatile i32 %val19, ptr %ptr
303   store volatile i32 %val20, ptr %ptr
304   store volatile i32 %val21, ptr %ptr
305   store volatile i32 %val22, ptr %ptr
306   store volatile i32 %val23, ptr %ptr
307   store volatile i32 %val24, ptr %ptr
308   store volatile i32 %val25, ptr %ptr
309   store volatile i32 %val26, ptr %ptr
310   store volatile i32 %val27, ptr %ptr
311   store volatile i32 %val28, ptr %ptr
312   store volatile i32 %val29, ptr %ptr
313   store volatile i32 %val30, ptr %ptr
314   store volatile i32 %val31, ptr %ptr
316   store volatile i32 %ext0, ptr %ptr
317   store volatile i32 %ext1, ptr %ptr
318   store volatile i32 %ext2, ptr %ptr
319   store volatile i32 %ext3, ptr %ptr
320   store volatile i32 %ext4, ptr %ptr
321   store volatile i32 %ext5, ptr %ptr
322   store volatile i32 %ext6, ptr %ptr
323   store volatile i32 %ext7, ptr %ptr
324   store volatile i32 %ext8, ptr %ptr
325   store volatile i32 %ext9, ptr %ptr
326   store volatile i32 %ext10, ptr %ptr
327   store volatile i32 %ext11, ptr %ptr
328   store volatile i32 %ext12, ptr %ptr
329   store volatile i32 %ext13, ptr %ptr
330   store volatile i32 %ext14, ptr %ptr
331   store volatile i32 %ext15, ptr %ptr
332   store volatile i32 %ext16, ptr %ptr
333   store volatile i32 %ext17, ptr %ptr
334   store volatile i32 %ext18, ptr %ptr
335   store volatile i32 %ext19, ptr %ptr
336   store volatile i32 %ext20, ptr %ptr
337   store volatile i32 %ext21, ptr %ptr
338   store volatile i32 %ext22, ptr %ptr
339   store volatile i32 %ext23, ptr %ptr
340   store volatile i32 %ext24, ptr %ptr
341   store volatile i32 %ext25, ptr %ptr
342   store volatile i32 %ext26, ptr %ptr
343   store volatile i32 %ext27, ptr %ptr
344   store volatile i32 %ext28, ptr %ptr
345   store volatile i32 %ext29, ptr %ptr
346   store volatile i32 %ext30, ptr %ptr
347   store volatile i32 %ext31, ptr %ptr
349   ret void