|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
2 |
| -; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12-SDAG %s |
3 |
| -; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12-GISEL %s |
| 2 | +; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12,GFX12-SDAG %s |
| 3 | +; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12,GFX12-GISEL %s |
4 | 4 |
|
5 | 5 | @bar = internal addrspace(3) global target("amdgcn.named.barrier", 0) poison
|
6 | 6 | @bar2 = internal addrspace(3) global target("amdgcn.named.barrier", 0) poison
|
@@ -102,6 +102,7 @@ define amdgpu_kernel void @kernel1(ptr addrspace(1) %out, ptr addrspace(3) %in)
|
102 | 102 | ; GFX12-SDAG-NEXT: s_mov_b32 m0, 2
|
103 | 103 | ; GFX12-SDAG-NEXT: s_barrier_signal_isfirst -1
|
104 | 104 | ; GFX12-SDAG-NEXT: s_barrier_wait 1
|
| 105 | +; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0 |
105 | 106 | ; GFX12-SDAG-NEXT: s_barrier_leave
|
106 | 107 | ; GFX12-SDAG-NEXT: s_get_barrier_state s3, m0
|
107 | 108 | ; GFX12-SDAG-NEXT: s_mov_b32 m0, s2
|
@@ -155,10 +156,11 @@ define amdgpu_kernel void @kernel1(ptr addrspace(1) %out, ptr addrspace(3) %in)
|
155 | 156 | ; GFX12-GISEL-NEXT: s_barrier_signal -1
|
156 | 157 | ; GFX12-GISEL-NEXT: s_barrier_join m0
|
157 | 158 | ; GFX12-GISEL-NEXT: s_barrier_signal_isfirst -1
|
158 |
| -; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0 |
159 |
| -; GFX12-GISEL-NEXT: s_add_co_u32 s8, s12, 48 |
160 | 159 | ; GFX12-GISEL-NEXT: s_barrier_wait 1
|
| 160 | +; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0 |
161 | 161 | ; GFX12-GISEL-NEXT: s_barrier_leave
|
| 162 | +; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0 |
| 163 | +; GFX12-GISEL-NEXT: s_add_co_u32 s8, s12, 48 |
162 | 164 | ; GFX12-GISEL-NEXT: s_get_barrier_state s0, 2
|
163 | 165 | ; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0
|
164 | 166 | ; GFX12-GISEL-NEXT: s_get_barrier_state s0, m0
|
@@ -256,6 +258,25 @@ define amdgpu_kernel void @kernel2(ptr addrspace(1) %out, ptr addrspace(3) %in)
|
256 | 258 | ret void
|
257 | 259 | }
|
258 | 260 |
|
| 261 | +define amdgpu_ps void @test_barrier_leave_write_to_scc(i32 inreg %val, ptr addrspace(1) %out) { |
| 262 | +; GFX12-LABEL: test_barrier_leave_write_to_scc: |
| 263 | +; GFX12: ; %bb.0: |
| 264 | +; GFX12-NEXT: s_barrier_leave |
| 265 | +; GFX12-NEXT: s_wait_kmcnt 0x0 |
| 266 | +; GFX12-NEXT: s_cmp_lg_u32 s0, 0 |
| 267 | +; GFX12-NEXT: s_movk_i32 s0, 0x7b |
| 268 | +; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) |
| 269 | +; GFX12-NEXT: s_cselect_b32 s0, s0, 0x1c8 |
| 270 | +; GFX12-NEXT: v_mov_b32_e32 v2, s0 |
| 271 | +; GFX12-NEXT: global_store_b32 v[0:1], v2, off |
| 272 | +; GFX12-NEXT: s_endpgm |
| 273 | + call void @llvm.amdgcn.s.barrier.leave(i16 1) |
| 274 | + %cmp = icmp ne i32 %val, 0 |
| 275 | + %ret = select i1 %cmp, i32 123, i32 456 |
| 276 | + store i32 %ret, ptr addrspace(1) %out |
| 277 | + ret void |
| 278 | +} |
| 279 | + |
259 | 280 | declare void @llvm.amdgcn.s.barrier() #1
|
260 | 281 | declare void @llvm.amdgcn.s.barrier.wait(i16) #1
|
261 | 282 | declare void @llvm.amdgcn.s.barrier.signal(i32) #1
|
|
0 commit comments