# RUN: llc -march=amdgcn -run-pass si-insert-waitcnts %s -o - | FileCheck %s

--- |
  define amdgpu_kernel void @basic_insert_dcache_wb() {
    ret void
  }

  define amdgpu_kernel void @explicit_flush_after() {
    ret void
  }

  define amdgpu_kernel void @explicit_flush_before() {
    ret void
  }

  define amdgpu_kernel void @no_scalar_store() {
    ret void
  }

  define amdgpu_kernel void @multi_block_store() {
  bb0:
    br i1 undef, label %bb1, label %bb2

   bb1:
     ret void

   bb2:
    ret void
  }

  define amdgpu_kernel void @one_block_store() {
  bb0:
    br i1 undef, label %bb1, label %bb2

   bb1:
     ret void

   bb2:
    ret void
  }

  define amdgpu_ps float @si_return() {
    ret float undef
  }

...
---
# CHECK-LABEL: name: basic_insert_dcache_wb
# CHECK: bb.0:
# CHECK-NEXT: S_STORE_DWORD
# CHECK-NEXT: S_DCACHE_WB
# CHECK-NEXT: S_ENDPGM

name: basic_insert_dcache_wb
tracksRegLiveness: false

body: |
  bb.0:
    S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0
    S_ENDPGM
...
---
# Already has an explicitly requested flush after the last store.
# CHECK-LABEL: name: explicit_flush_after
# CHECK: bb.0:
# CHECK-NEXT: S_STORE_DWORD
# CHECK-NEXT: S_DCACHE_WB
# CHECK-NEXT: S_ENDPGM

name: explicit_flush_after
tracksRegLiveness: false

body: |
  bb.0:
    S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0
    S_DCACHE_WB
    S_ENDPGM
...
---
# Already has an explicitly requested flush before the last store.
# CHECK-LABEL: name: explicit_flush_before
# CHECK: bb.0:
# CHECK-NEXT: S_DCACHE_WB
# CHECK-NEXT: S_STORE_DWORD
# CHECK-NEXT: S_DCACHE_WB
# CHECK-NEXT: S_ENDPGM

name: explicit_flush_before
tracksRegLiveness: false

body: |
  bb.0:
    S_DCACHE_WB
    S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0
    S_ENDPGM
...
---
# CHECK-LABEL: no_scalar_store
# CHECK: bb.0
# CHECK-NEXT: S_ENDPGM
name: no_scalar_store
tracksRegLiveness: false

body: |
  bb.0:
    S_ENDPGM
...

# CHECK-LABEL: name: multi_block_store
# CHECK: bb.0:
# CHECK-NEXT: S_STORE_DWORD
# CHECK-NEXT: S_DCACHE_WB
# CHECK-NEXT: S_ENDPGM

# CHECK: bb.1:
# CHECK-NEXT: S_STORE_DWORD
# CHECK-NEXT: S_DCACHE_WB
# CHECK-NEXT: S_ENDPGM

name: multi_block_store
tracksRegLiveness: false

body: |
  bb.0:
    S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0
    S_ENDPGM

  bb.1:
    S_STORE_DWORD_SGPR undef $sgpr4, undef $sgpr6_sgpr7, undef $m0, 0
    S_ENDPGM
...
...

# This one should be able to omit the flush in the storeless block but
# this isn't handled now.

# CHECK-LABEL: name: one_block_store
# CHECK: bb.0:
# CHECK-NEXT: S_DCACHE_WB
# CHECK-NEXT: S_ENDPGM

# CHECK: bb.1:
# CHECK-NEXT: S_STORE_DWORD
# CHECK-NEXT: S_DCACHE_WB
# CHECK-NEXT: S_ENDPGM

name: one_block_store
tracksRegLiveness: false

body: |
  bb.0:
    S_ENDPGM

  bb.1:
    S_STORE_DWORD_SGPR undef $sgpr4, undef $sgpr6_sgpr7, undef $m0, 0
    S_ENDPGM
...
---
# CHECK-LABEL: name: si_return
# CHECK: bb.0:
# CHECK-NEXT: S_STORE_DWORD
# CHECK-NEXT: S_WAITCNT
# CHECK-NEXT: S_DCACHE_WB
# CHECK-NEXT: SI_RETURN

name: si_return
tracksRegLiveness: false

body: |
  bb.0:
    S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0
    SI_RETURN_TO_EPILOG undef $vgpr0
...
