[clang] b0daacf - [CodeGen] Use llvm::bit_ceil (NFC)
Kazu Hirata via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 24 22:55:00 PST 2023
Author: Kazu Hirata
Date: 2023-01-24T22:54:53-08:00
New Revision: b0daacf58f417634f7c7c9496589d723592a8f5a
URL: https://github.com/llvm/llvm-project/commit/b0daacf58f417634f7c7c9496589d723592a8f5a
DIFF: https://github.com/llvm/llvm-project/commit/b0daacf58f417634f7c7c9496589d723592a8f5a.diff
LOG: [CodeGen] Use llvm::bit_ceil (NFC)
If we know that x is nonzero and not a power of 2, then
llvm::findLastSet(x) + 1 is the index of the bit just above the
highest set bit in x. That is, 1 << (llvm::findLastSet(x) + 1) is the
same as llvm::bit_ceil(x).
Since llvm::bit_ceil is a nop on a power of 2, we can unconditionally
call llvm::bit_ceil. The end result actually matches the comment.
Added:
Modified:
clang/lib/CodeGen/SwiftCallingConv.cpp
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/SwiftCallingConv.cpp b/clang/lib/CodeGen/SwiftCallingConv.cpp
index 6b868fe84ca68..63d975193c027 100644
--- a/clang/lib/CodeGen/SwiftCallingConv.cpp
+++ b/clang/lib/CodeGen/SwiftCallingConv.cpp
@@ -659,9 +659,7 @@ CharUnits swiftcall::getNaturalAlignment(CodeGenModule &CGM, llvm::Type *type) {
// For Swift's purposes, this is always just the store size of the type
// rounded up to a power of 2.
auto size = (unsigned long long) getTypeStoreSize(CGM, type).getQuantity();
- if (!isPowerOf2(size)) {
- size = 1ULL << (llvm::findLastSet(size, llvm::ZB_Undefined) + 1);
- }
+ size = llvm::bit_ceil(size);
assert(CGM.getDataLayout().getABITypeAlign(type) <= size);
return CharUnits::fromQuantity(size);
}
More information about the cfe-commits
mailing list