Mercurial > hg > CbC > CbC_llvm
view test/CodeGen/AMDGPU/scalar-store-cache-flush.mir @ 146:3fc4d5c3e21e
set tail call flag for code segment in CGCAll
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 23 Dec 2018 19:23:36 +0900 |
parents | 3a76565eade5 |
children | c2174574ed3a |
line wrap: on
line source
# RUN: llc -march=amdgcn -run-pass si-insert-waits %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 ...