blob: f2a88b6b73792d5bfdbe61b35b4600910000ec11 [file] [log] [blame]
Matt Arsenaulta41351e2017-11-17 21:35:32 +00001# RUN: llc -march=amdgcn -mcpu=carrizo -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefixes=GCN,XNACK %s
2# RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefixes=GCN,NOXNACK %s
3---
4# Trivial clause at beginning of program
5name: trivial_clause_load_flat4_x1
6
7body: |
8 bb.0:
9 ; GCN-LABEL: name: trivial_clause_load_flat4_x1
Puyan Lotfi43e94b12018-01-31 22:04:26 +000010 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000011 ; GCN-NEXT: S_ENDPGM
12
Puyan Lotfi43e94b12018-01-31 22:04:26 +000013 $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000014 S_ENDPGM
15...
16---
17# Trivial clause at beginning of program
18name: trivial_clause_load_flat4_x2
19
20body: |
21 bb.0:
22 ; GCN-LABEL: name: trivial_clause_load_flat4_x2
Puyan Lotfi43e94b12018-01-31 22:04:26 +000023 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
24 ; GCN-NEXT: $vgpr1 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000025 ; GCN-NEXT: S_ENDPGM
26
Puyan Lotfi43e94b12018-01-31 22:04:26 +000027 $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
28 $vgpr1 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000029 S_ENDPGM
30...
31---
32# Trivial clause at beginning of program
33name: trivial_clause_load_flat4_x3
34
35body: |
36 bb.0:
37 ; GCN-LABEL: name: trivial_clause_load_flat4_x3
Puyan Lotfi43e94b12018-01-31 22:04:26 +000038 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr3_vgpr4, 0, 0, 0, implicit $exec, implicit $flat_scr
39 ; GCN-NEXT: $vgpr1 = FLAT_LOAD_DWORD $vgpr5_vgpr6, 0, 0, 0, implicit $exec, implicit $flat_scr
40 ; GCN-NEXT: $vgpr2 = FLAT_LOAD_DWORD $vgpr7_vgpr8, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000041 ; GCN-NEXT: S_ENDPGM
42
Puyan Lotfi43e94b12018-01-31 22:04:26 +000043 $vgpr0 = FLAT_LOAD_DWORD $vgpr3_vgpr4, 0, 0, 0, implicit $exec, implicit $flat_scr
44 $vgpr1 = FLAT_LOAD_DWORD $vgpr5_vgpr6, 0, 0, 0, implicit $exec, implicit $flat_scr
45 $vgpr2 = FLAT_LOAD_DWORD $vgpr7_vgpr8, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000046 S_ENDPGM
47...
48---
49# Trivial clause at beginning of program
50name: trivial_clause_load_flat4_x4
51
52body: |
53 bb.0:
54 ; GCN-LABEL: name: trivial_clause_load_flat4_x4
Puyan Lotfi43e94b12018-01-31 22:04:26 +000055 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
56 ; GCN-NEXT: $vgpr1 = FLAT_LOAD_DWORD $vgpr6_vgpr7, 0, 0, 0, implicit $exec, implicit $flat_scr
57 ; GCN-NEXT: $vgpr2 = FLAT_LOAD_DWORD $vgpr8_vgpr9, 0, 0, 0, implicit $exec, implicit $flat_scr
58 ; GCN-NEXT: $vgpr3 = FLAT_LOAD_DWORD $vgpr10_vgpr11, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000059 ; GCN-NEXT: S_ENDPGM
60
Puyan Lotfi43e94b12018-01-31 22:04:26 +000061 $vgpr0 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
62 $vgpr1 = FLAT_LOAD_DWORD $vgpr6_vgpr7, 0, 0, 0, implicit $exec, implicit $flat_scr
63 $vgpr2 = FLAT_LOAD_DWORD $vgpr8_vgpr9, 0, 0, 0, implicit $exec, implicit $flat_scr
64 $vgpr3 = FLAT_LOAD_DWORD $vgpr10_vgpr11, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000065 S_ENDPGM
66...
67---
68# Reuse of same input pointer is OK
69
70name: trivial_clause_load_flat4_x2_sameptr
71body: |
72 bb.0:
73 ; GCN-LABEL: name: trivial_clause_load_flat4_x2_sameptr
Puyan Lotfi43e94b12018-01-31 22:04:26 +000074 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
75 ; GCN-NEXT: $vgpr1 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000076 ; GCN-NEXT: S_ENDPGM
77
Puyan Lotfi43e94b12018-01-31 22:04:26 +000078 $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
79 $vgpr1 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000080 S_ENDPGM
81...
82---
83# 32-bit load partially clobbers its own ptr reg
84name: flat_load4_overwrite_ptr_lo
85
86body: |
87 bb.0:
88 ; GCN-LABEL: name: flat_load4_overwrite_ptr_lo
Puyan Lotfi43e94b12018-01-31 22:04:26 +000089 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000090 ; GCN-NEXT: S_ENDPGM
91
Puyan Lotfi43e94b12018-01-31 22:04:26 +000092 $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +000093 S_ENDPGM
94...
95---
96# 32-bit load partially clobbers its own ptr reg
97name: flat_load4_overwrite_ptr_hi
98
99body: |
100 bb.0:
101 ; GCN-LABEL: name: flat_load4_overwrite_ptr_hi
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000102 ; GCN: $vgpr1 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000103 ; GCN-NEXT: S_ENDPGM
104
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000105 $vgpr1 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000106 S_ENDPGM
107...
108---
109# 64-bit load clobbers its own ptr reg
110name: flat_load8_overwrite_ptr
111
112body: |
113 bb.0:
114 ; GCN-LABEL: name: flat_load8_overwrite_ptr
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000115 ; GCN: $vgpr2_vgpr3 = FLAT_LOAD_DWORDX2 $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000116 ; GCN-NEXT: S_ENDPGM
117
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000118 $vgpr2_vgpr3 = FLAT_LOAD_DWORDX2 $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000119 S_ENDPGM
120...
121---
122# vmcnt has 4 bits, so maximum 16 outstanding loads. The waitcnt
123# breaks the clause.
124
125
126name: break_clause_at_max_clause_size_flat_load4
127
128body: |
129 bb.0:
130 ; GCN-LABEL: name: break_clause_at_max_clause_size_flat_load4
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000131 ; GCN: $vgpr2 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
132 ; GCN-NEXT: $vgpr3 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
133 ; GCN-NEXT: $vgpr4 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
134 ; GCN-NEXT: $vgpr5 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
135 ; GCN-NEXT: $vgpr6 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
136 ; GCN-NEXT: $vgpr7 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
137 ; GCN-NEXT: $vgpr8 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
138 ; GCN-NEXT: $vgpr9 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
139 ; GCN-NEXT: $vgpr10 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
140 ; GCN-NEXT: $vgpr11 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
141 ; GCN-NEXT: $vgpr12 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
142 ; GCN-NEXT: $vgpr13 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
143 ; GCN-NEXT: $vgpr14 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
144 ; GCN-NEXT: $vgpr15 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
145 ; GCN-NEXT: $vgpr16 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
146 ; GCN-NEXT: $vgpr17 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000147 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000148 ; GCN-NEXT: $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
149 ; GCN-NEXT: $sgpr0 = S_MOV_B32 $sgpr0, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr7, implicit $vgpr8, implicit $vgpr9, implicit $vgpr10, implicit $vgpr11, implicit $vgpr12, implicit $vgpr13, implicit $vgpr14, implicit $vgpr15, implicit $vgpr16, implicit $vgpr17, implicit $vgpr18
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000150 ; GCN-NEXT: S_ENDPGM
151
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000152 $vgpr2 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
153 $vgpr3 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
154 $vgpr4 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
155 $vgpr5 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000156
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000157 $vgpr6 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
158 $vgpr7 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
159 $vgpr8 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
160 $vgpr9 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000161
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000162 $vgpr10 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
163 $vgpr11 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
164 $vgpr12 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
165 $vgpr13 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000166
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000167 $vgpr14 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
168 $vgpr15 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
169 $vgpr16 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
170 $vgpr17 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000171
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000172 $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
173 $sgpr0 = S_MOV_B32 $sgpr0, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr7, implicit $vgpr8, implicit $vgpr9, implicit $vgpr10, implicit $vgpr11, implicit $vgpr12, implicit $vgpr13, implicit $vgpr14, implicit $vgpr15, implicit $vgpr16, implicit $vgpr17, implicit $vgpr18
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000174 S_ENDPGM
175...
176---
177
178name: break_clause_simple_load_flat4_lo_ptr
179
180body: |
181 bb.0:
182 ; GCN-LABEL: name: break_clause_simple_load_flat4_lo_ptr
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000183 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000184 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000185 ; GCN-NEXT: $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000186 ; GCN-NEXT: S_ENDPGM
187
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000188 $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
189 $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000190 S_ENDPGM
191...
192---
193
194name: break_clause_simple_load_flat4_hi_ptr
195
196body: |
197 bb.0:
198 ; GCN-LABEL: name: break_clause_simple_load_flat4_hi_ptr
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000199 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000200 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000201 ; GCN-NEXT: $vgpr3 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000202 ; GCN-NEXT: S_ENDPGM
203
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000204 $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
205 $vgpr3 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000206 S_ENDPGM
207...
208---
209
210name: break_clause_simple_load_flat8_ptr
211
212body: |
213 bb.0:
214 ; GCN-LABEL: name: break_clause_simple_load_flat8_ptr
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000215 ; GCN: $vgpr0_vgpr1 = FLAT_LOAD_DWORDX2 $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000216 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000217 ; GCN-NEXT: $vgpr2_vgpr3 = FLAT_LOAD_DWORDX2 $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000218 ; GCN-NEXT: S_ENDPGM
219
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000220 $vgpr0_vgpr1 = FLAT_LOAD_DWORDX2 $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
221 $vgpr2_vgpr3 = FLAT_LOAD_DWORDX2 $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000222 S_ENDPGM
223...
224---
225
226
227name: break_clause_simple_load_flat16_ptr
228
229body: |
230 bb.0:
231 ; GCN-LABEL: name: break_clause_simple_load_flat16_ptr
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000232 ; GCN: $vgpr0_vgpr1 = FLAT_LOAD_DWORDX2 $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000233 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000234 ; GCN-NEXT: $vgpr2_vgpr3_vgpr4_vgpr5 = FLAT_LOAD_DWORDX4 $vgpr6_vgpr7, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000235 ; GCN-NEXT: S_ENDPGM
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000236 $vgpr0_vgpr1 = FLAT_LOAD_DWORDX2 $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
237 $vgpr2_vgpr3_vgpr4_vgpr5 = FLAT_LOAD_DWORDX4 $vgpr6_vgpr7, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000238 S_ENDPGM
239...
240---
241
242# The clause is broken by the waitcnt inserted at the end of the
243# block, so no nop is needed.
244
245
246name: break_clause_block_boundary_load_flat8_ptr
247
248body: |
249 ; GCN-LABEL: name: break_clause_block_boundary_load_flat8_ptr
250 ; GCN: bb.0:
251 ; GCN-NEXT: successors: %bb.1(0x80000000)
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000252 ; GCN: $vgpr0_vgpr1 = FLAT_LOAD_DWORDX2 $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000253 ; GCN: bb.1:
254 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000255 ; GCN-NEXT: $vgpr2_vgpr3 = FLAT_LOAD_DWORDX2 $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000256 ; GCN-NEXT: S_ENDPGM
257
258 bb.0:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000259 $vgpr0_vgpr1 = FLAT_LOAD_DWORDX2 $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000260
261 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000262 $vgpr2_vgpr3 = FLAT_LOAD_DWORDX2 $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000263 S_ENDPGM
264...
265---
266# The load clobbers the pointer of the store, so it needs to break.
267
268name: break_clause_store_load_into_ptr_flat4
269
270body: |
271 bb.0:
272 ; GCN-LABEL: name: break_clause_store_load_into_ptr_flat4
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000273 ; GCN: FLAT_STORE_DWORD $vgpr2_vgpr3, $vgpr0, 0, 0, 0, implicit $exec, implicit $flat_scr
274 ; GCN-NEXT: $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000275 ; GCN-NEXT: S_ENDPGM
276
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000277 FLAT_STORE_DWORD $vgpr2_vgpr3, $vgpr0, 0, 0, 0, implicit $exec, implicit $flat_scr
278 $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000279 S_ENDPGM
280...
281---
282# The load clobbers the data of the store, so it needs to break.
283# FIXME: Would it be better to s_nop and wait later?
284
285name: break_clause_store_load_into_data_flat4
286
287body: |
288 bb.0:
289 ; GCN-LABEL: name: break_clause_store_load_into_data_flat4
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000290 ; GCN: FLAT_STORE_DWORD $vgpr2_vgpr3, $vgpr0, 0, 0, 0, implicit $exec, implicit $flat_scr
291 ; GCN-NEXT: $vgpr0 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000292 ; GCN-NEXT: S_ENDPGM
293
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000294 FLAT_STORE_DWORD $vgpr2_vgpr3, $vgpr0, 0, 0, 0, implicit $exec, implicit $flat_scr
295 $vgpr0 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000296 S_ENDPGM
297...
298---
299# Regular VALU instruction breaks clause, no nop needed
300
301name: valu_inst_breaks_clause
302
303body: |
304 bb.0:
305 ; GCN-LABEL: name: valu_inst_breaks_clause
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000306 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
307 ; GCN-NEXT: $vgpr8 = V_MOV_B32_e32 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000308 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000309 ; GCN-NEXT: $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000310 ; GCN-NEXT: S_ENDPGM
311
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000312 $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
313 $vgpr8 = V_MOV_B32_e32 0, implicit $exec
314 $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000315 S_ENDPGM
316...
317---
318# Regular SALU instruction breaks clause, no nop needed
319
320name: salu_inst_breaks_clause
321
322body: |
323 bb.0:
324 ; GCN-LABEL: name: salu_inst_breaks_clause
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000325 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
326 ; GCN-NEXT: $sgpr8 = S_MOV_B32 0
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000327 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000328 ; GCN-NEXT: $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000329 ; GCN-NEXT: S_ENDPGM
330
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000331 $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
332 $sgpr8 = S_MOV_B32 0
333 $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000334 S_ENDPGM
335...
336---
337
338name: ds_inst_breaks_clause
339
340body: |
341 bb.0:
342 ; GCN-LABEL: name: ds_inst_breaks_clause
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000343 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
344 ; GCN-NEXT: $vgpr8 = DS_READ_B32 $vgpr9, 0, 0, implicit $m0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000345 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000346 ; GCN-NEXT: $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000347 ; GCN-NEXT: S_ENDPGM
348
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000349 $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
350 $vgpr8 = DS_READ_B32 $vgpr9, 0, 0, implicit $m0, implicit $exec
351 $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000352 S_ENDPGM
353...
354---
355
356name: smrd_inst_breaks_clause
357
358body: |
359 bb.0:
360 ; GCN-LABEL: name: smrd_inst_breaks_clause
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000361 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
362 ; GCN-NEXT: $sgpr8 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0
363 ; GCN-NEXT: $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000364 ; GCN-NEXT: S_ENDPGM
365
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000366 $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
367 $sgpr8 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0
368 $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000369 S_ENDPGM
370...
371---
372# FIXME: Should this be handled?
373name: implicit_use_breaks_clause
374
375body: |
376 bb.0:
377 ; GCN-LABEL: name: implicit_use_breaks_clause
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000378 ; GCN: $vgpr0_vgpr1 = FLAT_LOAD_DWORDX2 $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr, implicit $vgpr4_vgpr5
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000379 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000380 ; GCN-NEXT: $vgpr4_vgpr5 = FLAT_LOAD_DWORDX2 $vgpr6_vgpr7, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000381 ; GCN-NEXT: S_ENDPGM
382
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000383 $vgpr0_vgpr1 = FLAT_LOAD_DWORDX2 $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr, implicit $vgpr4_vgpr5
384 $vgpr4_vgpr5 = FLAT_LOAD_DWORDX2 $vgpr6_vgpr7, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000385 S_ENDPGM
386...
387---
388name: trivial_clause_load_mubuf4_x2
389
390body: |
391 bb.0:
392 ; GCN-LABEL: name: trivial_clause_load_mubuf4_x2
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000393 ; GCN: $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
394 ; GCN-NEXT: $vgpr3 = BUFFER_LOAD_DWORD_OFFEN $vgpr4, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000395 ; GCN-NEXT: S_ENDPGM
396
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000397 $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
398 $vgpr3 = BUFFER_LOAD_DWORD_OFFEN $vgpr4, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000399 S_ENDPGM
400...
401---
402name: break_clause_simple_load_mubuf_offen_ptr
403
404body: |
405 bb.0:
406 ; GCN-LABEL: name: break_clause_simple_load_mubuf_offen_ptr
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000407 ; GCN: $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000408 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000409 ; GCN-NEXT: $vgpr2 = BUFFER_LOAD_DWORD_OFFEN $vgpr3, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000410 ; GCN-NEXT: S_ENDPGM
411
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000412 $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
413 $vgpr2 = BUFFER_LOAD_DWORD_OFFEN $vgpr3, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000414 S_ENDPGM
415...
416---
417# BUFFER instructions overwriting their own inputs is supposedly OK.
418
419name: mubuf_load4_overwrite_ptr
420
421body: |
422 bb.0:
423 ; GCN-LABEL: name: mubuf_load4_overwrite_ptr
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000424 ; GCN: $vgpr0 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
425 ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
426 ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000427 ; GCN-NEXT: S_ENDPGM
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000428 $vgpr0 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
429 $vgpr1 = V_MOV_B32_e32 0, implicit $exec
430 $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000431 S_ENDPGM
432...
433---
434# Break a clause from interference between mubuf and flat instructions
435
436name: break_clause_flat_load_mubuf_load
437
438body: |
439 bb.0:
440 ; GCN-LABEL: name: break_clause_flat_load_mubuf_load
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000441 ; GCN: $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000442 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000443 ; GCN-NEXT: $vgpr2 = BUFFER_LOAD_DWORD_OFFEN $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000444 ; GCN-NEXT: S_ENDPGM
445
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000446 $vgpr0 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
447 $vgpr2 = BUFFER_LOAD_DWORD_OFFEN $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000448 S_ENDPGM
449...
450# Break a clause from interference between mubuf and flat instructions
451
452# GCN-LABEL: name: break_clause_mubuf_load_flat_load
453# GCN: bb.0:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000454# GCN-NEXT: $vgpr0 = BUFFER_LOAD_DWORD_OFFEN $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000455# XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000456# GCN-NEXT: $vgpr1 = FLAT_LOAD_DWORD $vgpr2_vgpr3
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000457# GCN-NEXT: S_ENDPGM
458name: break_clause_mubuf_load_flat_load
459
460body: |
461 bb.0:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000462 $vgpr0 = BUFFER_LOAD_DWORD_OFFEN $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
463 $vgpr1 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000464
465 S_ENDPGM
466...
467---
468
469name: break_clause_atomic_rtn_into_ptr_flat4
470
471body: |
472 bb.0:
473 ; GCN-LABEL: name: break_clause_atomic_rtn_into_ptr_flat4
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000474 ; GCN: $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000475 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000476 ; GCN-NEXT: $vgpr4 = FLAT_ATOMIC_ADD_RTN $vgpr5_vgpr6, $vgpr7, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000477 ; GCN-NEXT: S_ENDPGM
478
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000479 $vgpr2 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
480 $vgpr4 = FLAT_ATOMIC_ADD_RTN $vgpr5_vgpr6, $vgpr7, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000481 S_ENDPGM
482...
483---
484name: break_clause_atomic_nortn_ptr_load_flat4
485
486body: |
487 bb.0:
488 ; GCN-LABEL: name: break_clause_atomic_nortn_ptr_load_flat4
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000489 ; GCN: FLAT_ATOMIC_ADD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec, implicit $flat_scr
490 ; GCN-NEXT: $vgpr2 = FLAT_LOAD_DWORD $vgpr3_vgpr4, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000491 ; GCN-NEXT: S_ENDPGM
492
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000493 FLAT_ATOMIC_ADD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec, implicit $flat_scr
494 $vgpr2 = FLAT_LOAD_DWORD $vgpr3_vgpr4, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000495 S_ENDPGM
496...
497---
498
499name: break_clause_atomic_rtn_into_ptr_mubuf4
500
501body: |
502 bb.0:
503 ; GCN-LABEL: name: break_clause_atomic_rtn_into_ptr_mubuf4
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000504 ; GCN: $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000505 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000506 ; GCN-NEXT: $vgpr2 = BUFFER_ATOMIC_ADD_OFFEN_RTN $vgpr2, $vgpr5, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000507 ; GCN-NEXT: S_ENDPGM
508
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000509 $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
510 $vgpr2 = BUFFER_ATOMIC_ADD_OFFEN_RTN $vgpr2, $vgpr5, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000511 S_ENDPGM
512...
513---
514
515name: break_clause_atomic_nortn_ptr_load_mubuf4
516
517body: |
518 bb.0:
519 ; GCN-LABEL: name: break_clause_atomic_nortn_ptr_load_mubuf4
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000520 ; GCN: BUFFER_ATOMIC_ADD_OFFEN $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, implicit $exec
521 ; GCN-NEXT: $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000522 ; GCN-NEXT: S_ENDPGM
523
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000524 BUFFER_ATOMIC_ADD_OFFEN $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, implicit $exec
525 $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000526 S_ENDPGM
527...
528---
529# Make sure there is no assert on mubuf instructions which do not have
530# vaddr, and don't add register to track.
531name: no_break_clause_mubuf_load_novaddr
532
533body: |
534 bb.0:
535 ; GCN-LABEL: name: no_break_clause_mubuf_load_novaddr
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000536 ; GCN: $vgpr1 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
537 ; GCN-NEXT: $vgpr3 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000538 ; GCN-NEXT: S_ENDPGM
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000539 $vgpr1 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
540 $vgpr3 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, implicit $exec
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000541 S_ENDPGM
542...
543---
544# Loads and stores using different addresses theoretically does not
545# need a nop
546name: mix_load_store_clause
547body: |
548 bb.0:
549 ; GCN-LABEL: name: mix_load_store_clause
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000550 ; GCN: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
551 ; GCN-NEXT: $vgpr10 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000552 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000553 ; GCN-NEXT: FLAT_STORE_DWORD $vgpr2_vgpr3, $vgpr6, 0, 0, 0, implicit $exec, implicit $flat_scr
554 ; GCN-NEXT: $vgpr11 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000555
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000556 FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
557 $vgpr10 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
558 FLAT_STORE_DWORD $vgpr2_vgpr3, $vgpr6, 0, 0, 0, implicit $exec, implicit $flat_scr
559 $vgpr11 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000560 S_ENDPGM
561...
562---
563# Loads and stores using the same address needs a nop.
564
565name: mix_load_store_clause_same_address
566body: |
567 bb.0:
568 ; GCN-LABEL: name: mix_load_store_clause_same_address
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000569 ; GCN: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
570 ; GCN-NEXT: $vgpr10 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000571 ; XNACK-NEXT: S_NOP 0
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000572 ; GCN-NEXT: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr6, 0, 0, 0, implicit $exec, implicit $flat_scr
573 ; GCN-NEXT: $vgpr11 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000574
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000575 FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
576 $vgpr10 = FLAT_LOAD_DWORD $vgpr2_vgpr3, 0, 0, 0, implicit $exec, implicit $flat_scr
577 FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr6, 0, 0, 0, implicit $exec, implicit $flat_scr
578 $vgpr11 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, 0, implicit $exec, implicit $flat_scr
Matt Arsenaulta41351e2017-11-17 21:35:32 +0000579 S_ENDPGM
580...