[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / gws-hazards.mir
blob1eeb0f453bb15a95e09a35648668c3c99085b721
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass  post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GFX9 %s
3 # RUN: llc -mtriple=amdgcn -mcpu=fiji -verify-machineinstrs -run-pass  post-RA-hazard-rec %s -o - | FileCheck -check-prefix=VI %s
4 # RUN: llc -mtriple=amdgcn -mcpu=hawaii -verify-machineinstrs -run-pass  post-RA-hazard-rec %s -o - | FileCheck -check-prefix=CI %s
5 # RUN: llc -mtriple=amdgcn -mcpu=tahiti -verify-machineinstrs -run-pass  post-RA-hazard-rec %s -o - | FileCheck -check-prefix=SI %s
6 # RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass  post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GFX10 %s
7 # RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs -run-pass  post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GFX10 %s
9 ---
10 name: m0_gws_init0
11 tracksRegLiveness: true
12 body: |
14   bb.0:
15     liveins: $vgpr0
16     ; GFX9-LABEL: name: m0_gws_init0
17     ; GFX9: liveins: $vgpr0
18     ; GFX9-NEXT: {{  $}}
19     ; GFX9-NEXT: $m0 = S_MOV_B32 -1
20     ; GFX9-NEXT: S_NOP 0
21     ; GFX9-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
22     ;
23     ; VI-LABEL: name: m0_gws_init0
24     ; VI: liveins: $vgpr0
25     ; VI-NEXT: {{  $}}
26     ; VI-NEXT: $m0 = S_MOV_B32 -1
27     ; VI-NEXT: S_NOP 0
28     ; VI-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
29     ;
30     ; CI-LABEL: name: m0_gws_init0
31     ; CI: liveins: $vgpr0
32     ; CI-NEXT: {{  $}}
33     ; CI-NEXT: $m0 = S_MOV_B32 -1
34     ; CI-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
35     ;
36     ; SI-LABEL: name: m0_gws_init0
37     ; SI: liveins: $vgpr0
38     ; SI-NEXT: {{  $}}
39     ; SI-NEXT: $m0 = S_MOV_B32 -1
40     ; SI-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
41     ;
42     ; GFX10-LABEL: name: m0_gws_init0
43     ; GFX10: liveins: $vgpr0
44     ; GFX10-NEXT: {{  $}}
45     ; GFX10-NEXT: $m0 = S_MOV_B32 -1
46     ; GFX10-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
47     $m0 = S_MOV_B32 -1
48     DS_GWS_INIT  $vgpr0, 0, implicit $m0, implicit $exec
50 ...
52 ---
53 name: m0_gws_init1
54 tracksRegLiveness: true
55 body: |
57   bb.0:
58     ; GFX9-LABEL: name: m0_gws_init1
59     ; GFX9: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
60     ; GFX9-NEXT: $m0 = S_MOV_B32 -1
61     ; GFX9-NEXT: S_NOP 0
62     ; GFX9-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
63     ;
64     ; VI-LABEL: name: m0_gws_init1
65     ; VI: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
66     ; VI-NEXT: $m0 = S_MOV_B32 -1
67     ; VI-NEXT: S_NOP 0
68     ; VI-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
69     ;
70     ; CI-LABEL: name: m0_gws_init1
71     ; CI: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
72     ; CI-NEXT: $m0 = S_MOV_B32 -1
73     ; CI-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
74     ;
75     ; SI-LABEL: name: m0_gws_init1
76     ; SI: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
77     ; SI-NEXT: $m0 = S_MOV_B32 -1
78     ; SI-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
79     ;
80     ; GFX10-LABEL: name: m0_gws_init1
81     ; GFX10: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
82     ; GFX10-NEXT: $m0 = S_MOV_B32 -1
83     ; GFX10-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
84     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
85     $m0 = S_MOV_B32 -1
86     DS_GWS_INIT  $vgpr0, 0, implicit $m0, implicit $exec
88 ...
90 # Test a typical situation where m0 needs to be set from a VGPR
91 # through readfirstlane
92 ---
93 name: m0_gws_readlane
94 tracksRegLiveness: true
95 body: |
97   bb.0:
98     liveins: $vgpr0, $vgpr1
100     ; GFX9-LABEL: name: m0_gws_readlane
101     ; GFX9: liveins: $vgpr0, $vgpr1
102     ; GFX9-NEXT: {{  $}}
103     ; GFX9-NEXT: $sgpr0 = V_READFIRSTLANE_B32 $vgpr1, implicit $exec
104     ; GFX9-NEXT: $m0 = S_MOV_B32 $sgpr0
105     ; GFX9-NEXT: S_NOP 0
106     ; GFX9-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
107     ;
108     ; VI-LABEL: name: m0_gws_readlane
109     ; VI: liveins: $vgpr0, $vgpr1
110     ; VI-NEXT: {{  $}}
111     ; VI-NEXT: $sgpr0 = V_READFIRSTLANE_B32 $vgpr1, implicit $exec
112     ; VI-NEXT: $m0 = S_MOV_B32 $sgpr0
113     ; VI-NEXT: S_NOP 0
114     ; VI-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
115     ;
116     ; CI-LABEL: name: m0_gws_readlane
117     ; CI: liveins: $vgpr0, $vgpr1
118     ; CI-NEXT: {{  $}}
119     ; CI-NEXT: $sgpr0 = V_READFIRSTLANE_B32 $vgpr1, implicit $exec
120     ; CI-NEXT: $m0 = S_MOV_B32 $sgpr0
121     ; CI-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
122     ;
123     ; SI-LABEL: name: m0_gws_readlane
124     ; SI: liveins: $vgpr0, $vgpr1
125     ; SI-NEXT: {{  $}}
126     ; SI-NEXT: $sgpr0 = V_READFIRSTLANE_B32 $vgpr1, implicit $exec
127     ; SI-NEXT: $m0 = S_MOV_B32 $sgpr0
128     ; SI-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
129     ;
130     ; GFX10-LABEL: name: m0_gws_readlane
131     ; GFX10: liveins: $vgpr0, $vgpr1
132     ; GFX10-NEXT: {{  $}}
133     ; GFX10-NEXT: $sgpr0 = V_READFIRSTLANE_B32 $vgpr1, implicit $exec
134     ; GFX10-NEXT: $m0 = S_MOV_B32 $sgpr0
135     ; GFX10-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
136     $sgpr0 = V_READFIRSTLANE_B32 $vgpr1, implicit $exec
137     $m0 = S_MOV_B32 $sgpr0
138     DS_GWS_INIT  $vgpr0, 0, implicit $m0, implicit $exec