[llvm] [DL] Invert `getTypeStoreSize` bytes-bits relationship to avoid `divideCeil` (PR #106757)
Antonio Frighetto via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 30 13:53:24 PDT 2024
https://github.com/antoniofrighetto updated https://github.com/llvm/llvm-project/pull/106757
>From 97a31f40e96d954ac94cc5ffd892abb69d1b41ed Mon Sep 17 00:00:00 2001
From: Antonio Frighetto <me at antoniofrighetto.com>
Date: Fri, 30 Aug 2024 10:34:02 +0200
Subject: [PATCH] [DL] Invert `getTypeStoreSize` bytes/bits relationship to
avoid ceil div
Change how `getTypeStoreSize` and `getTypeStoreSizeInBits` interact
by first aligning the bit size to the nearest power of 2 boundary
and then applying plain division to derive the byte size. This
simplifies the calculation by avoiding possible overflow concerns
in the first place.
---
llvm/include/llvm/IR/DataLayout.h | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/llvm/include/llvm/IR/DataLayout.h b/llvm/include/llvm/IR/DataLayout.h
index 145f1a29c7dfb7..8f7ab2f9df389e 100644
--- a/llvm/include/llvm/IR/DataLayout.h
+++ b/llvm/include/llvm/IR/DataLayout.h
@@ -421,8 +421,9 @@ class DataLayout {
///
/// For example, returns 5 for i36 and 10 for x86_fp80.
TypeSize getTypeStoreSize(Type *Ty) const {
- TypeSize BaseSize = getTypeSizeInBits(Ty);
- return {divideCeil(BaseSize.getKnownMinValue(), 8), BaseSize.isScalable()};
+ TypeSize StoreSizeInBits = getTypeStoreSizeInBits(Ty);
+ return {StoreSizeInBits.getKnownMinValue() / 8,
+ StoreSizeInBits.isScalable()};
}
/// Returns the maximum number of bits that may be overwritten by
@@ -433,7 +434,10 @@ class DataLayout {
///
/// For example, returns 40 for i36 and 80 for x86_fp80.
TypeSize getTypeStoreSizeInBits(Type *Ty) const {
- return 8 * getTypeStoreSize(Ty);
+ TypeSize BaseSize = getTypeSizeInBits(Ty);
+ uint64_t AlignedSizeInBits =
+ alignToPowerOf2(BaseSize.getKnownMinValue(), 8);
+ return {AlignedSizeInBits, BaseSize.isScalable()};
}
/// Returns true if no extra padding bits are needed when storing the
More information about the llvm-commits
mailing list