From 56bee0426ad6e05ed8cbe38110f080d65689e4ab Mon Sep 17 00:00:00 2001 From: "Belton-Schure, Aidan" Date: Mon, 23 Jun 2025 13:51:51 +0100 Subject: [PATCH] SWDEV-536813 - Fix HIP_vector_base alignment (#501) * SWDEV-536813 - Fix HIP_vector_base alignment Change-Id: I6ee211437768bbdf42186bcd0805b8c2290373da * Remove alignas for vec3 Change-Id: If93c55327cad38cf179bdd2a89faa725b0a0fc15 * align array to match native_vector Change-Id: I54fbdba01c19241a4c4945ba4c35ac6d40f17ea6 * update Change-Id: Ib7de5a7ebde0b2a5c18fe5c70f7329a90807abfb [ROCm/clr commit: 3faece02dcca588e7c48ad9c277b6727aa70b162] --- .../include/hip/amd_detail/amd_hip_vector_types.h | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/projects/clr/hipamd/include/hip/amd_detail/amd_hip_vector_types.h b/projects/clr/hipamd/include/hip/amd_detail/amd_hip_vector_types.h index aec3b94178..640c70e2d7 100644 --- a/projects/clr/hipamd/include/hip/amd_detail/amd_hip_vector_types.h +++ b/projects/clr/hipamd/include/hip/amd_detail/amd_hip_vector_types.h @@ -41,7 +41,7 @@ THE SOFTWARE. #define __HIP_USE_NATIVE_VECTOR__ 1 #define __NATIVE_VECTOR__(n, T) T __attribute__((ext_vector_type(n))) #else - #define __NATIVE_VECTOR__(n, T) T[n] + #define __NATIVE_VECTOR__(n, T) alignas(n * sizeof(T)) T[n] #endif #if defined(__cplusplus) @@ -55,11 +55,6 @@ template struct HIP_vector_base; template struct HIP_vector_type; namespace hip_impl { -inline constexpr unsigned int next_pot(unsigned int x) { - // Precondition: x > 1. - return 1u << (32u - __builtin_clz(x - 1u)); -} - template __attribute__((always_inline)) __HOST_DEVICE__ typename HIP_vector_base::Native_vec_* get_native_pointer(HIP_vector_base& base_vec) { @@ -116,7 +111,7 @@ get_native_pointer(const HIP_vector_base& base_vec) { HIP_vector_base& operator=(const HIP_vector_base&) = default; }; - template struct alignas(2 * sizeof(T)) HIP_vector_base { + template struct alignas(alignof(__NATIVE_VECTOR__(2, T))) HIP_vector_base { using Native_vec_ = __NATIVE_VECTOR__(2, T); T x, y; @@ -310,7 +305,7 @@ get_native_pointer(const HIP_vector_base& base_vec) { HIP_vector_base& operator=(HIP_vector_base&&) = default; }; - template struct alignas(4 * sizeof(T)) HIP_vector_base { + template struct alignas(__NATIVE_VECTOR__(4, T)) HIP_vector_base { using Native_vec_ = __NATIVE_VECTOR__(4, T); T x, y, z, w;