Skip to content

Commit d7497d2

Browse files
CongMa13Thomas Ning
andauthored
[CK TILE] Refactor function amd_buffer_load_invalid_element_return_zero (#3512)
Refactor function amd_buffer_load_invalid_element_return_zero to avoid the inefficient ASM code generated by compiler. Compiler generates suboptimal assembly for ternary operator, causing excessive VGPR usage Tested compilers: - Rocm 7.0.1 - Rocm 7.1.1 Co-authored-by: Thomas Ning <Thomas.Ning@amd.com>
1 parent aaa35f0 commit d7497d2

1 file changed

Lines changed: 15 additions & 4 deletions

File tree

include/ck_tile/core/arch/amd_buffer_addressing_builtins.hpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2376,12 +2376,23 @@ amd_buffer_load_invalid_element_return_zero(const T* p_src_wave,
23762376
return amd_buffer_load_impl<T, N, coherence>(
23772377
src_wave_buffer_resource, src_addr_shift + src_thread_addr_offset, 0);
23782378
#else
2379-
thread_buffer<T, N> tmp =
2380-
amd_buffer_load_impl<T, N, coherence>(src_wave_buffer_resource, src_thread_addr_offset, 0);
23812379
if constexpr(oob_conditional_check)
2382-
return src_thread_element_valid ? tmp : thread_buffer<T, N>{numeric<T>::zero()};
2380+
{
2381+
if(src_thread_element_valid)
2382+
{
2383+
return amd_buffer_load_impl<T, N, coherence>(
2384+
src_wave_buffer_resource, src_thread_addr_offset, 0);
2385+
}
2386+
else
2387+
{
2388+
return thread_buffer<T, N>{numeric<T>::zero()};
2389+
}
2390+
}
23832391
else
2384-
return tmp;
2392+
{
2393+
return amd_buffer_load_impl<T, N, coherence>(
2394+
src_wave_buffer_resource, src_thread_addr_offset, 0);
2395+
}
23852396
#endif
23862397
}
23872398

0 commit comments

Comments
 (0)