[PowerPC] Fix CR Bit spill pseudo expansion
[llvm-core.git] / test / CodeGen / AMDGPU / scalar-store-cache-flush.mir
blobe3e736f725fd19b234917b8667ca7343137a64e9
1 # RUN: llc -march=amdgcn -run-pass si-insert-waitcnts %s -o - | FileCheck %s
3 --- |
4   define amdgpu_kernel void @basic_insert_dcache_wb() {
5     ret void
6   }
8   define amdgpu_kernel void @explicit_flush_after() {
9     ret void
10   }
12   define amdgpu_kernel void @explicit_flush_before() {
13     ret void
14   }
16   define amdgpu_kernel void @no_scalar_store() {
17     ret void
18   }
20   define amdgpu_kernel void @multi_block_store() {
21   bb0:
22     br i1 undef, label %bb1, label %bb2
24    bb1:
25      ret void
27    bb2:
28     ret void
29   }
31   define amdgpu_kernel void @one_block_store() {
32   bb0:
33     br i1 undef, label %bb1, label %bb2
35    bb1:
36      ret void
38    bb2:
39     ret void
40   }
42   define amdgpu_ps float @si_return() {
43     ret float undef
44   }
46 ...
47 ---
48 # CHECK-LABEL: name: basic_insert_dcache_wb
49 # CHECK: bb.0:
50 # CHECK-NEXT: S_STORE_DWORD
51 # CHECK-NEXT: S_DCACHE_WB
52 # CHECK-NEXT: S_ENDPGM
54 name: basic_insert_dcache_wb
55 tracksRegLiveness: false
57 body: |
58   bb.0:
59     S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0
60     S_ENDPGM
61 ...
62 ---
63 # Already has an explicitly requested flush after the last store.
64 # CHECK-LABEL: name: explicit_flush_after
65 # CHECK: bb.0:
66 # CHECK-NEXT: S_STORE_DWORD
67 # CHECK-NEXT: S_DCACHE_WB
68 # CHECK-NEXT: S_ENDPGM
70 name: explicit_flush_after
71 tracksRegLiveness: false
73 body: |
74   bb.0:
75     S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0
76     S_DCACHE_WB
77     S_ENDPGM
78 ...
79 ---
80 # Already has an explicitly requested flush before the last store.
81 # CHECK-LABEL: name: explicit_flush_before
82 # CHECK: bb.0:
83 # CHECK-NEXT: S_DCACHE_WB
84 # CHECK-NEXT: S_STORE_DWORD
85 # CHECK-NEXT: S_DCACHE_WB
86 # CHECK-NEXT: S_ENDPGM
88 name: explicit_flush_before
89 tracksRegLiveness: false
91 body: |
92   bb.0:
93     S_DCACHE_WB
94     S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0
95     S_ENDPGM
96 ...
97 ---
98 # CHECK-LABEL: no_scalar_store
99 # CHECK: bb.0
100 # CHECK-NEXT: S_ENDPGM
101 name: no_scalar_store
102 tracksRegLiveness: false
104 body: |
105   bb.0:
106     S_ENDPGM
109 # CHECK-LABEL: name: multi_block_store
110 # CHECK: bb.0:
111 # CHECK-NEXT: S_STORE_DWORD
112 # CHECK-NEXT: S_DCACHE_WB
113 # CHECK-NEXT: S_ENDPGM
115 # CHECK: bb.1:
116 # CHECK-NEXT: S_STORE_DWORD
117 # CHECK-NEXT: S_DCACHE_WB
118 # CHECK-NEXT: S_ENDPGM
120 name: multi_block_store
121 tracksRegLiveness: false
123 body: |
124   bb.0:
125     S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0
126     S_ENDPGM
128   bb.1:
129     S_STORE_DWORD_SGPR undef $sgpr4, undef $sgpr6_sgpr7, undef $m0, 0
130     S_ENDPGM
134 # This one should be able to omit the flush in the storeless block but
135 # this isn't handled now.
137 # CHECK-LABEL: name: one_block_store
138 # CHECK: bb.0:
139 # CHECK-NEXT: S_DCACHE_WB
140 # CHECK-NEXT: S_ENDPGM
142 # CHECK: bb.1:
143 # CHECK-NEXT: S_STORE_DWORD
144 # CHECK-NEXT: S_DCACHE_WB
145 # CHECK-NEXT: S_ENDPGM
147 name: one_block_store
148 tracksRegLiveness: false
150 body: |
151   bb.0:
152     S_ENDPGM
154   bb.1:
155     S_STORE_DWORD_SGPR undef $sgpr4, undef $sgpr6_sgpr7, undef $m0, 0
156     S_ENDPGM
159 # CHECK-LABEL: name: si_return
160 # CHECK: bb.0:
161 # CHECK-NEXT: S_STORE_DWORD
162 # CHECK-NEXT: S_WAITCNT
163 # CHECK-NEXT: S_DCACHE_WB
164 # CHECK-NEXT: SI_RETURN
166 name: si_return
167 tracksRegLiveness: false
169 body: |
170   bb.0:
171     S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0
172     SI_RETURN_TO_EPILOG undef $vgpr0