1# RUN: llc -march=amdgcn -mcpu=gfx1010 -mattr=-wavefrontsize32,+wavefrontsize64 -verify-machineinstrs -run-pass si-insert-skips,post-RA-hazard-rec -o - %s | FileCheck -check-prefix=GCN %s
2
3# GCN-LABEL: name: hazard_vcmpx_smov_exec_lo
4# GCN:      $sgpr0 = S_MOV_B32 $exec_lo
5# GCN-NEXT: S_WAITCNT_DEPCTR 65534
6# GCN-NEXT: V_CMPX_LE_F32_nosdst_e32
7---
8name:            hazard_vcmpx_smov_exec_lo
9body:            |
10  bb.0:
11    successors: %bb.1
12    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
13    $sgpr0 = S_MOV_B32 $exec_lo
14    SI_KILL_F32_COND_IMM_TERMINATOR $vgpr0, 0, 3, implicit-def $exec, implicit-def $vcc, implicit-def $scc, implicit $exec
15    S_BRANCH %bb.1
16
17  bb.1:
18    S_ENDPGM 0
19...
20
21# GCN-LABEL: name: hazard_vcmpx_smov_exec
22# GCN:      $sgpr0_sgpr1 = S_MOV_B64 $exec
23# GCN-NEXT: S_WAITCNT_DEPCTR 65534
24# GCN-NEXT: V_CMPX_LE_F32_nosdst_e32
25---
26name:            hazard_vcmpx_smov_exec
27body:            |
28  bb.0:
29    successors: %bb.1
30    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
31    $sgpr0_sgpr1 = S_MOV_B64 $exec
32    SI_KILL_F32_COND_IMM_TERMINATOR $vgpr0, 0, 3, implicit-def $exec, implicit-def $vcc, implicit-def $scc, implicit $exec
33    S_BRANCH %bb.1
34
35  bb.1:
36    S_ENDPGM 0
37...
38
39# GCN-LABEL: name: no_hazard_vcmpx_vmov_exec_lo
40# GCN:      $vgpr0 = V_MOV_B32_e32 $exec_lo, implicit $exec
41# GCN-NEXT: V_CMPX_LE_F32_nosdst_e32
42---
43name:            no_hazard_vcmpx_vmov_exec_lo
44body:            |
45  bb.0:
46    successors: %bb.1
47    $vgpr0 = V_MOV_B32_e32 $exec_lo, implicit $exec
48    SI_KILL_F32_COND_IMM_TERMINATOR $vgpr0, 0, 3, implicit-def $exec, implicit-def $vcc, implicit-def $scc, implicit $exec
49    S_BRANCH %bb.1
50
51  bb.1:
52    S_ENDPGM 0
53...
54
55# GCN-LABEL: name: no_hazard_vcmpx_valu_impuse_exec
56# GCN:      $vgpr0 = V_MOV_B32_e32 0, implicit $exec
57# GCN-NEXT: V_CMPX_LE_F32_nosdst_e32
58---
59name:            no_hazard_vcmpx_valu_impuse_exec
60body:            |
61  bb.0:
62    successors: %bb.1
63    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
64    SI_KILL_F32_COND_IMM_TERMINATOR $vgpr0, 0, 3, implicit-def $exec, implicit-def $vcc, implicit-def $scc, implicit $exec
65    S_BRANCH %bb.1
66
67  bb.1:
68    S_ENDPGM 0
69...
70
71# GCN-LABEL: name: no_hazard_vcmpx_smov_exec_lo_valu_writes_sgpr_imp
72# GCN:      $sgpr0 = S_MOV_B32 $exec_lo
73# GCN-NEXT: $vgpr0 = V_ADDC_U32_e32 0, $vgpr0, implicit-def $vcc, implicit $vcc, implicit $exec
74# GCN-NEXT: V_CMPX_LE_F32_nosdst_e32
75---
76name:            no_hazard_vcmpx_smov_exec_lo_valu_writes_sgpr_imp
77body:            |
78  bb.0:
79    successors: %bb.1
80    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
81    $sgpr0 = S_MOV_B32 $exec_lo
82    $vgpr0 = V_ADDC_U32_e32 0, $vgpr0, implicit-def $vcc, implicit $vcc, implicit $exec
83    SI_KILL_F32_COND_IMM_TERMINATOR $vgpr0, 0, 3, implicit-def $exec, implicit-def $vcc, implicit-def $scc, implicit $exec
84    S_BRANCH %bb.1
85
86  bb.1:
87    S_ENDPGM 0
88...
89
90# GCN-LABEL: name: no_hazard_vcmpx_smov_exec_lo_valu_writes_sgpr_exp
91# GCN:      $sgpr0 = S_MOV_B32 $exec_lo
92# GCN-NEXT: $sgpr0_sgpr1 = V_CMP_EQ_U32_e64 $vgpr0, 0, implicit $exec
93# GCN-NEXT: V_CMPX_LE_F32_nosdst_e32
94---
95name:            no_hazard_vcmpx_smov_exec_lo_valu_writes_sgpr_exp
96body:            |
97  bb.0:
98    successors: %bb.1
99    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
100    $sgpr0 = S_MOV_B32 $exec_lo
101    $sgpr0_sgpr1 = V_CMP_EQ_U32_e64 $vgpr0, 0, implicit $exec
102    SI_KILL_F32_COND_IMM_TERMINATOR $vgpr0, 0, 3, implicit-def $exec, implicit-def $vcc, implicit-def $scc, implicit $exec
103    S_BRANCH %bb.1
104
105  bb.1:
106    S_ENDPGM 0
107...
108
109# GCN-LABEL: name: no_hazard_vcmpx_smov_exec_lo_depctr_fffe
110# GCN:      $sgpr0 = S_MOV_B32 $exec_lo
111# GCN-NEXT: S_WAITCNT_DEPCTR 65534
112# GCN-NEXT: V_CMPX_LE_F32_nosdst_e32
113---
114name:            no_hazard_vcmpx_smov_exec_lo_depctr_fffe
115body:            |
116  bb.0:
117    successors: %bb.1
118    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
119    $sgpr0 = S_MOV_B32 $exec_lo
120    S_WAITCNT_DEPCTR 65534
121    SI_KILL_F32_COND_IMM_TERMINATOR $vgpr0, 0, 3, implicit-def $exec, implicit-def $vcc, implicit-def $scc, implicit $exec
122    S_BRANCH %bb.1
123
124  bb.1:
125    S_ENDPGM 0
126...
127
128# GCN-LABEL: name: no_hazard_vcmpx_smov_exec_lo_depctr_ffff
129# GCN:      $sgpr0 = S_MOV_B32 $exec_lo
130# GCN-NEXT: S_WAITCNT_DEPCTR 65535
131# GCN-NEXT: V_CMPX_LE_F32_nosdst_e32
132---
133name:            no_hazard_vcmpx_smov_exec_lo_depctr_ffff
134body:            |
135  bb.0:
136    successors: %bb.1
137    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
138    $sgpr0 = S_MOV_B32 $exec_lo
139    S_WAITCNT_DEPCTR 65535
140    SI_KILL_F32_COND_IMM_TERMINATOR $vgpr0, 0, 3, implicit-def $exec, implicit-def $vcc, implicit-def $scc, implicit $exec
141    S_BRANCH %bb.1
142
143  bb.1:
144    S_ENDPGM 0
145...
146
147# GCN-LABEL: name: hazard_vcmpx_smov_exec_lo_depctr_effe
148# GCN:      $sgpr0 = S_MOV_B32 $exec_lo
149# GCN:      S_WAITCNT_DEPCTR 65534
150# GCN-NEXT: V_CMPX_LE_F32_nosdst_e32
151---
152name:            hazard_vcmpx_smov_exec_lo_depctr_effe
153body:            |
154  bb.0:
155    successors: %bb.1
156    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
157    $sgpr0 = S_MOV_B32 $exec_lo
158    S_WAITCNT_DEPCTR 61438
159    SI_KILL_F32_COND_IMM_TERMINATOR $vgpr0, 0, 3, implicit-def $exec, implicit-def $vcc, implicit-def $scc, implicit $exec
160    S_BRANCH %bb.1
161
162  bb.1:
163    S_ENDPGM 0
164...
165