mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-17 06:33:21 +00:00
Speed up getABITypeSize by turning a i64 mul and div into an
AND. This is speedup on any reasonable target, but particularly on 32-bit targets where this often turns into a libcall like udivdi3. We know that alignments are a power of two but the compiler doesn't. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60688 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
295d4e953a
commit
0a3ba71a05
@ -178,8 +178,12 @@ public:
|
||||
/// that alloca reserves for this type. For example, returns 12 or 16 for
|
||||
/// x86_fp80, depending on alignment.
|
||||
uint64_t getABITypeSize(const Type* Ty) const {
|
||||
unsigned char Align = getABITypeAlignment(Ty);
|
||||
return (getTypeStoreSize(Ty) + Align - 1)/Align*Align;
|
||||
// The alignment of a type is always a power of two.
|
||||
unsigned char AlignMinusOne = getABITypeAlignment(Ty)-1;
|
||||
|
||||
// Round up to the next alignment boundary.
|
||||
uint64_t RoundUp = getTypeStoreSize(Ty) + AlignMinusOne;
|
||||
return RoundUp &= ~uint64_t(AlignMinusOne);
|
||||
}
|
||||
|
||||
/// getABITypeSizeInBits - Return the offset in bits between successive
|
||||
|
Loading…
x
Reference in New Issue
Block a user