1# RUN: llc -march=amdgcn -mcpu=gfx90a -start-before=greedy,0 -stop-after=virtregrewriter,1 -verify-machineinstrs -o - %s | FileCheck --check-prefixes=GCN,GFX90A %s
2# Using the unaligned vector tuples are OK as long as they aren't used
3# in a real instruction.
4
5---
6# GCN-LABEL: name: alloc_vgpr_64
7# GFX90A: $vgpr4_vgpr5 = GLOBAL_LOAD
8name:            alloc_vgpr_64
9tracksRegLiveness: true
10liveins:
11  - { reg: '$vgpr0_vgpr1' }
12  - { reg: '$vgpr2' }
13body:             |
14  bb.0:
15    liveins: $vgpr0_vgpr1, $vgpr2
16
17    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
18    %1:vgpr_32 = COPY $vgpr2
19    %2:vreg_64_align2 = GLOBAL_LOAD_DWORDX2 %0, 0, 0, implicit $exec
20    GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec
21    GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
22...
23
24---
25# GCN-LABEL: name: alloc_vgpr_96
26# GFX90A: $vgpr4_vgpr5_vgpr6 = GLOBAL_LOAD
27name:            alloc_vgpr_96
28tracksRegLiveness: true
29liveins:
30  - { reg: '$vgpr0_vgpr1' }
31  - { reg: '$vgpr2' }
32body:             |
33  bb.0:
34    liveins: $vgpr0_vgpr1, $vgpr2
35
36    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
37    %1:vgpr_32 = COPY $vgpr2
38    %2:vreg_96_align2 = GLOBAL_LOAD_DWORDX3 %0, 0, 0, implicit $exec
39    GLOBAL_STORE_DWORDX3 %0, %2, 0, 0, implicit $exec
40    GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
41...
42
43---
44# GCN-LABEL: name: alloc_vgpr_128
45# GFX90A: $vgpr4_vgpr5_vgpr6_vgpr7 = GLOBAL_LOAD
46name:            alloc_vgpr_128
47tracksRegLiveness: true
48liveins:
49  - { reg: '$vgpr0_vgpr1' }
50  - { reg: '$vgpr2' }
51body:             |
52  bb.0:
53    liveins: $vgpr0_vgpr1, $vgpr2
54
55    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
56    %1:vgpr_32 = COPY $vgpr2
57    %2:vreg_128_align2 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec
58    GLOBAL_STORE_DWORDX4 %0, %2, 0, 0, implicit $exec
59    GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
60...
61
62---
63# GCN-LABEL: name: alloc_vgpr_160
64# GFX90A: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8 = IMAGE_LOAD
65name:            alloc_vgpr_160
66tracksRegLiveness: true
67liveins:
68  - { reg: '$vgpr0_vgpr1' }
69  - { reg: '$vgpr2' }
70body:             |
71  bb.0:
72    liveins: $vgpr0_vgpr1, $vgpr2
73
74    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
75    %1:vgpr_32 = COPY $vgpr2
76    %2:vreg_160_align2 = IMAGE_LOAD_V5_V1 %0.sub0, undef %3:sgpr_256, 0, 0, 0, 0, 0, 1, 0, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)
77    GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec
78    GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
79...
80
81---
82# GCN-LABEL: name: alloc_vgpr_256
83# GFX90A: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11 = COPY
84name:            alloc_vgpr_256
85tracksRegLiveness: true
86liveins:
87  - { reg: '$vgpr0_vgpr1' }
88  - { reg: '$vgpr2' }
89body:             |
90  bb.0:
91    liveins: $vgpr0_vgpr1, $vgpr2
92
93    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
94    %1:vgpr_32 = COPY $vgpr2
95    %3:sgpr_256 = IMPLICIT_DEF
96    %2:vreg_256_align2 = COPY %3:sgpr_256
97    %4:vreg_128_align2 = IMAGE_SAMPLE_C_CL_O_V4_V8 %2, %3:sgpr_256, undef %5:sgpr_128, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)
98    GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec
99    GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
100...
101
102---
103# GCN-LABEL: name: alloc_vgpr_512
104# GFX90A: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19 = IMPLICIT_DEF
105name:            alloc_vgpr_512
106tracksRegLiveness: true
107liveins:
108  - { reg: '$vgpr0_vgpr1' }
109  - { reg: '$vgpr2' }
110body:             |
111  bb.0:
112    liveins: $vgpr0_vgpr1, $vgpr2
113
114    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
115    %1:vgpr_32 = COPY $vgpr2
116    %2:vreg_512_align2 = IMPLICIT_DEF
117    GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec
118    GLOBAL_STORE_DWORDX4 %0, %2.sub4_sub5_sub6_sub7, 0, 0, implicit $exec
119    GLOBAL_STORE_DWORDX4 %0, %2.sub8_sub9_sub10_sub11, 0, 0, implicit $exec
120    GLOBAL_STORE_DWORDX4 %0, %2.sub12_sub13_sub14_sub15, 0, 0, implicit $exec
121    GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
122...
123
124---
125# GCN-LABEL: name: alloc_vgpr_1024
126# GFX90A: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31_vgpr32_vgpr33_vgpr34_vgpr35 = IMPLICIT_DEF
127name:            alloc_vgpr_1024
128tracksRegLiveness: true
129liveins:
130  - { reg: '$vgpr0_vgpr1' }
131  - { reg: '$vgpr2' }
132body:             |
133  bb.0:
134    liveins: $vgpr0_vgpr1, $vgpr2
135
136    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
137    %1:vgpr_32 = COPY $vgpr2
138    %2:vreg_1024_align2 = IMPLICIT_DEF
139    GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec
140    GLOBAL_STORE_DWORDX4 %0, %2.sub4_sub5_sub6_sub7, 0, 0, implicit $exec
141    GLOBAL_STORE_DWORDX4 %0, %2.sub8_sub9_sub10_sub11, 0, 0, implicit $exec
142    GLOBAL_STORE_DWORDX4 %0, %2.sub12_sub13_sub14_sub15, 0, 0, implicit $exec
143    GLOBAL_STORE_DWORDX4 %0, %2.sub16_sub17_sub18_sub19, 0, 0, implicit $exec
144    GLOBAL_STORE_DWORDX4 %0, %2.sub20_sub21_sub22_sub23, 0, 0, implicit $exec
145    GLOBAL_STORE_DWORDX4 %0, %2.sub24_sub25_sub26_sub27, 0, 0, implicit $exec
146    GLOBAL_STORE_DWORDX4 %0, %2.sub28_sub29_sub30_sub31, 0, 0, implicit $exec
147    GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
148...
149
150---
151# GCN-LABEL: name: alloc_agpr_64
152# GFX90A: $agpr1_agpr2 = IMPLICIT_DEF
153name:            alloc_agpr_64
154tracksRegLiveness: true
155liveins:
156  - { reg: '$vgpr0_vgpr1' }
157  - { reg: '$agpr0' }
158body:             |
159  bb.0:
160    liveins: $vgpr0_vgpr1, $agpr0
161
162    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
163    %3:areg_64 = IMPLICIT_DEF
164    %2:vreg_64_align2 = COPY %3:areg_64
165    GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec
166    %1:vgpr_32 = COPY $agpr0
167    GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
168...
169
170---
171# GCN-LABEL: name: alloc_agpr_128
172# GFX90A: $agpr1_agpr2_agpr3_agpr4 = IMPLICIT_DEF
173name:            alloc_agpr_128
174tracksRegLiveness: true
175liveins:
176  - { reg: '$vgpr0_vgpr1' }
177  - { reg: '$agpr0' }
178body:             |
179  bb.0:
180    liveins: $vgpr0_vgpr1, $agpr0
181
182    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
183    %3:areg_128 = IMPLICIT_DEF
184    %2:vreg_128_align2 = COPY %3:areg_128
185    GLOBAL_STORE_DWORDX4 %0, %2, 0, 0, implicit $exec
186    %1:vgpr_32 = COPY $agpr0
187    GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
188...
189
190---
191# GCN-LABEL: name: alloc_agpr_512
192# GFX90A: $agpr1_agpr2_agpr3_agpr4_agpr5_agpr6_agpr7_agpr8_agpr9_agpr10_agpr11_agpr12_agpr13_agpr14_agpr15_agpr16 = IMPLICIT_DEF
193name:            alloc_agpr_512
194tracksRegLiveness: true
195liveins:
196  - { reg: '$vgpr0_vgpr1' }
197  - { reg: '$agpr0' }
198body:             |
199  bb.0:
200    liveins: $vgpr0_vgpr1, $agpr0
201
202    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
203    %3:areg_512 = IMPLICIT_DEF
204    %2:vreg_512_align2 = COPY %3:areg_512
205    GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec
206    GLOBAL_STORE_DWORDX4 %0, %2.sub4_sub5_sub6_sub7, 0, 0, implicit $exec
207    GLOBAL_STORE_DWORDX4 %0, %2.sub8_sub9_sub10_sub11, 0, 0, implicit $exec
208    GLOBAL_STORE_DWORDX4 %0, %2.sub12_sub13_sub14_sub15, 0, 0, implicit $exec
209    %1:vgpr_32 = COPY $agpr0
210    GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
211...
212
213---
214# GCN-LABEL: name: alloc_agpr_1024
215# GFX90A: $agpr1_agpr2_agpr3_agpr4_agpr5_agpr6_agpr7_agpr8_agpr9_agpr10_agpr11_agpr12_agpr13_agpr14_agpr15_agpr16_agpr17_agpr18_agpr19_agpr20_agpr21_agpr22_agpr23_agpr24_agpr25_agpr26_agpr27_agpr28_agpr29_agpr30_agpr31_agpr32 = IMPLICIT_DEF
216name:            alloc_agpr_1024
217tracksRegLiveness: true
218liveins:
219  - { reg: '$vgpr0_vgpr1' }
220  - { reg: '$agpr0' }
221body:             |
222  bb.0:
223    liveins: $vgpr0_vgpr1, $agpr0
224
225    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
226    %3:areg_1024 = IMPLICIT_DEF
227    %2:vreg_1024_align2 = COPY %3:areg_1024
228    GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec
229    GLOBAL_STORE_DWORDX4 %0, %2.sub4_sub5_sub6_sub7, 0, 0, implicit $exec
230    GLOBAL_STORE_DWORDX4 %0, %2.sub8_sub9_sub10_sub11, 0, 0, implicit $exec
231    GLOBAL_STORE_DWORDX4 %0, %2.sub12_sub13_sub14_sub15, 0, 0, implicit $exec
232    GLOBAL_STORE_DWORDX4 %0, %2.sub16_sub17_sub18_sub19, 0, 0, implicit $exec
233    GLOBAL_STORE_DWORDX4 %0, %2.sub20_sub21_sub22_sub23, 0, 0, implicit $exec
234    GLOBAL_STORE_DWORDX4 %0, %2.sub24_sub25_sub26_sub27, 0, 0, implicit $exec
235    GLOBAL_STORE_DWORDX4 %0, %2.sub28_sub29_sub30_sub31, 0, 0, implicit $exec
236    %1:vgpr_32 = COPY $agpr0
237    GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
238...
239