aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/DataLayout.cpp
diff options
context:
space:
mode:
authorSergei Barannikov <barannikov88@gmail.com>2024-08-13 20:10:35 +0300
committerGitHub <noreply@github.com>2024-08-13 20:10:35 +0300
commitb1aa0b0b88a0bca2553f8c6d6c52ec3b7205064b (patch)
treeb990fab356abb2c73168435f93d04ea870833c1a /llvm/lib/IR/DataLayout.cpp
parentf0ef1d3bae02cd7623e87e759db19432717f51bf (diff)
downloadllvm-b1aa0b0b88a0bca2553f8c6d6c52ec3b7205064b.zip
llvm-b1aa0b0b88a0bca2553f8c6d6c52ec3b7205064b.tar.gz
llvm-b1aa0b0b88a0bca2553f8c6d6c52ec3b7205064b.tar.bz2
[DataLayout] Remove `clear` and `reset` methods (NFC) (#102993)
`clear` was never necessary as it is always called on a fresh instance of the class or just before freeing an instance's memory. `reset` is effectively the same as the constructor. Pull Reuquest: https://github.com/llvm/llvm-project/pull/102993
Diffstat (limited to 'llvm/lib/IR/DataLayout.cpp')
-rw-r--r--llvm/lib/IR/DataLayout.cpp77
1 files changed, 29 insertions, 48 deletions
diff --git a/llvm/lib/IR/DataLayout.cpp b/llvm/lib/IR/DataLayout.cpp
index 1efa61e..ae0ff9c 100644
--- a/llvm/lib/IR/DataLayout.cpp
+++ b/llvm/lib/IR/DataLayout.cpp
@@ -117,6 +117,27 @@ unsigned StructLayout::getElementContainingOffset(uint64_t FixedOffset) const {
return SI - MemberOffsets.begin();
}
+namespace {
+
+class StructLayoutMap {
+ using LayoutInfoTy = DenseMap<StructType *, StructLayout *>;
+ LayoutInfoTy LayoutInfo;
+
+public:
+ ~StructLayoutMap() {
+ // Remove any layouts.
+ for (const auto &I : LayoutInfo) {
+ StructLayout *Value = I.second;
+ Value->~StructLayout();
+ free(Value);
+ }
+ }
+
+ StructLayout *&operator[](StructType *STy) { return LayoutInfo[STy]; }
+};
+
+} // end anonymous namespace
+
//===----------------------------------------------------------------------===//
// LayoutAlignElem, LayoutAlign support
//===----------------------------------------------------------------------===//
@@ -191,36 +212,31 @@ static const std::pair<AlignTypeEnum, LayoutAlignElem> DefaultAlignments[] = {
{VECTOR_ALIGN, {128, Align(16), Align(16)}}, // v16i8, v8i16, v4i32, ...
};
-void DataLayout::reset(StringRef Desc) {
- clear();
-
- LayoutMap = nullptr;
+DataLayout::DataLayout(StringRef LayoutString) {
BigEndian = false;
AllocaAddrSpace = 0;
- StackNaturalAlign.reset();
ProgramAddrSpace = 0;
DefaultGlobalsAddrSpace = 0;
- FunctionPtrAlign.reset();
TheFunctionPtrAlignType = FunctionPtrAlignType::Independent;
ManglingMode = MM_None;
- NonIntegralAddressSpaces.clear();
StructAlignment = LayoutAlignElem::get(Align(1), Align(8), 0);
// Default alignments
for (const auto &[Kind, Layout] : DefaultAlignments) {
if (Error Err = setAlignment(Kind, Layout.ABIAlign, Layout.PrefAlign,
Layout.TypeBitWidth))
- return report_fatal_error(std::move(Err));
+ report_fatal_error(std::move(Err));
}
if (Error Err = setPointerAlignmentInBits(0, Align(8), Align(8), 64, 64))
- return report_fatal_error(std::move(Err));
+ report_fatal_error(std::move(Err));
- if (Error Err = parseSpecifier(Desc))
- return report_fatal_error(std::move(Err));
+ if (Error Err = parseSpecifier(LayoutString))
+ report_fatal_error(std::move(Err));
}
DataLayout &DataLayout::operator=(const DataLayout &Other) {
- clear();
+ delete static_cast<StructLayoutMap *>(LayoutMap);
+ LayoutMap = nullptr;
StringRepresentation = Other.StringRepresentation;
BigEndian = Other.BigEndian;
AllocaAddrSpace = Other.AllocaAddrSpace;
@@ -693,42 +709,7 @@ Align DataLayout::getIntegerAlignment(uint32_t BitWidth,
return abi_or_pref ? I->ABIAlign : I->PrefAlign;
}
-namespace {
-
-class StructLayoutMap {
- using LayoutInfoTy = DenseMap<StructType*, StructLayout*>;
- LayoutInfoTy LayoutInfo;
-
-public:
- ~StructLayoutMap() {
- // Remove any layouts.
- for (const auto &I : LayoutInfo) {
- StructLayout *Value = I.second;
- Value->~StructLayout();
- free(Value);
- }
- }
-
- StructLayout *&operator[](StructType *STy) {
- return LayoutInfo[STy];
- }
-};
-
-} // end anonymous namespace
-
-void DataLayout::clear() {
- LegalIntWidths.clear();
- IntAlignments.clear();
- FloatAlignments.clear();
- VectorAlignments.clear();
- Pointers.clear();
- delete static_cast<StructLayoutMap *>(LayoutMap);
- LayoutMap = nullptr;
-}
-
-DataLayout::~DataLayout() {
- clear();
-}
+DataLayout::~DataLayout() { delete static_cast<StructLayoutMap *>(LayoutMap); }
const StructLayout *DataLayout::getStructLayout(StructType *Ty) const {
if (!LayoutMap)