[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / AMDGPU / scalar-store-cache-flush.mir
blob6d6fef7e6e52865fc85bdce9f065347b7a4aa90f
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 0
54 name: basic_insert_dcache_wb
55 tracksRegLiveness: false
56 machineFunctionInfo:
57   isEntryFunction: true
59 body: |
60   bb.0:
61     S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0, 0
62     S_ENDPGM 0
63 ...
64 ---
65 # Already has an explicitly requested flush after the last store.
66 # CHECK-LABEL: name: explicit_flush_after
67 # CHECK: bb.0:
68 # CHECK-NEXT: S_STORE_DWORD
69 # CHECK-NEXT: S_DCACHE_WB
70 # CHECK-NEXT: S_ENDPGM 0
72 name: explicit_flush_after
73 tracksRegLiveness: false
74 machineFunctionInfo:
75   isEntryFunction: true
77 body: |
78   bb.0:
79     S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0, 0
80     S_DCACHE_WB
81     S_ENDPGM 0
82 ...
83 ---
84 # Already has an explicitly requested flush before the last store.
85 # CHECK-LABEL: name: explicit_flush_before
86 # CHECK: bb.0:
87 # CHECK-NEXT: S_DCACHE_WB
88 # CHECK-NEXT: S_STORE_DWORD
89 # CHECK-NEXT: S_DCACHE_WB
90 # CHECK-NEXT: S_ENDPGM 0
92 name: explicit_flush_before
93 tracksRegLiveness: false
94 machineFunctionInfo:
95   isEntryFunction: true
97 body: |
98   bb.0:
99     S_DCACHE_WB
100     S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0, 0
101     S_ENDPGM 0
104 # CHECK-LABEL: no_scalar_store
105 # CHECK: bb.0
106 # CHECK-NEXT: S_ENDPGM 0
107 name: no_scalar_store
108 tracksRegLiveness: false
109 machineFunctionInfo:
110   isEntryFunction: true
112 body: |
113   bb.0:
114     S_ENDPGM 0
117 # CHECK-LABEL: name: multi_block_store
118 # CHECK: bb.0:
119 # CHECK-NEXT: S_STORE_DWORD
120 # CHECK-NEXT: S_DCACHE_WB
121 # CHECK-NEXT: S_ENDPGM 0
123 # CHECK: bb.1:
124 # CHECK-NEXT: S_STORE_DWORD
125 # CHECK-NEXT: S_DCACHE_WB
126 # CHECK-NEXT: S_ENDPGM 0
128 name: multi_block_store
129 tracksRegLiveness: false
130 machineFunctionInfo:
131   isEntryFunction: true
133 body: |
134   bb.0:
135     S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0, 0
136     S_ENDPGM 0
138   bb.1:
139     S_STORE_DWORD_SGPR undef $sgpr4, undef $sgpr6_sgpr7, undef $m0, 0, 0
140     S_ENDPGM 0
144 # This one should be able to omit the flush in the storeless block but
145 # this isn't handled now.
147 # CHECK-LABEL: name: one_block_store
148 # CHECK: bb.0:
149 # CHECK-NEXT: S_DCACHE_WB
150 # CHECK-NEXT: S_ENDPGM 0
152 # CHECK: bb.1:
153 # CHECK-NEXT: S_STORE_DWORD
154 # CHECK-NEXT: S_DCACHE_WB
155 # CHECK-NEXT: S_ENDPGM 0
157 name: one_block_store
158 tracksRegLiveness: false
159 machineFunctionInfo:
160   isEntryFunction: true
162 body: |
163   bb.0:
164     S_ENDPGM 0
166   bb.1:
167     S_STORE_DWORD_SGPR undef $sgpr4, undef $sgpr6_sgpr7, undef $m0, 0, 0
168     S_ENDPGM 0
171 # CHECK-LABEL: name: si_return
172 # CHECK: bb.0:
173 # CHECK-NEXT: S_STORE_DWORD
174 # CHECK-NEXT: S_WAITCNT
175 # CHECK-NEXT: S_DCACHE_WB
176 # CHECK-NEXT: SI_RETURN
178 name: si_return
179 tracksRegLiveness: false
180 machineFunctionInfo:
181   isEntryFunction: true
183 body: |
184   bb.0:
185     S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0, 0
186     SI_RETURN_TO_EPILOG undef $vgpr0