1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -O0 -run-pass=legalizer -global-isel-abort=0 %s -o - | FileCheck -check-prefix=SI %s
3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -O0 -run-pass=legalizer -global-isel-abort=0 %s -o - | FileCheck -check-prefix=VI %s
4---
5name: test_store_global_i32
6body: |
7  bb.0:
8    liveins: $vgpr0_vgpr1, $vgpr2
9
10    ; SI-LABEL: name: test_store_global_i32
11    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
12    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
13    ; SI: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store 4, addrspace 1)
14    ; VI-LABEL: name: test_store_global_i32
15    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
16    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
17    ; VI: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store 4, addrspace 1)
18    %0:_(p1) = COPY $vgpr0_vgpr1
19    %1:_(s32) = COPY $vgpr2
20    G_STORE %1, %0 :: (store 4, addrspace 1)
21...
22
23---
24name: test_store_global_i64
25body: |
26  bb.0:
27    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
28
29    ; SI-LABEL: name: test_store_global_i64
30    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
31    ; SI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
32    ; SI: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store 8, addrspace 1)
33    ; VI-LABEL: name: test_store_global_i64
34    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
35    ; VI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
36    ; VI: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store 8, addrspace 1)
37    %0:_(p1) = COPY $vgpr0_vgpr1
38    %1:_(s64) = COPY $vgpr2_vgpr3
39    G_STORE %1, %0 :: (store 8, addrspace 1)
40...
41
42---
43name: test_store_global_p1
44body: |
45  bb.0:
46    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
47
48    ; SI-LABEL: name: test_store_global_p1
49    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
50    ; SI: [[COPY1:%[0-9]+]]:_(p1) = COPY $vgpr2_vgpr3
51    ; SI: G_STORE [[COPY1]](p1), [[COPY]](p1) :: (store 8, addrspace 1)
52    ; VI-LABEL: name: test_store_global_p1
53    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
54    ; VI: [[COPY1:%[0-9]+]]:_(p1) = COPY $vgpr2_vgpr3
55    ; VI: G_STORE [[COPY1]](p1), [[COPY]](p1) :: (store 8, addrspace 1)
56    %0:_(p1) = COPY $vgpr0_vgpr1
57    %1:_(p1) = COPY $vgpr2_vgpr3
58    G_STORE %1, %0 :: (store 8, addrspace 1)
59...
60
61---
62name: test_store_global_p4
63body: |
64  bb.0:
65    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
66
67    ; SI-LABEL: name: test_store_global_p4
68    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
69    ; SI: [[COPY1:%[0-9]+]]:_(p4) = COPY $vgpr2_vgpr3
70    ; SI: G_STORE [[COPY1]](p4), [[COPY]](p1) :: (store 8, addrspace 1)
71    ; VI-LABEL: name: test_store_global_p4
72    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
73    ; VI: [[COPY1:%[0-9]+]]:_(p4) = COPY $vgpr2_vgpr3
74    ; VI: G_STORE [[COPY1]](p4), [[COPY]](p1) :: (store 8, addrspace 1)
75    %0:_(p1) = COPY $vgpr0_vgpr1
76    %1:_(p4) = COPY $vgpr2_vgpr3
77    G_STORE %1, %0 :: (store 8, addrspace 1)
78...
79
80---
81name: test_store_global_p3
82body: |
83  bb.0:
84    liveins: $vgpr0_vgpr1, $vgpr2
85
86    ; SI-LABEL: name: test_store_global_p3
87    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
88    ; SI: [[COPY1:%[0-9]+]]:_(p3) = COPY $vgpr2
89    ; SI: G_STORE [[COPY1]](p3), [[COPY]](p1) :: (store 4, addrspace 1)
90    ; VI-LABEL: name: test_store_global_p3
91    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
92    ; VI: [[COPY1:%[0-9]+]]:_(p3) = COPY $vgpr2
93    ; VI: G_STORE [[COPY1]](p3), [[COPY]](p1) :: (store 4, addrspace 1)
94    %0:_(p1) = COPY $vgpr0_vgpr1
95    %1:_(p3) = COPY $vgpr2
96    G_STORE %1, %0 :: (store 4, addrspace 1)
97...
98
99---
100name: test_store_global_v2s32
101body: |
102  bb.0:
103    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
104
105    ; SI-LABEL: name: test_store_global_v2s32
106    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
107    ; SI: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
108    ; SI: G_STORE [[COPY1]](<2 x s32>), [[COPY]](p1) :: (store 8, addrspace 1)
109    ; VI-LABEL: name: test_store_global_v2s32
110    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
111    ; VI: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
112    ; VI: G_STORE [[COPY1]](<2 x s32>), [[COPY]](p1) :: (store 8, addrspace 1)
113    %0:_(p1) = COPY $vgpr0_vgpr1
114    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
115    G_STORE %1, %0 :: (store 8, addrspace 1)
116...
117
118---
119name: test_store_global_v2s16
120body: |
121  bb.0:
122    liveins: $vgpr0_vgpr1, $vgpr2
123
124    ; SI-LABEL: name: test_store_global_v2s16
125    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
126    ; SI: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr2
127    ; SI: G_STORE [[COPY1]](<2 x s16>), [[COPY]](p1) :: (store 4, addrspace 1)
128    ; VI-LABEL: name: test_store_global_v2s16
129    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
130    ; VI: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr2
131    ; VI: G_STORE [[COPY1]](<2 x s16>), [[COPY]](p1) :: (store 4, addrspace 1)
132    %0:_(p1) = COPY $vgpr0_vgpr1
133    %1:_(<2 x s16>) = COPY $vgpr2
134    G_STORE %1, %0 :: (store 4, addrspace 1)
135...
136
137---
138name: test_store_global_v3s32
139body: |
140  bb.0:
141    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
142
143    ; SI-LABEL: name: test_store_global_v3s32
144    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
145    ; SI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
146    ; SI: [[EXTRACT:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[COPY1]](<3 x s32>), 0
147    ; SI: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY1]](<3 x s32>), 64
148    ; SI: G_STORE [[EXTRACT]](<2 x s32>), [[COPY]](p1) :: (store 8, align 4, addrspace 1)
149    ; SI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
150    ; SI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C]](s64)
151    ; SI: G_STORE [[EXTRACT1]](s32), [[PTR_ADD]](p1) :: (store 4 + 8, addrspace 1)
152    ; VI-LABEL: name: test_store_global_v3s32
153    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
154    ; VI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
155    ; VI: G_STORE [[COPY1]](<3 x s32>), [[COPY]](p1) :: (store 12, align 4, addrspace 1)
156    %0:_(p1) = COPY $vgpr0_vgpr1
157    %1:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
158    G_STORE %1, %0 :: (store 12, align 4, addrspace 1)
159...
160
161---
162name: test_truncstore_global_s64_to_s8
163body: |
164  bb.0:
165    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
166
167    ; SI-LABEL: name: test_truncstore_global_s64_to_s8
168    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
169    ; SI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
170    ; SI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
171    ; SI: G_STORE [[TRUNC]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
172    ; VI-LABEL: name: test_truncstore_global_s64_to_s8
173    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
174    ; VI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
175    ; VI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
176    ; VI: G_STORE [[TRUNC]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
177    %0:_(p1) = COPY $vgpr0_vgpr1
178    %1:_(s64) = COPY $vgpr2_vgpr3
179    G_STORE %1, %0 :: (store 1, addrspace 1)
180...
181
182---
183name: test_truncstore_global_s64_to_s16
184body: |
185  bb.0:
186    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
187
188    ; SI-LABEL: name: test_truncstore_global_s64_to_s16
189    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
190    ; SI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
191    ; SI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
192    ; SI: G_STORE [[TRUNC]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
193    ; VI-LABEL: name: test_truncstore_global_s64_to_s16
194    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
195    ; VI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
196    ; VI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
197    ; VI: G_STORE [[TRUNC]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
198    %0:_(p1) = COPY $vgpr0_vgpr1
199    %1:_(s64) = COPY $vgpr2_vgpr3
200    G_STORE %1, %0 :: (store 1, addrspace 1)
201...
202
203---
204name: test_truncstore_global_s64_to_s32
205body: |
206  bb.0:
207    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
208
209    ; SI-LABEL: name: test_truncstore_global_s64_to_s32
210    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
211    ; SI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
212    ; SI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
213    ; SI: G_STORE [[TRUNC]](s32), [[COPY]](p1) :: (store 4, addrspace 1)
214    ; VI-LABEL: name: test_truncstore_global_s64_to_s32
215    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
216    ; VI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
217    ; VI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
218    ; VI: G_STORE [[TRUNC]](s32), [[COPY]](p1) :: (store 4, addrspace 1)
219    %0:_(p1) = COPY $vgpr0_vgpr1
220    %1:_(s64) = COPY $vgpr2_vgpr3
221    G_STORE %1, %0 :: (store 4, addrspace 1)
222...
223
224---
225name: test_truncstore_global_s128_to_s16
226body: |
227  bb.0:
228    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
229
230    ; SI-LABEL: name: test_truncstore_global_s128_to_s16
231    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
232    ; SI: [[COPY1:%[0-9]+]]:_(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
233    ; SI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s128)
234    ; SI: G_STORE [[TRUNC]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
235    ; VI-LABEL: name: test_truncstore_global_s128_to_s16
236    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
237    ; VI: [[COPY1:%[0-9]+]]:_(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
238    ; VI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s128)
239    ; VI: G_STORE [[TRUNC]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
240    %0:_(p1) = COPY $vgpr0_vgpr1
241    %1:_(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
242    G_STORE %1, %0 :: (store 2, addrspace 1)
243...
244
245---
246name: test_truncstore_global_s128_to_s8
247body: |
248  bb.0:
249    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
250
251    ; SI-LABEL: name: test_truncstore_global_s128_to_s8
252    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
253    ; SI: [[COPY1:%[0-9]+]]:_(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
254    ; SI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s128)
255    ; SI: G_STORE [[TRUNC]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
256    ; VI-LABEL: name: test_truncstore_global_s128_to_s8
257    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
258    ; VI: [[COPY1:%[0-9]+]]:_(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
259    ; VI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s128)
260    ; VI: G_STORE [[TRUNC]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
261    %0:_(p1) = COPY $vgpr0_vgpr1
262    %1:_(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
263    G_STORE %1, %0 :: (store 1, addrspace 1)
264...
265
266name: test_store_global_i1
267body: |
268  bb.0:
269    liveins: $vgpr0_vgpr1, $vgpr2
270
271    %0:_(p1) = COPY $vgpr0_vgpr1
272    %1:_(s32) = COPY $vgpr2
273    %2:_(s1) = G_TRUNC %1
274    G_STORE %2, %0 :: (store 1, addrspace 1)
275...
276
277---
278name: test_store_global_i8
279body: |
280  bb.0:
281    liveins: $vgpr0_vgpr1, $vgpr2
282
283    ; SI-LABEL: name: test_store_global_i8
284    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
285    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
286    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
287    ; SI: G_STORE [[COPY2]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
288    ; VI-LABEL: name: test_store_global_i8
289    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
290    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
291    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
292    ; VI: G_STORE [[COPY2]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
293    %0:_(p1) = COPY $vgpr0_vgpr1
294    %1:_(s32) = COPY $vgpr2
295    %2:_(s8) = G_TRUNC %1
296    G_STORE %2, %0 :: (store 1, addrspace 1)
297...
298
299---
300name: test_store_global_i16
301body: |
302  bb.0:
303    liveins: $vgpr0_vgpr1, $vgpr2
304
305    ; SI-LABEL: name: test_store_global_i16
306    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
307    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
308    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
309    ; SI: G_STORE [[COPY2]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
310    ; VI-LABEL: name: test_store_global_i16
311    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
312    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
313    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
314    ; VI: G_STORE [[COPY2]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
315    %0:_(p1) = COPY $vgpr0_vgpr1
316    %1:_(s32) = COPY $vgpr2
317    %2:_(s16) = G_TRUNC %1
318    G_STORE %2, %0 :: (store 2, addrspace 1)
319...
320
321---
322name: test_store_global_96
323body: |
324  bb.0:
325    liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4
326
327    ; SI-LABEL: name: test_store_global_96
328    ; SI: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2
329    ; SI: [[COPY1:%[0-9]+]]:_(p1) = COPY $vgpr3_vgpr4
330    ; SI: [[BITCAST:%[0-9]+]]:_(<3 x s32>) = G_BITCAST [[COPY]](s96)
331    ; SI: [[EXTRACT:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[BITCAST]](<3 x s32>), 0
332    ; SI: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST]](<3 x s32>), 64
333    ; SI: G_STORE [[EXTRACT]](<2 x s32>), [[COPY1]](p1) :: (store 8, align 16, addrspace 1)
334    ; SI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
335    ; SI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY1]], [[C]](s64)
336    ; SI: G_STORE [[EXTRACT1]](s32), [[PTR_ADD]](p1) :: (store 4 + 8, align 8, addrspace 1)
337    ; VI-LABEL: name: test_store_global_96
338    ; VI: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2
339    ; VI: [[COPY1:%[0-9]+]]:_(p1) = COPY $vgpr3_vgpr4
340    ; VI: [[BITCAST:%[0-9]+]]:_(<3 x s32>) = G_BITCAST [[COPY]](s96)
341    ; VI: G_STORE [[BITCAST]](<3 x s32>), [[COPY1]](p1) :: (store 12, align 16, addrspace 1)
342    %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2
343    %1:_(p1) = COPY $vgpr3_vgpr4
344
345    G_STORE %0, %1 :: (store 12, addrspace 1, align 16)
346...
347
348---
349name: test_store_global_i128
350body: |
351  bb.0:
352    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
353
354    ; SI-LABEL: name: test_store_global_i128
355    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
356    ; SI: [[COPY1:%[0-9]+]]:_(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
357    ; SI: [[BITCAST:%[0-9]+]]:_(<4 x s32>) = G_BITCAST [[COPY1]](s128)
358    ; SI: G_STORE [[BITCAST]](<4 x s32>), [[COPY]](p1) :: (store 16, addrspace 1)
359    ; VI-LABEL: name: test_store_global_i128
360    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
361    ; VI: [[COPY1:%[0-9]+]]:_(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
362    ; VI: [[BITCAST:%[0-9]+]]:_(<4 x s32>) = G_BITCAST [[COPY1]](s128)
363    ; VI: G_STORE [[BITCAST]](<4 x s32>), [[COPY]](p1) :: (store 16, addrspace 1)
364    %0:_(p1) = COPY $vgpr0_vgpr1
365    %1:_(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
366    G_STORE %1, %0 :: (store 16, addrspace 1)
367...
368
369---
370name: test_store_global_v2s64
371body: |
372  bb.0:
373    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
374
375    ; SI-LABEL: name: test_store_global_v2s64
376    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
377    ; SI: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
378    ; SI: G_STORE [[COPY1]](<2 x s64>), [[COPY]](p1) :: (store 16, addrspace 1)
379    ; VI-LABEL: name: test_store_global_v2s64
380    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
381    ; VI: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
382    ; VI: G_STORE [[COPY1]](<2 x s64>), [[COPY]](p1) :: (store 16, addrspace 1)
383    %0:_(p1) = COPY $vgpr0_vgpr1
384    %1:_(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
385    G_STORE %1, %0 :: (store 16, addrspace 1)
386
387...
388
389---
390name: test_store_global_v2s8_align1
391body: |
392  bb.0:
393    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
394
395    ; SI-LABEL: name: test_store_global_v2s8_align1
396    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
397    ; SI: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF
398    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<2 x s32>)
399    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV]](s32)
400    ; SI: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
401    ; SI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
402    ; SI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C]](s64)
403    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
404    ; SI: G_STORE [[COPY2]](s32), [[PTR_ADD]](p1) :: (store 1 + 1, addrspace 1)
405    ; VI-LABEL: name: test_store_global_v2s8_align1
406    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
407    ; VI: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF
408    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<2 x s32>)
409    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV]](s32)
410    ; VI: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
411    ; VI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
412    ; VI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C]](s64)
413    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
414    ; VI: G_STORE [[COPY2]](s32), [[PTR_ADD]](p1) :: (store 1 + 1, addrspace 1)
415    %0:_(p1) = COPY $vgpr0_vgpr1
416    %1:_(<2 x s8>) = G_IMPLICIT_DEF
417    G_STORE %1, %0 :: (store 2, addrspace 1, align 1)
418
419...
420
421---
422name: test_store_global_v2s8_align2
423body: |
424  bb.0:
425    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
426
427    ; SI-LABEL: name: test_store_global_v2s8_align2
428    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
429    ; SI: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF
430    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<2 x s32>)
431    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
432    ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
433    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
434    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
435    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
436    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
437    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]]
438    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
439    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
440    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[TRUNC1]]
441    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
442    ; SI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
443    ; VI-LABEL: name: test_store_global_v2s8_align2
444    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
445    ; VI: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF
446    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<2 x s32>)
447    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
448    ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
449    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
450    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
451    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
452    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
453    ; VI: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C1]](s16)
454    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
455    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
456    ; VI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
457    %0:_(p1) = COPY $vgpr0_vgpr1
458    %1:_(<2 x s8>) = G_IMPLICIT_DEF
459    G_STORE %1, %0 :: (store 2, addrspace 1, align 2)
460
461...
462
463---
464name: test_store_global_v2s8_align4
465body: |
466  bb.0:
467    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
468
469    ; SI-LABEL: name: test_store_global_v2s8_align4
470    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
471    ; SI: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF
472    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<2 x s32>)
473    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
474    ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
475    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
476    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
477    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
478    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
479    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]]
480    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
481    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
482    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[TRUNC1]]
483    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
484    ; SI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 2, align 4, addrspace 1)
485    ; VI-LABEL: name: test_store_global_v2s8_align4
486    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
487    ; VI: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF
488    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<2 x s32>)
489    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
490    ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
491    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
492    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
493    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
494    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
495    ; VI: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C1]](s16)
496    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
497    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
498    ; VI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 2, align 4, addrspace 1)
499    %0:_(p1) = COPY $vgpr0_vgpr1
500    %1:_(<2 x s8>) = G_IMPLICIT_DEF
501    G_STORE %1, %0 :: (store 2, addrspace 1, align 4)
502
503...
504
505---
506name: test_store_global_v3s8_align1
507body: |
508  bb.0:
509    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
510
511    ; SI-LABEL: name: test_store_global_v3s8_align1
512    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
513    ; SI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
514    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
515    ; SI: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s32)
516    ; SI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
517    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
518    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
519    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
520    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
521    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
522    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
523    ; SI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
524    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
525    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[COPY2]](s32)
526    ; SI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
527    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[TRUNC2]]
528    ; SI: [[COPY4:%[0-9]+]]:_(s16) = COPY [[OR]](s16)
529    ; SI: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[COPY4]](s16)
530    ; SI: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[ZEXT]], [[C1]](s32)
531    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[COPY4]](s16)
532    ; SI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
533    ; SI: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
534    ; SI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C3]](s64)
535    ; SI: [[COPY5:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
536    ; SI: G_STORE [[COPY5]](s32), [[PTR_ADD]](p1) :: (store 1 + 1, addrspace 1)
537    ; SI: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
538    ; SI: [[PTR_ADD1:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C4]](s64)
539    ; SI: [[COPY6:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
540    ; SI: G_STORE [[COPY6]](s32), [[PTR_ADD1]](p1) :: (store 1 + 2, addrspace 1)
541    ; VI-LABEL: name: test_store_global_v3s8_align1
542    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
543    ; VI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
544    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
545    ; VI: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s32)
546    ; VI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
547    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
548    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
549    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
550    ; VI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
551    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
552    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
553    ; VI: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C1]](s16)
554    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
555    ; VI: [[COPY2:%[0-9]+]]:_(s16) = COPY [[OR]](s16)
556    ; VI: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[COPY2]], [[C1]](s16)
557    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[COPY2]](s16)
558    ; VI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
559    ; VI: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
560    ; VI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C2]](s64)
561    ; VI: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[LSHR]](s16)
562    ; VI: G_STORE [[ANYEXT1]](s32), [[PTR_ADD]](p1) :: (store 1 + 1, addrspace 1)
563    ; VI: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
564    ; VI: [[PTR_ADD1:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C3]](s64)
565    ; VI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
566    ; VI: G_STORE [[COPY3]](s32), [[PTR_ADD1]](p1) :: (store 1 + 2, addrspace 1)
567    %0:_(p1) = COPY $vgpr0_vgpr1
568    %1:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
569    %2:_(<3 x s8>) = G_TRUNC %1
570    G_STORE %2, %0 :: (store 3, addrspace 1, align 1)
571
572...
573
574---
575name: test_store_global_v3s8_align2
576body: |
577  bb.0:
578    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
579
580    ; SI-LABEL: name: test_store_global_v3s8_align2
581    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
582    ; SI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
583    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
584    ; SI: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s32)
585    ; SI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
586    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
587    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
588    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
589    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
590    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
591    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
592    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
593    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
594    ; SI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
595    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[TRUNC2]]
596    ; SI: [[COPY3:%[0-9]+]]:_(s16) = COPY [[OR]](s16)
597    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[COPY3]](s16)
598    ; SI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
599    ; SI: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
600    ; SI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C3]](s64)
601    ; SI: [[COPY4:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
602    ; SI: G_STORE [[COPY4]](s32), [[PTR_ADD]](p1) :: (store 1 + 2, align 2, addrspace 1)
603    ; VI-LABEL: name: test_store_global_v3s8_align2
604    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
605    ; VI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
606    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
607    ; VI: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s32)
608    ; VI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
609    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
610    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
611    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
612    ; VI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
613    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
614    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
615    ; VI: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C1]](s16)
616    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
617    ; VI: [[COPY2:%[0-9]+]]:_(s16) = COPY [[OR]](s16)
618    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[COPY2]](s16)
619    ; VI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
620    ; VI: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
621    ; VI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C2]](s64)
622    ; VI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
623    ; VI: G_STORE [[COPY3]](s32), [[PTR_ADD]](p1) :: (store 1 + 2, align 2, addrspace 1)
624    %0:_(p1) = COPY $vgpr0_vgpr1
625    %1:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
626    %2:_(<3 x s8>) = G_TRUNC %1
627    G_STORE %2, %0 :: (store 3, addrspace 1, align 2)
628
629...
630
631---
632name: test_store_global_v3s8_align4
633body: |
634  bb.0:
635    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
636
637    ; SI-LABEL: name: test_store_global_v3s8_align4
638    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
639    ; SI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
640    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
641    ; SI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
642    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
643    ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
644    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
645    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
646    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
647    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
648    ; SI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
649    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
650    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[COPY2]](s32)
651    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
652    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[TRUNC1]]
653    ; SI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
654    ; SI: [[AND2:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
655    ; SI: [[COPY4:%[0-9]+]]:_(s32) = COPY [[DEF]](s32)
656    ; SI: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C2]]
657    ; SI: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)
658    ; SI: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32)
659    ; SI: [[OR1:%[0-9]+]]:_(s16) = G_OR [[AND2]], [[TRUNC3]]
660    ; SI: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
661    ; SI: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
662    ; SI: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
663    ; SI: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C3]](s32)
664    ; SI: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL2]]
665    ; SI: [[COPY5:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
666    ; SI: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY5]], [[C3]](s32)
667    ; SI: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
668    ; SI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C4]](s64)
669    ; SI: G_STORE [[COPY5]](s32), [[COPY]](p1) :: (store 2, align 4, addrspace 1)
670    ; SI: G_STORE [[LSHR]](s32), [[PTR_ADD]](p1) :: (store 1 + 2, align 2, addrspace 1)
671    ; VI-LABEL: name: test_store_global_v3s8_align4
672    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
673    ; VI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
674    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
675    ; VI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
676    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
677    ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
678    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
679    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
680    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
681    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
682    ; VI: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C1]](s16)
683    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
684    ; VI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
685    ; VI: [[AND2:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
686    ; VI: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[DEF]](s32)
687    ; VI: [[AND3:%[0-9]+]]:_(s16) = G_AND [[TRUNC3]], [[C]]
688    ; VI: [[SHL1:%[0-9]+]]:_(s16) = G_SHL [[AND3]], [[C1]](s16)
689    ; VI: [[OR1:%[0-9]+]]:_(s16) = G_OR [[AND2]], [[SHL1]]
690    ; VI: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
691    ; VI: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
692    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
693    ; VI: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C2]](s32)
694    ; VI: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL2]]
695    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
696    ; VI: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY2]], [[C2]](s32)
697    ; VI: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
698    ; VI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C3]](s64)
699    ; VI: G_STORE [[COPY2]](s32), [[COPY]](p1) :: (store 2, align 4, addrspace 1)
700    ; VI: G_STORE [[LSHR]](s32), [[PTR_ADD]](p1) :: (store 1 + 2, align 2, addrspace 1)
701    %0:_(p1) = COPY $vgpr0_vgpr1
702    %1:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
703    %2:_(<3 x s8>) = G_TRUNC %1
704    G_STORE %2, %0 :: (store 3, addrspace 1, align 4)
705
706...
707
708---
709name: test_store_global_v4s8_align1
710body: |
711  bb.0:
712    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
713
714    ; SI-LABEL: name: test_store_global_v4s8_align1
715    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
716    ; SI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
717    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>)
718    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[UV]](s32)
719    ; SI: G_STORE [[COPY2]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
720    ; SI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
721    ; SI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C]](s64)
722    ; SI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
723    ; SI: G_STORE [[COPY3]](s32), [[PTR_ADD]](p1) :: (store 1 + 1, addrspace 1)
724    ; SI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
725    ; SI: [[PTR_ADD1:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C1]](s64)
726    ; SI: [[COPY4:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
727    ; SI: G_STORE [[COPY4]](s32), [[PTR_ADD1]](p1) :: (store 1 + 2, addrspace 1)
728    ; SI: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 3
729    ; SI: [[PTR_ADD2:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C2]](s64)
730    ; SI: [[COPY5:%[0-9]+]]:_(s32) = COPY [[UV3]](s32)
731    ; SI: G_STORE [[COPY5]](s32), [[PTR_ADD2]](p1) :: (store 1 + 3, addrspace 1)
732    ; VI-LABEL: name: test_store_global_v4s8_align1
733    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
734    ; VI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
735    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>)
736    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[UV]](s32)
737    ; VI: G_STORE [[COPY2]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
738    ; VI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
739    ; VI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C]](s64)
740    ; VI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
741    ; VI: G_STORE [[COPY3]](s32), [[PTR_ADD]](p1) :: (store 1 + 1, addrspace 1)
742    ; VI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
743    ; VI: [[PTR_ADD1:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C1]](s64)
744    ; VI: [[COPY4:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
745    ; VI: G_STORE [[COPY4]](s32), [[PTR_ADD1]](p1) :: (store 1 + 2, addrspace 1)
746    ; VI: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 3
747    ; VI: [[PTR_ADD2:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C2]](s64)
748    ; VI: [[COPY5:%[0-9]+]]:_(s32) = COPY [[UV3]](s32)
749    ; VI: G_STORE [[COPY5]](s32), [[PTR_ADD2]](p1) :: (store 1 + 3, addrspace 1)
750    %0:_(p1) = COPY $vgpr0_vgpr1
751    %1:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
752    %2:_(<4 x s8>) = G_TRUNC %1
753    G_STORE %2, %0 :: (store 4, addrspace 1, align 1)
754
755...
756
757---
758name: test_store_global_v4s8_align2
759body: |
760  bb.0:
761    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
762
763    ; SI-LABEL: name: test_store_global_v4s8_align2
764    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
765    ; SI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
766    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>)
767    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
768    ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
769    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
770    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
771    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
772    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
773    ; SI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
774    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
775    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[COPY2]](s32)
776    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
777    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[TRUNC1]]
778    ; SI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
779    ; SI: [[AND2:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
780    ; SI: [[COPY4:%[0-9]+]]:_(s32) = COPY [[UV3]](s32)
781    ; SI: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C2]]
782    ; SI: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)
783    ; SI: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32)
784    ; SI: [[OR1:%[0-9]+]]:_(s16) = G_OR [[AND2]], [[TRUNC3]]
785    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
786    ; SI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
787    ; SI: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
788    ; SI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C3]](s64)
789    ; SI: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[OR1]](s16)
790    ; SI: G_STORE [[ANYEXT1]](s32), [[PTR_ADD]](p1) :: (store 2 + 2, addrspace 1)
791    ; VI-LABEL: name: test_store_global_v4s8_align2
792    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
793    ; VI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
794    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>)
795    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
796    ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
797    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
798    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
799    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
800    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
801    ; VI: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C1]](s16)
802    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
803    ; VI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
804    ; VI: [[AND2:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
805    ; VI: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s32)
806    ; VI: [[AND3:%[0-9]+]]:_(s16) = G_AND [[TRUNC3]], [[C]]
807    ; VI: [[SHL1:%[0-9]+]]:_(s16) = G_SHL [[AND3]], [[C1]](s16)
808    ; VI: [[OR1:%[0-9]+]]:_(s16) = G_OR [[AND2]], [[SHL1]]
809    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
810    ; VI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
811    ; VI: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
812    ; VI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C2]](s64)
813    ; VI: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[OR1]](s16)
814    ; VI: G_STORE [[ANYEXT1]](s32), [[PTR_ADD]](p1) :: (store 2 + 2, addrspace 1)
815    %0:_(p1) = COPY $vgpr0_vgpr1
816    %1:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
817    %2:_(<4 x s8>) = G_TRUNC %1
818    G_STORE %2, %0 :: (store 4, addrspace 1, align 2)
819
820...
821
822---
823name: test_store_global_v4s8_align4
824body: |
825  bb.0:
826    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
827
828    ; SI-LABEL: name: test_store_global_v4s8_align4
829    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
830    ; SI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
831    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>)
832    ; SI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
833    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[UV]](s32)
834    ; SI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C]]
835    ; SI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
836    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C]]
837    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
838    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
839    ; SI: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
840    ; SI: [[COPY4:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
841    ; SI: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C]]
842    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
843    ; SI: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND2]], [[C2]](s32)
844    ; SI: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]]
845    ; SI: [[COPY5:%[0-9]+]]:_(s32) = COPY [[UV3]](s32)
846    ; SI: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY5]], [[C]]
847    ; SI: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
848    ; SI: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C3]](s32)
849    ; SI: [[OR2:%[0-9]+]]:_(s32) = G_OR [[OR1]], [[SHL2]]
850    ; SI: G_STORE [[OR2]](s32), [[COPY]](p1) :: (store 4, addrspace 1)
851    ; VI-LABEL: name: test_store_global_v4s8_align4
852    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
853    ; VI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
854    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>)
855    ; VI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
856    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[UV]](s32)
857    ; VI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C]]
858    ; VI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
859    ; VI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C]]
860    ; VI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
861    ; VI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
862    ; VI: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
863    ; VI: [[COPY4:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
864    ; VI: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C]]
865    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
866    ; VI: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND2]], [[C2]](s32)
867    ; VI: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]]
868    ; VI: [[COPY5:%[0-9]+]]:_(s32) = COPY [[UV3]](s32)
869    ; VI: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY5]], [[C]]
870    ; VI: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
871    ; VI: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C3]](s32)
872    ; VI: [[OR2:%[0-9]+]]:_(s32) = G_OR [[OR1]], [[SHL2]]
873    ; VI: G_STORE [[OR2]](s32), [[COPY]](p1) :: (store 4, addrspace 1)
874    %0:_(p1) = COPY $vgpr0_vgpr1
875    %1:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
876    %2:_(<4 x s8>) = G_TRUNC %1
877    G_STORE %2, %0 :: (store 4, addrspace 1, align 4)
878
879...
880
881---
882name: test_truncstore_global_v2s8_to_1_align1
883body: |
884  bb.0:
885    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
886
887    ; SI-LABEL: name: test_truncstore_global_v2s8_to_1_align1
888    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
889    ; SI: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF
890    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<2 x s32>)
891    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
892    ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
893    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
894    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
895    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
896    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
897    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]]
898    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
899    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
900    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[TRUNC1]]
901    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
902    ; SI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
903    ; VI-LABEL: name: test_truncstore_global_v2s8_to_1_align1
904    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
905    ; VI: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF
906    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<2 x s32>)
907    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
908    ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
909    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
910    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
911    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
912    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
913    ; VI: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C1]](s16)
914    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
915    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
916    ; VI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
917    %0:_(p1) = COPY $vgpr0_vgpr1
918    %1:_(<2 x s8>) = G_IMPLICIT_DEF
919    G_STORE %1, %0 :: (store 1, addrspace 1, align 1)
920
921...
922
923---
924name: test_truncstore_global_v3s8_to_1_align1
925body: |
926  bb.0:
927    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
928
929    ; SI-LABEL: name: test_truncstore_global_v3s8_to_1_align1
930    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
931    ; SI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
932    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
933    ; SI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
934    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
935    ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
936    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
937    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
938    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
939    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
940    ; SI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
941    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
942    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[COPY2]](s32)
943    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
944    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[TRUNC1]]
945    ; SI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
946    ; SI: [[AND2:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
947    ; SI: [[COPY4:%[0-9]+]]:_(s32) = COPY [[DEF]](s32)
948    ; SI: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C2]]
949    ; SI: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)
950    ; SI: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32)
951    ; SI: [[OR1:%[0-9]+]]:_(s16) = G_OR [[AND2]], [[TRUNC3]]
952    ; SI: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
953    ; SI: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
954    ; SI: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
955    ; SI: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C3]](s32)
956    ; SI: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL2]]
957    ; SI: [[COPY5:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
958    ; SI: G_STORE [[COPY5]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
959    ; VI-LABEL: name: test_truncstore_global_v3s8_to_1_align1
960    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
961    ; VI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
962    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
963    ; VI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
964    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
965    ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
966    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
967    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
968    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
969    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
970    ; VI: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C1]](s16)
971    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
972    ; VI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
973    ; VI: [[AND2:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
974    ; VI: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[DEF]](s32)
975    ; VI: [[AND3:%[0-9]+]]:_(s16) = G_AND [[TRUNC3]], [[C]]
976    ; VI: [[SHL1:%[0-9]+]]:_(s16) = G_SHL [[AND3]], [[C1]](s16)
977    ; VI: [[OR1:%[0-9]+]]:_(s16) = G_OR [[AND2]], [[SHL1]]
978    ; VI: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
979    ; VI: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
980    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
981    ; VI: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C2]](s32)
982    ; VI: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL2]]
983    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
984    ; VI: G_STORE [[COPY2]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
985    %0:_(p1) = COPY $vgpr0_vgpr1
986    %1:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
987    %2:_(<3 x s8>) = G_TRUNC %1
988    G_STORE %2, %0 :: (store 1, addrspace 1, align 1)
989
990...
991
992---
993name: test_truncstore_global_v3s8_to_2_align2
994body: |
995  bb.0:
996    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
997
998    ; SI-LABEL: name: test_truncstore_global_v3s8_to_2_align2
999    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
1000    ; SI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
1001    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
1002    ; SI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
1003    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
1004    ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
1005    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
1006    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
1007    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
1008    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
1009    ; SI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
1010    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
1011    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[COPY2]](s32)
1012    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
1013    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[TRUNC1]]
1014    ; SI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
1015    ; SI: [[AND2:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
1016    ; SI: [[COPY4:%[0-9]+]]:_(s32) = COPY [[DEF]](s32)
1017    ; SI: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C2]]
1018    ; SI: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)
1019    ; SI: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32)
1020    ; SI: [[OR1:%[0-9]+]]:_(s16) = G_OR [[AND2]], [[TRUNC3]]
1021    ; SI: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
1022    ; SI: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
1023    ; SI: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
1024    ; SI: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C3]](s32)
1025    ; SI: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL2]]
1026    ; SI: [[COPY5:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
1027    ; SI: G_STORE [[COPY5]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
1028    ; VI-LABEL: name: test_truncstore_global_v3s8_to_2_align2
1029    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
1030    ; VI: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
1031    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
1032    ; VI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
1033    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
1034    ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
1035    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
1036    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
1037    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
1038    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
1039    ; VI: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C1]](s16)
1040    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
1041    ; VI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
1042    ; VI: [[AND2:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
1043    ; VI: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[DEF]](s32)
1044    ; VI: [[AND3:%[0-9]+]]:_(s16) = G_AND [[TRUNC3]], [[C]]
1045    ; VI: [[SHL1:%[0-9]+]]:_(s16) = G_SHL [[AND3]], [[C1]](s16)
1046    ; VI: [[OR1:%[0-9]+]]:_(s16) = G_OR [[AND2]], [[SHL1]]
1047    ; VI: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
1048    ; VI: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
1049    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
1050    ; VI: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C2]](s32)
1051    ; VI: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL2]]
1052    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
1053    ; VI: G_STORE [[COPY2]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
1054    %0:_(p1) = COPY $vgpr0_vgpr1
1055    %1:_(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
1056    %2:_(<3 x s8>) = G_TRUNC %1
1057    G_STORE %2, %0 :: (store 2, addrspace 1, align 2)
1058
1059...
1060
1061
1062---
1063name: test_truncstore_global_v4s8_to_3_align1
1064body: |
1065  bb.0:
1066    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
1067
1068    ; SI-LABEL: name: test_truncstore_global_v4s8_to_3_align1
1069    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
1070    ; SI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
1071    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>)
1072    ; SI: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s32)
1073    ; SI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
1074    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
1075    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
1076    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
1077    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
1078    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
1079    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
1080    ; SI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
1081    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
1082    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[COPY2]](s32)
1083    ; SI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
1084    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[TRUNC2]]
1085    ; SI: [[COPY4:%[0-9]+]]:_(s16) = COPY [[OR]](s16)
1086    ; SI: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[COPY4]](s16)
1087    ; SI: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[ZEXT]], [[C1]](s32)
1088    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[COPY4]](s16)
1089    ; SI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
1090    ; SI: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
1091    ; SI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C3]](s64)
1092    ; SI: [[COPY5:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
1093    ; SI: G_STORE [[COPY5]](s32), [[PTR_ADD]](p1) :: (store 1 + 1, addrspace 1)
1094    ; SI: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
1095    ; SI: [[PTR_ADD1:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C4]](s64)
1096    ; SI: [[COPY6:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
1097    ; SI: G_STORE [[COPY6]](s32), [[PTR_ADD1]](p1) :: (store 1 + 2, addrspace 1)
1098    ; VI-LABEL: name: test_truncstore_global_v4s8_to_3_align1
1099    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
1100    ; VI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
1101    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>)
1102    ; VI: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s32)
1103    ; VI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
1104    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
1105    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
1106    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
1107    ; VI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
1108    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
1109    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
1110    ; VI: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C1]](s16)
1111    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
1112    ; VI: [[COPY2:%[0-9]+]]:_(s16) = COPY [[OR]](s16)
1113    ; VI: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[COPY2]], [[C1]](s16)
1114    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[COPY2]](s16)
1115    ; VI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 1, addrspace 1)
1116    ; VI: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
1117    ; VI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C2]](s64)
1118    ; VI: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[LSHR]](s16)
1119    ; VI: G_STORE [[ANYEXT1]](s32), [[PTR_ADD]](p1) :: (store 1 + 1, addrspace 1)
1120    ; VI: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
1121    ; VI: [[PTR_ADD1:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C3]](s64)
1122    ; VI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
1123    ; VI: G_STORE [[COPY3]](s32), [[PTR_ADD1]](p1) :: (store 1 + 2, addrspace 1)
1124    %0:_(p1) = COPY $vgpr0_vgpr1
1125    %1:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
1126    %2:_(<4 x s8>) = G_TRUNC %1
1127    G_STORE %2, %0 :: (store 3, addrspace 1, align 1)
1128
1129...
1130
1131---
1132name: test_truncstore_global_v4s8_to_3_align2
1133body: |
1134  bb.0:
1135    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
1136
1137    ; SI-LABEL: name: test_truncstore_global_v4s8_to_3_align2
1138    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
1139    ; SI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
1140    ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>)
1141    ; SI: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s32)
1142    ; SI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
1143    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
1144    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
1145    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
1146    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
1147    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
1148    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
1149    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
1150    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
1151    ; SI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
1152    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[TRUNC2]]
1153    ; SI: [[COPY3:%[0-9]+]]:_(s16) = COPY [[OR]](s16)
1154    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[COPY3]](s16)
1155    ; SI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
1156    ; SI: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
1157    ; SI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C3]](s64)
1158    ; SI: [[COPY4:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
1159    ; SI: G_STORE [[COPY4]](s32), [[PTR_ADD]](p1) :: (store 1 + 2, align 2, addrspace 1)
1160    ; VI-LABEL: name: test_truncstore_global_v4s8_to_3_align2
1161    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
1162    ; VI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
1163    ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>)
1164    ; VI: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s32)
1165    ; VI: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
1166    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
1167    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
1168    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
1169    ; VI: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
1170    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C]]
1171    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
1172    ; VI: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C1]](s16)
1173    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
1174    ; VI: [[COPY2:%[0-9]+]]:_(s16) = COPY [[OR]](s16)
1175    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[COPY2]](s16)
1176    ; VI: G_STORE [[ANYEXT]](s32), [[COPY]](p1) :: (store 2, addrspace 1)
1177    ; VI: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
1178    ; VI: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C2]](s64)
1179    ; VI: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
1180    ; VI: G_STORE [[COPY3]](s32), [[PTR_ADD]](p1) :: (store 1 + 2, align 2, addrspace 1)
1181    %0:_(p1) = COPY $vgpr0_vgpr1
1182    %1:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
1183    %2:_(<4 x s8>) = G_TRUNC %1
1184    G_STORE %2, %0 :: (store 3, addrspace 1, align 2)
1185
1186...
1187
1188---
1189name: test_truncstore_global_v4s8_to_3_align4
1190body: |
1191  bb.0:
1192    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
1193
1194    ; SI-LABEL: name: test_truncstore_global_v4s8_to_3_align4
1195    ; SI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
1196    ; SI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
1197    ; SI: [[TRUNC:%[0-9]+]]:_(<4 x s8>) = G_TRUNC [[COPY1]](<4 x s32>)
1198    ; SI: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC]](<4 x s8>)
1199    ; SI: G_STORE [[BITCAST]](s32), [[COPY]](p1) :: (store 3, align 4, addrspace 1)
1200    ; VI-LABEL: name: test_truncstore_global_v4s8_to_3_align4
1201    ; VI: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
1202    ; VI: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
1203    ; VI: [[TRUNC:%[0-9]+]]:_(<4 x s8>) = G_TRUNC [[COPY1]](<4 x s32>)
1204    ; VI: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC]](<4 x s8>)
1205    ; VI: G_STORE [[BITCAST]](s32), [[COPY]](p1) :: (store 3, align 4, addrspace 1)
1206    %0:_(p1) = COPY $vgpr0_vgpr1
1207    %1:_(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
1208    %2:_(<4 x s8>) = G_TRUNC %1
1209    G_STORE %2, %0 :: (store 3, addrspace 1, align 4)
1210
1211...
1212