diff options
Diffstat (limited to 'openmp/libomptarget/src/omptarget.cpp')
-rw-r--r-- | openmp/libomptarget/src/omptarget.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/openmp/libomptarget/src/omptarget.cpp b/openmp/libomptarget/src/omptarget.cpp index 3094e899d0de..04201e8d7a60 100644 --- a/openmp/libomptarget/src/omptarget.cpp +++ b/openmp/libomptarget/src/omptarget.cpp @@ -108,8 +108,9 @@ static const int64_t MaxAlignment = 16; /// Return the alignment requirement of partially mapped structs, see /// MaxAlignment above. static uint64_t getPartialStructRequiredAlignment(void *HstPtrBase) { - auto BaseAlignment = reinterpret_cast<uintptr_t>(HstPtrBase) % MaxAlignment; - return BaseAlignment == 0 ? MaxAlignment : BaseAlignment; + int LowestOneBit = __builtin_ffsl(reinterpret_cast<uintptr_t>(HstPtrBase)); + uint64_t BaseAlignment = 1 << (LowestOneBit - 1); + return MaxAlignment < BaseAlignment ? MaxAlignment : BaseAlignment; } /// Map global data and execute pending ctors |