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