1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s
3# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
4# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=hawaii -mattr=+flat-for-global -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7-FLAT %s
5# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX8 %s
6# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
7# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s
8
9---
10
11name: store_global_s32_to_4
12legalized:       true
13tracksRegLiveness: true
14regBankSelected: true
15
16body: |
17  bb.0:
18    liveins:  $vgpr0_vgpr1, $vgpr2
19
20    ; GFX6-LABEL: name: store_global_s32_to_4
21    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
22    ; GFX6: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
23    ; GFX6: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
24    ; GFX6: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
25    ; GFX6: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
26    ; GFX6: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
27    ; GFX6: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
28    ; GFX6: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
29    ; GFX6: BUFFER_STORE_DWORD_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, 0, implicit $exec :: (store (s32), addrspace 1)
30    ; GFX7-LABEL: name: store_global_s32_to_4
31    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
32    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
33    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
34    ; GFX7: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
35    ; GFX7: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
36    ; GFX7: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
37    ; GFX7: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
38    ; GFX7: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
39    ; GFX7: BUFFER_STORE_DWORD_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, 0, implicit $exec :: (store (s32), addrspace 1)
40    ; GFX7-FLAT-LABEL: name: store_global_s32_to_4
41    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2
42    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
43    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
44    ; GFX7-FLAT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
45    ; GFX8-LABEL: name: store_global_s32_to_4
46    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
47    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
48    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
49    ; GFX8: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
50    ; GFX9-LABEL: name: store_global_s32_to_4
51    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
52    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
53    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
54    ; GFX9: GLOBAL_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
55    ; GFX10-LABEL: name: store_global_s32_to_4
56    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
57    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
58    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
59    ; GFX10: GLOBAL_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
60    %0:vgpr(p1) = COPY $vgpr0_vgpr1
61    %1:vgpr(s32) = COPY $vgpr2
62    G_STORE %1, %0 :: (store (s32), align 4, addrspace 1)
63
64...
65
66---
67name: store_global_s32_to_2
68legalized:       true
69tracksRegLiveness: true
70regBankSelected: true
71
72body: |
73  bb.0:
74    liveins:  $vgpr0_vgpr1, $vgpr2
75
76    ; GFX6-LABEL: name: store_global_s32_to_2
77    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
78    ; GFX6: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
79    ; GFX6: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
80    ; GFX6: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
81    ; GFX6: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
82    ; GFX6: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
83    ; GFX6: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
84    ; GFX6: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
85    ; GFX6: BUFFER_STORE_SHORT_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, 0, implicit $exec :: (store (s16), addrspace 1)
86    ; GFX7-LABEL: name: store_global_s32_to_2
87    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
88    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
89    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
90    ; GFX7: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
91    ; GFX7: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
92    ; GFX7: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
93    ; GFX7: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
94    ; GFX7: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
95    ; GFX7: BUFFER_STORE_SHORT_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, 0, implicit $exec :: (store (s16), addrspace 1)
96    ; GFX7-FLAT-LABEL: name: store_global_s32_to_2
97    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2
98    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
99    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
100    ; GFX7-FLAT: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16), addrspace 1)
101    ; GFX8-LABEL: name: store_global_s32_to_2
102    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
103    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
104    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
105    ; GFX8: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16), addrspace 1)
106    ; GFX9-LABEL: name: store_global_s32_to_2
107    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
108    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
109    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
110    ; GFX9: GLOBAL_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (s16), addrspace 1)
111    ; GFX10-LABEL: name: store_global_s32_to_2
112    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
113    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
114    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
115    ; GFX10: GLOBAL_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (s16), addrspace 1)
116    %0:vgpr(p1) = COPY $vgpr0_vgpr1
117    %1:vgpr(s32) = COPY $vgpr2
118    G_STORE %1, %0 :: (store (s16), align 2, addrspace 1)
119
120...
121
122---
123name: store_global_s32_to_1
124legalized:       true
125tracksRegLiveness: true
126regBankSelected: true
127
128body: |
129  bb.0:
130    liveins:  $vgpr0_vgpr1, $vgpr2
131
132    ; GFX6-LABEL: name: store_global_s32_to_1
133    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
134    ; GFX6: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
135    ; GFX6: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
136    ; GFX6: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
137    ; GFX6: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
138    ; GFX6: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
139    ; GFX6: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
140    ; GFX6: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
141    ; GFX6: BUFFER_STORE_BYTE_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, 0, implicit $exec :: (store (s8), addrspace 1)
142    ; GFX7-LABEL: name: store_global_s32_to_1
143    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
144    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
145    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
146    ; GFX7: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
147    ; GFX7: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
148    ; GFX7: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
149    ; GFX7: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
150    ; GFX7: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
151    ; GFX7: BUFFER_STORE_BYTE_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, 0, implicit $exec :: (store (s8), addrspace 1)
152    ; GFX7-FLAT-LABEL: name: store_global_s32_to_1
153    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2
154    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
155    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
156    ; GFX7-FLAT: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8), addrspace 1)
157    ; GFX8-LABEL: name: store_global_s32_to_1
158    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
159    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
160    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
161    ; GFX8: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8), addrspace 1)
162    ; GFX9-LABEL: name: store_global_s32_to_1
163    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
164    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
165    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
166    ; GFX9: GLOBAL_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (s8), addrspace 1)
167    ; GFX10-LABEL: name: store_global_s32_to_1
168    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
169    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
170    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
171    ; GFX10: GLOBAL_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (s8), addrspace 1)
172    %0:vgpr(p1) = COPY $vgpr0_vgpr1
173    %1:vgpr(s32) = COPY $vgpr2
174    G_STORE %1, %0 :: (store (s8), align 1, addrspace 1)
175
176...
177
178---
179
180name: store_global_s64
181legalized:       true
182tracksRegLiveness: true
183regBankSelected: true
184
185body: |
186  bb.0:
187    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
188
189    ; GFX6-LABEL: name: store_global_s64
190    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
191    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
192    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
193    ; GFX6: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store (s64), addrspace 1)
194    ; GFX7-LABEL: name: store_global_s64
195    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
196    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
197    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
198    ; GFX7: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64), addrspace 1)
199    ; GFX7-FLAT-LABEL: name: store_global_s64
200    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
201    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
202    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
203    ; GFX7-FLAT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64), addrspace 1)
204    ; GFX8-LABEL: name: store_global_s64
205    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
206    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
207    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
208    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64), addrspace 1)
209    ; GFX9-LABEL: name: store_global_s64
210    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
211    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
212    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
213    ; GFX9: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (s64), addrspace 1)
214    ; GFX10-LABEL: name: store_global_s64
215    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
216    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
217    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
218    ; GFX10: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (s64), addrspace 1)
219    %0:vgpr(p1) = COPY $vgpr0_vgpr1
220    %1:vgpr(s64) = COPY $vgpr2_vgpr3
221    G_STORE %1, %0 :: (store (s64), align 8, addrspace 1)
222
223...
224---
225
226name: store_global_s128
227legalized:       true
228tracksRegLiveness: true
229regBankSelected: true
230
231body: |
232  bb.0:
233    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
234
235    ; GFX6-LABEL: name: store_global_s128
236    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
237    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
238    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
239    ; GFX6: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128), addrspace 1)
240    ; GFX7-LABEL: name: store_global_s128
241    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
242    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
243    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
244    ; GFX7: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128), addrspace 1)
245    ; GFX7-FLAT-LABEL: name: store_global_s128
246    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
247    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
248    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
249    ; GFX7-FLAT: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128), addrspace 1)
250    ; GFX8-LABEL: name: store_global_s128
251    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
252    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
253    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
254    ; GFX8: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128), addrspace 1)
255    ; GFX9-LABEL: name: store_global_s128
256    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
257    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
258    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
259    ; GFX9: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128), addrspace 1)
260    ; GFX10-LABEL: name: store_global_s128
261    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
262    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
263    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
264    ; GFX10: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128), addrspace 1)
265    %0:vgpr(p1) = COPY $vgpr0_vgpr1
266    %1:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
267    G_STORE %1, %0 :: (store (s128), align 16, addrspace 1)
268
269...
270
271---
272
273name: store_global_v2s32
274legalized:       true
275tracksRegLiveness: true
276regBankSelected: true
277
278body: |
279  bb.0:
280    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
281
282    ; GFX6-LABEL: name: store_global_v2s32
283    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
284    ; GFX6: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
285    ; GFX6: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
286    ; GFX6: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
287    ; GFX6: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
288    ; GFX6: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
289    ; GFX6: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
290    ; GFX6: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
291    ; GFX6: BUFFER_STORE_DWORDX2_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, 0, implicit $exec :: (store (<2 x s32>), addrspace 1)
292    ; GFX7-LABEL: name: store_global_v2s32
293    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
294    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
295    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
296    ; GFX7: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
297    ; GFX7: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
298    ; GFX7: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
299    ; GFX7: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
300    ; GFX7: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
301    ; GFX7: BUFFER_STORE_DWORDX2_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, 0, implicit $exec :: (store (<2 x s32>), addrspace 1)
302    ; GFX7-FLAT-LABEL: name: store_global_v2s32
303    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
304    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
305    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
306    ; GFX7-FLAT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s32>), addrspace 1)
307    ; GFX8-LABEL: name: store_global_v2s32
308    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
309    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
310    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
311    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s32>), addrspace 1)
312    ; GFX9-LABEL: name: store_global_v2s32
313    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
314    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
315    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
316    ; GFX9: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<2 x s32>), addrspace 1)
317    ; GFX10-LABEL: name: store_global_v2s32
318    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
319    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
320    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
321    ; GFX10: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<2 x s32>), addrspace 1)
322    %0:vgpr(p1) = COPY $vgpr0_vgpr1
323    %1:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
324    G_STORE %1, %0 :: (store (<2 x s32>), align 8, addrspace 1)
325
326...
327---
328
329name: store_global_v4s32
330legalized:       true
331tracksRegLiveness: true
332regBankSelected: true
333
334body: |
335  bb.0:
336    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
337
338    ; GFX6-LABEL: name: store_global_v4s32
339    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
340    ; GFX6: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
341    ; GFX6: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
342    ; GFX6: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
343    ; GFX6: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
344    ; GFX6: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
345    ; GFX6: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
346    ; GFX6: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
347    ; GFX6: BUFFER_STORE_DWORDX4_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, 0, implicit $exec :: (store (<4 x s32>), addrspace 1)
348    ; GFX7-LABEL: name: store_global_v4s32
349    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
350    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
351    ; GFX7: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
352    ; GFX7: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
353    ; GFX7: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
354    ; GFX7: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
355    ; GFX7: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
356    ; GFX7: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
357    ; GFX7: BUFFER_STORE_DWORDX4_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, 0, implicit $exec :: (store (<4 x s32>), addrspace 1)
358    ; GFX7-FLAT-LABEL: name: store_global_v4s32
359    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
360    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
361    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
362    ; GFX7-FLAT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s32>), addrspace 1)
363    ; GFX8-LABEL: name: store_global_v4s32
364    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
365    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
366    ; GFX8: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
367    ; GFX8: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s32>), addrspace 1)
368    ; GFX9-LABEL: name: store_global_v4s32
369    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
370    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
371    ; GFX9: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
372    ; GFX9: GLOBAL_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<4 x s32>), addrspace 1)
373    ; GFX10-LABEL: name: store_global_v4s32
374    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
375    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
376    ; GFX10: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
377    ; GFX10: GLOBAL_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<4 x s32>), addrspace 1)
378    %0:vgpr(p1) = COPY $vgpr0_vgpr1
379    %1:vgpr(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
380    G_STORE %1, %0 :: (store (<4 x s32>), align 16, addrspace 1)
381
382...
383
384---
385
386name: store_global_v2s16
387legalized:       true
388tracksRegLiveness: true
389regBankSelected: true
390
391body: |
392  bb.0:
393    liveins:  $vgpr0_vgpr1, $vgpr2
394
395    ; GFX6-LABEL: name: store_global_v2s16
396    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
397    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
398    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr2
399    ; GFX6: G_STORE [[COPY1]](<2 x s16>), [[COPY]](p1) :: (store (<2 x s16>), addrspace 1)
400    ; GFX7-LABEL: name: store_global_v2s16
401    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
402    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
403    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
404    ; GFX7: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>), addrspace 1)
405    ; GFX7-FLAT-LABEL: name: store_global_v2s16
406    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2
407    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
408    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
409    ; GFX7-FLAT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>), addrspace 1)
410    ; GFX8-LABEL: name: store_global_v2s16
411    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
412    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
413    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
414    ; GFX8: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>), addrspace 1)
415    ; GFX9-LABEL: name: store_global_v2s16
416    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
417    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
418    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
419    ; GFX9: GLOBAL_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<2 x s16>), addrspace 1)
420    ; GFX10-LABEL: name: store_global_v2s16
421    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
422    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
423    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
424    ; GFX10: GLOBAL_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<2 x s16>), addrspace 1)
425    %0:vgpr(p1) = COPY $vgpr0_vgpr1
426    %1:vgpr(<2 x s16>) = COPY $vgpr2
427    G_STORE %1, %0 :: (store (<2 x s16>), align 4, addrspace 1)
428
429...
430
431---
432
433name: store_global_v4s16
434legalized:       true
435tracksRegLiveness: true
436regBankSelected: true
437
438body: |
439  bb.0:
440    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
441
442    ; GFX6-LABEL: name: store_global_v4s16
443    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
444    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
445    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
446    ; GFX6: G_STORE [[COPY1]](<4 x s16>), [[COPY]](p1) :: (store (<4 x s16>), addrspace 1)
447    ; GFX7-LABEL: name: store_global_v4s16
448    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
449    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
450    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
451    ; GFX7: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>), addrspace 1)
452    ; GFX7-FLAT-LABEL: name: store_global_v4s16
453    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
454    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
455    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
456    ; GFX7-FLAT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>), addrspace 1)
457    ; GFX8-LABEL: name: store_global_v4s16
458    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
459    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
460    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
461    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>), addrspace 1)
462    ; GFX9-LABEL: name: store_global_v4s16
463    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
464    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
465    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
466    ; GFX9: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<4 x s16>), addrspace 1)
467    ; GFX10-LABEL: name: store_global_v4s16
468    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
469    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
470    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
471    ; GFX10: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<4 x s16>), addrspace 1)
472    %0:vgpr(p1) = COPY $vgpr0_vgpr1
473    %1:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
474    G_STORE %1, %0 :: (store (<4 x s16>), align 8, addrspace 1)
475
476...
477
478---
479
480name: store_global_v8s16
481legalized:       true
482tracksRegLiveness: true
483regBankSelected: true
484
485body: |
486  bb.0:
487    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
488
489    ; GFX6-LABEL: name: store_global_v8s16
490    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
491    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
492    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
493    ; GFX6: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store (<8 x s16>), addrspace 1)
494    ; GFX7-LABEL: name: store_global_v8s16
495    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
496    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
497    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
498    ; GFX7: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store (<8 x s16>), addrspace 1)
499    ; GFX7-FLAT-LABEL: name: store_global_v8s16
500    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
501    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
502    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
503    ; GFX7-FLAT: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store (<8 x s16>), addrspace 1)
504    ; GFX8-LABEL: name: store_global_v8s16
505    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
506    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
507    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
508    ; GFX8: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store (<8 x s16>), addrspace 1)
509    ; GFX9-LABEL: name: store_global_v8s16
510    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
511    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
512    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
513    ; GFX9: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store (<8 x s16>), addrspace 1)
514    ; GFX10-LABEL: name: store_global_v8s16
515    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
516    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
517    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
518    ; GFX10: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store (<8 x s16>), addrspace 1)
519    %0:vgpr(p1) = COPY $vgpr0_vgpr1
520    %1:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
521    G_STORE %1, %0 :: (store (<8 x s16>), align 16, addrspace 1)
522
523...
524
525---
526
527name: store_global_v2s64
528legalized:       true
529tracksRegLiveness: true
530regBankSelected: true
531
532body: |
533  bb.0:
534    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
535
536    ; GFX6-LABEL: name: store_global_v2s64
537    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
538    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
539    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
540    ; GFX6: G_STORE [[COPY1]](<2 x s64>), [[COPY]](p1) :: (store (<2 x s64>), addrspace 1)
541    ; GFX7-LABEL: name: store_global_v2s64
542    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
543    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
544    ; GFX7: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
545    ; GFX7: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>), addrspace 1)
546    ; GFX7-FLAT-LABEL: name: store_global_v2s64
547    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
548    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
549    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
550    ; GFX7-FLAT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>), addrspace 1)
551    ; GFX8-LABEL: name: store_global_v2s64
552    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
553    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
554    ; GFX8: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
555    ; GFX8: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>), addrspace 1)
556    ; GFX9-LABEL: name: store_global_v2s64
557    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
558    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
559    ; GFX9: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
560    ; GFX9: GLOBAL_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<2 x s64>), addrspace 1)
561    ; GFX10-LABEL: name: store_global_v2s64
562    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
563    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
564    ; GFX10: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
565    ; GFX10: GLOBAL_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<2 x s64>), addrspace 1)
566    %0:vgpr(p1) = COPY $vgpr0_vgpr1
567    %1:vgpr(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
568    G_STORE %1, %0 :: (store (<2 x s64>), align 16, addrspace 1)
569
570...
571
572---
573
574name: store_global_p1
575legalized:       true
576tracksRegLiveness: true
577regBankSelected: true
578
579body: |
580  bb.0:
581    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
582
583    ; GFX6-LABEL: name: store_global_p1
584    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
585    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
586    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(p1) = COPY $vgpr2_vgpr3
587    ; GFX6: G_STORE [[COPY1]](p1), [[COPY]](p1) :: (store (p1), addrspace 1)
588    ; GFX7-LABEL: name: store_global_p1
589    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
590    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
591    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
592    ; GFX7: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1), addrspace 1)
593    ; GFX7-FLAT-LABEL: name: store_global_p1
594    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
595    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
596    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
597    ; GFX7-FLAT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1), addrspace 1)
598    ; GFX8-LABEL: name: store_global_p1
599    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
600    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
601    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
602    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1), addrspace 1)
603    ; GFX9-LABEL: name: store_global_p1
604    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
605    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
606    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
607    ; GFX9: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (p1), addrspace 1)
608    ; GFX10-LABEL: name: store_global_p1
609    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
610    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
611    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
612    ; GFX10: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (p1), addrspace 1)
613    %0:vgpr(p1) = COPY $vgpr0_vgpr1
614    %1:vgpr(p1) = COPY $vgpr2_vgpr3
615    G_STORE %1, %0 :: (store (p1), align 8, addrspace 1)
616
617...
618
619---
620
621name: store_global_v2p1
622legalized:       true
623tracksRegLiveness: true
624regBankSelected: true
625
626body: |
627  bb.0:
628    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
629
630    ; GFX6-LABEL: name: store_global_v2p1
631    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
632    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
633    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
634    ; GFX6: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>), addrspace 1)
635    ; GFX7-LABEL: name: store_global_v2p1
636    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
637    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
638    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
639    ; GFX7: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>), addrspace 1)
640    ; GFX7-FLAT-LABEL: name: store_global_v2p1
641    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
642    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
643    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
644    ; GFX7-FLAT: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>), addrspace 1)
645    ; GFX8-LABEL: name: store_global_v2p1
646    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
647    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
648    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
649    ; GFX8: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>), addrspace 1)
650    ; GFX9-LABEL: name: store_global_v2p1
651    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
652    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
653    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
654    ; GFX9: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>), addrspace 1)
655    ; GFX10-LABEL: name: store_global_v2p1
656    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
657    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
658    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
659    ; GFX10: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>), addrspace 1)
660    %0:vgpr(p1) = COPY $vgpr0_vgpr1
661    %1:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
662    G_STORE %1, %0 :: (store (<2 x p1>), align 16, addrspace 1)
663
664...
665
666---
667
668name: store_global_p3
669legalized:       true
670tracksRegLiveness: true
671regBankSelected: true
672
673body: |
674  bb.0:
675    liveins:  $vgpr0_vgpr1, $vgpr2
676
677    ; GFX6-LABEL: name: store_global_p3
678    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
679    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
680    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr2
681    ; GFX6: G_STORE [[COPY1]](p3), [[COPY]](p1) :: (store (p3), addrspace 1)
682    ; GFX7-LABEL: name: store_global_p3
683    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
684    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
685    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
686    ; GFX7: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3), addrspace 1)
687    ; GFX7-FLAT-LABEL: name: store_global_p3
688    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2
689    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
690    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
691    ; GFX7-FLAT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3), addrspace 1)
692    ; GFX8-LABEL: name: store_global_p3
693    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
694    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
695    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
696    ; GFX8: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3), addrspace 1)
697    ; GFX9-LABEL: name: store_global_p3
698    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
699    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
700    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
701    ; GFX9: GLOBAL_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (p3), addrspace 1)
702    ; GFX10-LABEL: name: store_global_p3
703    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
704    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
705    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
706    ; GFX10: GLOBAL_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (p3), addrspace 1)
707    %0:vgpr(p1) = COPY $vgpr0_vgpr1
708    %1:vgpr(p3) = COPY $vgpr2
709    G_STORE %1, %0 :: (store (p3), align 4, addrspace 1)
710
711...
712
713---
714
715name: store_global_v2p3
716legalized:       true
717tracksRegLiveness: true
718regBankSelected: true
719
720body: |
721  bb.0:
722    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
723
724    ; GFX6-LABEL: name: store_global_v2p3
725    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
726    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
727    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
728    ; GFX6: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>), addrspace 1)
729    ; GFX7-LABEL: name: store_global_v2p3
730    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
731    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
732    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
733    ; GFX7: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>), addrspace 1)
734    ; GFX7-FLAT-LABEL: name: store_global_v2p3
735    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
736    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
737    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
738    ; GFX7-FLAT: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>), addrspace 1)
739    ; GFX8-LABEL: name: store_global_v2p3
740    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
741    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
742    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
743    ; GFX8: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>), addrspace 1)
744    ; GFX9-LABEL: name: store_global_v2p3
745    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
746    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
747    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
748    ; GFX9: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>), addrspace 1)
749    ; GFX10-LABEL: name: store_global_v2p3
750    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
751    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
752    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
753    ; GFX10: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>), addrspace 1)
754    %0:vgpr(p1) = COPY $vgpr0_vgpr1
755    %1:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
756    G_STORE %1, %0 :: (store (<2 x p3>), align 8, addrspace 1)
757
758...
759---
760
761name: store_atomic_global_s32
762legalized:       true
763tracksRegLiveness: true
764regBankSelected: true
765
766body: |
767  bb.0:
768    liveins:  $vgpr0_vgpr1, $vgpr2
769
770    ; GFX6-LABEL: name: store_atomic_global_s32
771    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
772    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
773    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
774    ; GFX6: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store monotonic (s32), addrspace 1)
775    ; GFX7-LABEL: name: store_atomic_global_s32
776    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
777    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
778    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
779    ; GFX7: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32), addrspace 1)
780    ; GFX7-FLAT-LABEL: name: store_atomic_global_s32
781    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2
782    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
783    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
784    ; GFX7-FLAT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32), addrspace 1)
785    ; GFX8-LABEL: name: store_atomic_global_s32
786    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
787    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
788    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
789    ; GFX8: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32), addrspace 1)
790    ; GFX9-LABEL: name: store_atomic_global_s32
791    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
792    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
793    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
794    ; GFX9: GLOBAL_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store monotonic (s32), addrspace 1)
795    ; GFX10-LABEL: name: store_atomic_global_s32
796    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
797    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
798    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
799    ; GFX10: GLOBAL_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store monotonic (s32), addrspace 1)
800    %0:vgpr(p1) = COPY $vgpr0_vgpr1
801    %1:vgpr(s32) = COPY $vgpr2
802    G_STORE %1, %0 :: (store monotonic (s32), align 4, addrspace 1)
803
804...
805
806---
807
808name: store_atomic_global_s64
809legalized:       true
810tracksRegLiveness: true
811regBankSelected: true
812
813body: |
814  bb.0:
815    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
816
817    ; GFX6-LABEL: name: store_atomic_global_s64
818    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
819    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
820    ; GFX6: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
821    ; GFX6: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store monotonic (s64), addrspace 1)
822    ; GFX7-LABEL: name: store_atomic_global_s64
823    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
824    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
825    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
826    ; GFX7: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64), addrspace 1)
827    ; GFX7-FLAT-LABEL: name: store_atomic_global_s64
828    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
829    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
830    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
831    ; GFX7-FLAT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64), addrspace 1)
832    ; GFX8-LABEL: name: store_atomic_global_s64
833    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
834    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
835    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
836    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64), addrspace 1)
837    ; GFX9-LABEL: name: store_atomic_global_s64
838    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
839    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
840    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
841    ; GFX9: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store monotonic (s64), addrspace 1)
842    ; GFX10-LABEL: name: store_atomic_global_s64
843    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
844    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
845    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
846    ; GFX10: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store monotonic (s64), addrspace 1)
847    %0:vgpr(p1) = COPY $vgpr0_vgpr1
848    %1:vgpr(s64) = COPY $vgpr2_vgpr3
849    G_STORE %1, %0 :: (store monotonic (s64), align 8, addrspace 1)
850
851...
852
853---
854
855name: store_global_s32_gep_2047
856legalized:       true
857tracksRegLiveness: true
858regBankSelected: true
859
860body: |
861  bb.0:
862    liveins:  $vgpr0_vgpr1, $vgpr2
863
864    ; GFX6-LABEL: name: store_global_s32_gep_2047
865    ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
866    ; GFX6: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
867    ; GFX6: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
868    ; GFX6: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
869    ; GFX6: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
870    ; GFX6: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
871    ; GFX6: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
872    ; GFX6: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
873    ; GFX6: BUFFER_STORE_DWORD_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 2047, 0, 0, 0, implicit $exec :: (store (s32), addrspace 1)
874    ; GFX7-LABEL: name: store_global_s32_gep_2047
875    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
876    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
877    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
878    ; GFX7: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
879    ; GFX7: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
880    ; GFX7: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
881    ; GFX7: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
882    ; GFX7: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
883    ; GFX7: BUFFER_STORE_DWORD_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 2047, 0, 0, 0, implicit $exec :: (store (s32), addrspace 1)
884    ; GFX7-FLAT-LABEL: name: store_global_s32_gep_2047
885    ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2
886    ; GFX7-FLAT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
887    ; GFX7-FLAT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
888    ; GFX7-FLAT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
889    ; GFX7-FLAT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
890    ; GFX7-FLAT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, [[V_MOV_B32_e32_1]], %subreg.sub1
891    ; GFX7-FLAT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
892    ; GFX7-FLAT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
893    ; GFX7-FLAT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
894    ; GFX7-FLAT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
895    ; GFX7-FLAT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
896    ; GFX7-FLAT: %9:vgpr_32, dead %11:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
897    ; GFX7-FLAT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, %9, %subreg.sub1
898    ; GFX7-FLAT: FLAT_STORE_DWORD [[REG_SEQUENCE1]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
899    ; GFX8-LABEL: name: store_global_s32_gep_2047
900    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
901    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
902    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
903    ; GFX8: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
904    ; GFX8: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
905    ; GFX8: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, [[V_MOV_B32_e32_1]], %subreg.sub1
906    ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
907    ; GFX8: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
908    ; GFX8: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
909    ; GFX8: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
910    ; GFX8: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
911    ; GFX8: %9:vgpr_32, dead %11:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
912    ; GFX8: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, %9, %subreg.sub1
913    ; GFX8: FLAT_STORE_DWORD [[REG_SEQUENCE1]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
914    ; GFX9-LABEL: name: store_global_s32_gep_2047
915    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
916    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
917    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
918    ; GFX9: GLOBAL_STORE_DWORD [[COPY]], [[COPY1]], 2047, 0, implicit $exec :: (store (s32), addrspace 1)
919    ; GFX10-LABEL: name: store_global_s32_gep_2047
920    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
921    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
922    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
923    ; GFX10: GLOBAL_STORE_DWORD [[COPY]], [[COPY1]], 2047, 0, implicit $exec :: (store (s32), addrspace 1)
924    %0:vgpr(p1) = COPY $vgpr0_vgpr1
925    %1:vgpr(s32) = COPY $vgpr2
926    %2:vgpr(s64) = G_CONSTANT i64 2047
927    %3:vgpr(p1) = G_PTR_ADD %0, %2
928    G_STORE %1, %3 :: (store (s32), align 4, addrspace 1)
929
930...
931