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;