From 246adf91c41f2ea7c96eac0de66729dbb001923d Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Thu, 5 Dec 2024 18:18:51 +1300 Subject: [PATCH] DataLayout: Fix latent issues with getMaxIndexSizeInBits Because it was implemented in terms of getMaxIndexSize, it was always rounding the values up to a multiple of 8. Additionally, it was using the PointerSpec's BitWidth rather than its IndexBitWidth, which was self-evidently incorrect. Since getMaxIndexSize was only used by getMaxIndexSizeInBits, and its name and function seem niche and somewhat confusing, go ahead and remove it until a concrete need for it arises. --- llvm/include/llvm/IR/DataLayout.h | 7 +------ llvm/lib/IR/DataLayout.cpp | 6 ++---- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/llvm/include/llvm/IR/DataLayout.h b/llvm/include/llvm/IR/DataLayout.h index 93bd519f5727d8..5e6a6198a94733 100644 --- a/llvm/include/llvm/IR/DataLayout.h +++ b/llvm/include/llvm/IR/DataLayout.h @@ -330,9 +330,6 @@ class DataLayout { /// the backends/clients are updated. unsigned getPointerSize(unsigned AS = 0) const; - /// Returns the maximum index size over all address spaces. - unsigned getMaxIndexSize() const; - // Index size in bytes used for address calculation, /// rounded up to a whole number of bytes. unsigned getIndexSize(unsigned AS) const; @@ -369,9 +366,7 @@ class DataLayout { } /// Returns the maximum index size over all address spaces. - unsigned getMaxIndexSizeInBits() const { - return getMaxIndexSize() * 8; - } + unsigned getMaxIndexSizeInBits() const; /// Size in bits of index used for address calculation in getelementptr. unsigned getIndexSizeInBits(unsigned AS) const { diff --git a/llvm/lib/IR/DataLayout.cpp b/llvm/lib/IR/DataLayout.cpp index a4af0ead07cf61..5b3ce2d62efd5b 100644 --- a/llvm/lib/IR/DataLayout.cpp +++ b/llvm/lib/IR/DataLayout.cpp @@ -740,12 +740,10 @@ unsigned DataLayout::getPointerSize(unsigned AS) const { return divideCeil(getPointerSpec(AS).BitWidth, 8); } -unsigned DataLayout::getMaxIndexSize() const { +unsigned DataLayout::getMaxIndexSizeInBits() const { unsigned MaxIndexSize = 0; for (const PointerSpec &Spec : PointerSpecs) - MaxIndexSize = - std::max(MaxIndexSize, (unsigned)divideCeil(Spec.BitWidth, 8)); - + MaxIndexSize = std::max(MaxIndexSize, Spec.IndexBitWidth); return MaxIndexSize; }