Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / hazard.mir
blob2303171837a544db6828b86a33f3373232370322
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
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
12 ---
13 name:            hazard_implicit_def
14 alignment:       1
15 exposesReturnsTwice: false
16 legalized:       false
17 regBankSelected: false
18 selected:        false
19 tracksRegLiveness: true
20 registers:
21 liveins:
22   - { reg: '$sgpr7', virtual-reg: '' }
23   - { reg: '$vgpr4', virtual-reg: '' }
24 body:             |
25   bb.0.entry:
26     liveins: $sgpr7, $vgpr4
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
33 ...
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 ---
42 name:            hazard_inlineasm
43 alignment:       1
44 exposesReturnsTwice: false
45 legalized:       false
46 regBankSelected: false
47 selected:        false
48 tracksRegLiveness: true
49 registers:
50 liveins:
51   - { reg: '$sgpr7', virtual-reg: '' }
52   - { reg: '$vgpr4', virtual-reg: '' }
53 body:             |
54   bb.0.entry:
55     liveins: $sgpr7, $vgpr4
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 ...
63 # IMPLICIT_DEF/DBG_VALUE instructions should not prevent the hazard recognizer
64 # from adding s_nop instructions between m0 update and s_sendmsg.
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 ---
72 name: hazard-lookahead-implicit-def
73 body: |
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 ...
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 ---
93 name: hazard-lookahead-dbg-value
94 body: |
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
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
114 name: hazard-lookahead-dbg-label
115 body: |
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
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
133 name: hazard-lookahead-wave-barrier
134 body: |
135   bb.0:
136     liveins: $vgpr0, $vgpr1, $vgpr3
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
143 # GCN-LABEL: name: hazard-lookahead-masked-unreachable
144 # GCN: SI_MASKED_UNREACHABLE
145 # GCN-NEXT: S_NOP 0
146 # GCN-NEXT: S_SENDMSG
148 name: hazard-lookahead-masked-unreachable
149 body: |
150   bb.0:
151     $m0 = S_MOV_B32 -1
152     SI_MASKED_UNREACHABLE
153     S_SENDMSG 3, implicit $exec, implicit $m0
155   bb.1:
156     S_ENDPGM 0
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
164 name: fallthrough-hazard-lookahead-masked-unreachable
165 body: |
166   bb.0:
167     $m0 = S_MOV_B32 -1
168     SI_MASKED_UNREACHABLE
170   bb.1:
171     S_SENDMSG 3, implicit $exec, implicit $m0
172     S_ENDPGM 0
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
180 name: buffer_store_lds_dword
181 body:             |
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
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
192 name: lds_direct_read_m0
193 body:             |
194   bb.0:
195     $m0 = S_MOV_B32 0
196     $vgpr0 = V_MOV_B32_e32 $lds_direct, implicit $exec, implicit $m0