[llvm] 7dbf8cf - [NFC] Implement alignTo with skew in terms of alignTo
Guillaume Chatelet via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 20 07:10:24 PDT 2022
Author: Guillaume Chatelet
Date: 2022-06-20T14:10:14Z
New Revision: 7dbf8cfeb75e438365fbf27aee788cda98aea293
URL: https://github.com/llvm/llvm-project/commit/7dbf8cfeb75e438365fbf27aee788cda98aea293
DIFF: https://github.com/llvm/llvm-project/commit/7dbf8cfeb75e438365fbf27aee788cda98aea293.diff
LOG: [NFC] Implement alignTo with skew in terms of alignTo
Added:
Modified:
llvm/include/llvm/Support/Alignment.h
llvm/include/llvm/Support/MathExtras.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/Support/Alignment.h b/llvm/include/llvm/Support/Alignment.h
index f12d8ed074d8..abc12847c2ef 100644
--- a/llvm/include/llvm/Support/Alignment.h
+++ b/llvm/include/llvm/Support/Alignment.h
@@ -181,7 +181,7 @@ inline uint64_t alignTo(uint64_t Size, Align A) {
inline uint64_t alignTo(uint64_t Size, Align A, uint64_t Skew) {
const uint64_t Value = A.value();
Skew %= Value;
- return ((Size + Value - 1 - Skew) & ~(Value - 1U)) + Skew;
+ return alignTo(Size - Skew, A) + Skew;
}
/// Returns a multiple of A needed to store `Size` bytes.
diff --git a/llvm/include/llvm/Support/MathExtras.h b/llvm/include/llvm/Support/MathExtras.h
index 8c2f2af1c49e..8079aa436933 100644
--- a/llvm/include/llvm/Support/MathExtras.h
+++ b/llvm/include/llvm/Support/MathExtras.h
@@ -735,27 +735,34 @@ inline uint64_t PowerOf2Ceil(uint64_t A) {
/// Returns the next integer (mod 2**64) that is greater than or equal to
/// \p Value and is a multiple of \p Align. \p Align must be non-zero.
///
-/// If non-zero \p Skew is specified, the return value will be a minimal
-/// integer that is greater than or equal to \p Value and equal to
-/// \p Align * N + \p Skew for some integer N. If \p Skew is larger than
-/// \p Align, its value is adjusted to '\p Skew mod \p Align'.
-///
/// Examples:
/// \code
/// alignTo(5, 8) = 8
/// alignTo(17, 8) = 24
/// alignTo(~0LL, 8) = 0
/// alignTo(321, 255) = 510
+/// \endcode
+inline uint64_t alignTo(uint64_t Value, uint64_t Align) {
+ assert(Align != 0u && "Align can't be 0.");
+ return (Value + Align - 1) / Align * Align;
+}
+
+/// If non-zero \p Skew is specified, the return value will be a minimal integer
+/// that is greater than or equal to \p Size and equal to \p A * N + \p Skew for
+/// some integer N. If \p Skew is larger than \p A, its value is adjusted to '\p
+/// Skew mod \p A'. \p Align must be non-zero.
///
+/// Examples:
+/// \code
/// alignTo(5, 8, 7) = 7
/// alignTo(17, 8, 1) = 17
/// alignTo(~0LL, 8, 3) = 3
/// alignTo(321, 255, 42) = 552
/// \endcode
-inline uint64_t alignTo(uint64_t Value, uint64_t Align, uint64_t Skew = 0) {
+inline uint64_t alignTo(uint64_t Value, uint64_t Align, uint64_t Skew) {
assert(Align != 0u && "Align can't be 0.");
Skew %= Align;
- return (Value + Align - 1 - Skew) / Align * Align + Skew;
+ return alignTo(Value - Skew, Align) + Skew;
}
/// Returns the next integer (mod 2**64) that is greater than or equal to
More information about the llvm-commits
mailing list