xref: /llvm-project/llvm/test/CodeGen/AMDGPU/hazard.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1# RUN: llc -mtriple=amdgcn -mcpu=tonga -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GCN -check-prefix=VI %s
2# RUN: llc -mtriple=amdgcn -mcpu=gfx803 -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GCN -check-prefix=GFX8 %s
3# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GCN -check-prefix=GFX9 %s
4
5# GCN-LABEL: name: hazard_implicit_def
6# GCN:    bb.0.entry:
7# GCN:      $m0 = S_MOV_B32
8# GFX9:     S_NOP 0
9# VI-NOT:   S_NOP_0
10# GCN:      V_INTERP_P1_F32
11
12---
13name:            hazard_implicit_def
14alignment:       1
15exposesReturnsTwice: false
16legalized:       false
17regBankSelected: false
18selected:        false
19tracksRegLiveness: true
20registers:
21liveins:
22  - { reg: '$sgpr7', virtual-reg: '' }
23  - { reg: '$vgpr4', virtual-reg: '' }
24body:             |
25  bb.0.entry:
26    liveins: $sgpr7, $vgpr4
27
28    $m0 = S_MOV_B32 killed $sgpr7
29    $vgpr5 = IMPLICIT_DEF
30    $vgpr0 = V_INTERP_P1_F32 killed $vgpr4, 0, 0, implicit $mode, implicit $m0, implicit $exec
31    SI_RETURN_TO_EPILOG killed $vgpr5, killed $vgpr0
32
33...
34
35# GCN-LABEL: name: hazard_inlineasm
36# GCN:    bb.0.entry:
37# GCN:      $m0 = S_MOV_B32
38# GFX9:     S_NOP 0
39# VI-NOT:   S_NOP_0
40# GCN:      V_INTERP_P1_F32
41---
42name:            hazard_inlineasm
43alignment:       1
44exposesReturnsTwice: false
45legalized:       false
46regBankSelected: false
47selected:        false
48tracksRegLiveness: true
49registers:
50liveins:
51  - { reg: '$sgpr7', virtual-reg: '' }
52  - { reg: '$vgpr4', virtual-reg: '' }
53body:             |
54  bb.0.entry:
55    liveins: $sgpr7, $vgpr4
56
57    $m0 = S_MOV_B32 killed $sgpr7
58    INLINEASM &"; no-op", 1, 327690, def $vgpr5
59    $vgpr0 = V_INTERP_P1_F32 killed $vgpr4, 0, 0, implicit $mode, implicit $m0, implicit $exec
60    SI_RETURN_TO_EPILOG killed $vgpr5, killed $vgpr0
61...
62
63# IMPLICIT_DEF/DBG_VALUE instructions should not prevent the hazard recognizer
64# from adding s_nop instructions between m0 update and s_sendmsg.
65
66# GCN-LABEL: name: hazard-lookahead-implicit-def
67# GCN: $vgpr6 = IMPLICIT_DEF
68# GFX8-NEXT: S_NOP 0
69# GFX9-NEXT: S_NOP 0
70# GCN: S_SENDMSG 3, implicit $exec, implicit $m0
71---
72name: hazard-lookahead-implicit-def
73body: |
74  bb.0:
75    $m0 = S_MOV_B32 killed $sgpr12
76    $vgpr0 = IMPLICIT_DEF
77    $vgpr1 = IMPLICIT_DEF
78    $vgpr2 = IMPLICIT_DEF
79    $vgpr3 = IMPLICIT_DEF
80    $vgpr4 = IMPLICIT_DEF
81    $vgpr5 = IMPLICIT_DEF
82    $vgpr6 = IMPLICIT_DEF
83    S_SENDMSG 3, implicit $exec, implicit $m0
84    S_ENDPGM 0
85...
86
87# GCN-LABEL: name: hazard-lookahead-dbg-value
88# GCN: DBG_VALUE 6
89# GFX8-NEXT: S_NOP 0
90# GFX9-NEXT: S_NOP 0
91# GCN: S_SENDMSG 3, implicit $exec, implicit $m0
92---
93name: hazard-lookahead-dbg-value
94body: |
95  bb.0:
96    $m0 = S_MOV_B32 killed $sgpr12
97    DBG_VALUE 0
98    DBG_VALUE 1
99    DBG_VALUE 2
100    DBG_VALUE 3
101    DBG_VALUE 4
102    DBG_VALUE 5
103    DBG_VALUE 6
104    S_SENDMSG 3, implicit $exec, implicit $m0
105    S_ENDPGM 0
106...
107
108# GCN-LABEL: name: hazard-lookahead-dbg-label
109# GCN: DBG_LABEL 6
110# GFX8-NEXT: S_NOP 0
111# GFX9-NEXT: S_NOP 0
112# GCN: S_SENDMSG 3, implicit $exec, implicit $m0
113---
114name: hazard-lookahead-dbg-label
115body: |
116  bb.0:
117    $m0 = S_MOV_B32 killed $sgpr12
118    DBG_LABEL 0
119    DBG_LABEL 1
120    DBG_LABEL 2
121    DBG_LABEL 3
122    DBG_LABEL 4
123    DBG_LABEL 5
124    DBG_LABEL 6
125    S_SENDMSG 3, implicit $exec, implicit $m0
126    S_ENDPGM 0
127...
128# GCN-LABEL: name: hazard-lookahead-wave-barrier
129# GCN: S_WAITCNT 0
130# GCN-NEXT: S_NOP 0
131# GCN-NEXT: V_ADD_F16_dpp
132---
133name: hazard-lookahead-wave-barrier
134body: |
135  bb.0:
136    liveins: $vgpr0, $vgpr1, $vgpr3
137
138    renamable $vgpr1 = contract nofpexcept V_ADD_F16_e32 killed $vgpr1, $vgpr0, implicit $mode, implicit $exec
139    WAVE_BARRIER
140    S_WAITCNT 0
141    renamable $vgpr2 = contract nofpexcept V_ADD_F16_dpp undef $vgpr2, 0, $vgpr1, 0, $vgpr3, 273, 15, 15, 1, implicit $mode, implicit $exec
142...
143# GCN-LABEL: name: hazard-lookahead-masked-unreachable
144# GCN: SI_MASKED_UNREACHABLE
145# GCN-NEXT: S_NOP 0
146# GCN-NEXT: S_SENDMSG
147---
148name: hazard-lookahead-masked-unreachable
149body: |
150  bb.0:
151    $m0 = S_MOV_B32 -1
152    SI_MASKED_UNREACHABLE
153    S_SENDMSG 3, implicit $exec, implicit $m0
154
155  bb.1:
156    S_ENDPGM 0
157...
158# GCN-LABEL: name: fallthrough-hazard-lookahead-masked-unreachable
159# GCN: SI_MASKED_UNREACHABLE
160# GCN-LABEL: bb.1:
161# GCN-NEXT: S_NOP 0
162# GCN-NEXT: S_SENDMSG
163---
164name: fallthrough-hazard-lookahead-masked-unreachable
165body: |
166  bb.0:
167    $m0 = S_MOV_B32 -1
168    SI_MASKED_UNREACHABLE
169
170  bb.1:
171    S_SENDMSG 3, implicit $exec, implicit $m0
172    S_ENDPGM 0
173...
174
175# GCN-LABEL: name: buffer_store_lds_dword
176# GCN:       $m0 = S_MOV_B32 0
177# GFX9-NEXT: S_NOP 0
178# GCN-NEXT:  BUFFER_STORE_LDS_DWORD
179---
180name: buffer_store_lds_dword
181body:             |
182  bb.0:
183    $m0 = S_MOV_B32 0
184    BUFFER_STORE_LDS_DWORD $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec, implicit $m0
185...
186
187# GCN-LABEL: name: lds_direct_read_m0
188# GCN:       $m0 = S_MOV_B32 0
189# GFX9-NEXT: S_NOP 0
190# GCN-NEXT:  V_MOV_B32
191---
192name: lds_direct_read_m0
193body:             |
194  bb.0:
195    $m0 = S_MOV_B32 0
196    $vgpr0 = V_MOV_B32_e32 $lds_direct, implicit $exec, implicit $m0
197...
198