1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass si-insert-waitcnts -o - %s | FileCheck -check-prefix=GFX10 %s
3
4---
5name:            test_waitcnt_preexisting_vscnt_unmodified
6body:             |
7  bb.0:
8    liveins: $vgpr0_vgpr1, $vgpr2
9
10    ; GFX10-LABEL: name: test_waitcnt_preexisting_vscnt_unmodified
11    ; GFX10: S_WAITCNT 0
12    ; GFX10: S_WAITCNT_VSCNT undef $sgpr_null, 0
13    ; GFX10: GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
14    ; GFX10: S_WAITCNT_VSCNT undef $sgpr_null, 0
15    ; GFX10: S_BARRIER
16    ; GFX10: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
17    ; GFX10: S_WAITCNT 112
18    ; GFX10: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
19    ; GFX10: S_ENDPGM 0
20    GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
21    S_WAITCNT_VSCNT undef $sgpr_null, 0
22    S_BARRIER
23    $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
24    FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
25    S_ENDPGM 0
26...
27
28---
29name:            test_waitcnt_preexisting_vscnt_needs_vscnt
30body:             |
31  bb.0:
32    liveins: $vgpr0_vgpr1, $vgpr2
33
34    ; GFX10-LABEL: name: test_waitcnt_preexisting_vscnt_needs_vscnt
35    ; GFX10: S_WAITCNT 0
36    ; GFX10: S_WAITCNT_VSCNT undef $sgpr_null, 0
37    ; GFX10: GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
38    ; GFX10: S_WAITCNT_VSCNT undef $sgpr_null, 0
39    ; GFX10: S_BARRIER
40    ; GFX10: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
41    ; GFX10: S_WAITCNT 112
42    ; GFX10: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
43    ; GFX10: S_ENDPGM 0
44    GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
45    S_WAITCNT_VSCNT undef $sgpr_null, 1
46    S_BARRIER
47    $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
48    FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
49    S_ENDPGM 0
50...
51
52---
53name:            test_waitcnt_preexisting_vscnt_with_other_waitcnt
54body:             |
55  bb.0:
56    liveins: $vgpr0_vgpr1, $vgpr2
57
58    ; GFX10-LABEL: name: test_waitcnt_preexisting_vscnt_with_other_waitcnt
59    ; GFX10: S_WAITCNT 0
60    ; GFX10: S_WAITCNT_VSCNT undef $sgpr_null, 0
61    ; GFX10: GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
62    ; GFX10: S_WAITCNT 112
63    ; GFX10: S_WAITCNT_VSCNT undef $sgpr_null, 0
64    ; GFX10: S_BARRIER
65    ; GFX10: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
66    ; GFX10: S_WAITCNT 112
67    ; GFX10: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
68    ; GFX10: S_ENDPGM 0
69    GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
70    S_WAITCNT 112
71    S_WAITCNT_VSCNT undef $sgpr_null, 0
72    S_BARRIER
73    $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
74    FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
75    S_ENDPGM 0
76...
77
78---
79name:            test_waitcnt_preexisting_vscnt_combined
80body:             |
81  bb.0:
82    liveins: $vgpr0_vgpr1, $vgpr2
83
84    ; GFX10-LABEL: name: test_waitcnt_preexisting_vscnt_combined
85    ; GFX10: S_WAITCNT 0
86    ; GFX10: S_WAITCNT_VSCNT undef $sgpr_null, 0
87    ; GFX10: GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
88    ; GFX10: S_WAITCNT_VSCNT undef $sgpr_null, 0
89    ; GFX10: S_BARRIER
90    ; GFX10: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
91    ; GFX10: S_WAITCNT 112
92    ; GFX10: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
93    ; GFX10: S_ENDPGM 0
94    GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
95    S_WAITCNT_VSCNT undef $sgpr_null, 0
96    S_WAITCNT_VSCNT undef $sgpr_null, 1
97    S_WAITCNT_VSCNT undef $sgpr_null, 2
98    S_BARRIER
99    $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
100    FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
101    S_ENDPGM 0
102...
103
104---
105name:            test_waitcnt_preexisting_vscnt_combined_both_types
106body:             |
107  bb.0:
108    liveins: $vgpr0_vgpr1, $vgpr2
109
110    ; GFX10-LABEL: name: test_waitcnt_preexisting_vscnt_combined_both_types
111    ; GFX10: S_WAITCNT 0
112    ; GFX10: S_WAITCNT_VSCNT undef $sgpr_null, 0
113    ; GFX10: GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
114    ; GFX10: S_WAITCNT 0
115    ; GFX10: S_WAITCNT_VSCNT undef $sgpr_null, 0
116    ; GFX10: S_BARRIER
117    ; GFX10: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
118    ; GFX10: S_WAITCNT 112
119    ; GFX10: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
120    ; GFX10: S_ENDPGM 0
121    GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
122    S_WAITCNT 0
123    S_WAITCNT_VSCNT undef $sgpr_null, 1
124    S_WAITCNT 0
125    S_WAITCNT_VSCNT undef $sgpr_null, 2
126    S_WAITCNT 0
127    S_BARRIER
128    $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
129    FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
130    S_ENDPGM 0
131...
132