[clang] [llvm] [DataLayout] Remove constructor accepting a pointer to Module (PR #102841)
Sergei Barannikov via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 12 11:48:14 PDT 2024
https://github.com/s-barannikov updated https://github.com/llvm/llvm-project/pull/102841
>From 8382e3ed0a5546fff4ed662a7abbaa39e2f0c22a Mon Sep 17 00:00:00 2001
From: Sergei Barannikov <barannikov88 at gmail.com>
Date: Mon, 12 Aug 2024 04:08:54 +0300
Subject: [PATCH] [DataLayout] Remove constructor accepting a pointer to Module
The constructor initializes `*this` with `M->getDataLayout()`, which
is effectively the same as calling the copy constructor.
There does not seem to be a case where a copy would be necessary.
---
clang/lib/CodeGen/CGObjCGNU.cpp | 31 +++++++++----------
clang/lib/CodeGen/CodeGenTBAA.cpp | 2 +-
llvm/include/llvm/IR/DataLayout.h | 6 ----
llvm/lib/Analysis/InlineCost.cpp | 3 +-
.../CodeGen/AssignmentTrackingAnalysis.cpp | 3 +-
llvm/lib/FuzzMutate/RandomIRBuilder.cpp | 4 +--
llvm/lib/IR/DataLayout.cpp | 7 -----
llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp | 2 +-
llvm/lib/Transforms/Utils/InlineFunction.cpp | 4 +--
llvm/unittests/IR/IRBuilderTest.cpp | 7 ++---
llvm/unittests/SandboxIR/SandboxIRTest.cpp | 4 +--
11 files changed, 28 insertions(+), 45 deletions(-)
diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp
index ca5804018227ea..adc7cdbfded880 100644
--- a/clang/lib/CodeGen/CGObjCGNU.cpp
+++ b/clang/lib/CodeGen/CGObjCGNU.cpp
@@ -278,9 +278,9 @@ class CGObjCGNU : public CGObjCRuntime {
Fields.addInt(IntTy, count);
// int size; (only in GNUstep v2 ABI.
if (isRuntime(ObjCRuntime::GNUstep, 2)) {
- llvm::DataLayout td(&TheModule);
- Fields.addInt(IntTy, td.getTypeSizeInBits(PropertyMetadataTy) /
- CGM.getContext().getCharWidth());
+ const llvm::DataLayout &DL = TheModule.getDataLayout();
+ Fields.addInt(IntTy, DL.getTypeSizeInBits(PropertyMetadataTy) /
+ CGM.getContext().getCharWidth());
}
// struct objc_property_list *next;
Fields.add(NULLPtr);
@@ -1190,9 +1190,9 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
// int count;
MethodList.addInt(IntTy, Methods.size());
// int size; // sizeof(struct objc_method_description)
- llvm::DataLayout td(&TheModule);
- MethodList.addInt(IntTy, td.getTypeSizeInBits(ObjCMethodDescTy) /
- CGM.getContext().getCharWidth());
+ const llvm::DataLayout &DL = TheModule.getDataLayout();
+ MethodList.addInt(IntTy, DL.getTypeSizeInBits(ObjCMethodDescTy) /
+ CGM.getContext().getCharWidth());
// struct objc_method_description[]
auto MethodArray = MethodList.beginArray(ObjCMethodDescTy);
for (auto *M : Methods) {
@@ -1828,7 +1828,7 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
int ivar_count = 0;
for (const ObjCIvarDecl *IVD = classDecl->all_declared_ivar_begin(); IVD;
IVD = IVD->getNextIvar()) ivar_count++;
- llvm::DataLayout td(&TheModule);
+ const llvm::DataLayout &DL = TheModule.getDataLayout();
// struct objc_ivar_list *ivars;
ConstantInitBuilder b(CGM);
auto ivarListBuilder = b.beginStruct();
@@ -1841,8 +1841,8 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
PtrToInt8Ty,
Int32Ty,
Int32Ty);
- ivarListBuilder.addInt(SizeTy, td.getTypeSizeInBits(ObjCIvarTy) /
- CGM.getContext().getCharWidth());
+ ivarListBuilder.addInt(SizeTy, DL.getTypeSizeInBits(ObjCIvarTy) /
+ CGM.getContext().getCharWidth());
// struct objc_ivar ivars[]
auto ivarArrayBuilder = ivarListBuilder.beginArray();
for (const ObjCIvarDecl *IVD = classDecl->all_declared_ivar_begin(); IVD;
@@ -3019,9 +3019,9 @@ GenerateMethodList(StringRef ClassName,
bool isV2ABI = isRuntime(ObjCRuntime::GNUstep, 2);
if (isV2ABI) {
// size_t size;
- llvm::DataLayout td(&TheModule);
- MethodList.addInt(SizeTy, td.getTypeSizeInBits(ObjCMethodTy) /
- CGM.getContext().getCharWidth());
+ const llvm::DataLayout &DL = TheModule.getDataLayout();
+ MethodList.addInt(SizeTy, DL.getTypeSizeInBits(ObjCMethodTy) /
+ CGM.getContext().getCharWidth());
ObjCMethodTy =
llvm::StructType::get(CGM.getLLVMContext(), {
IMPTy, // Method pointer
@@ -3161,10 +3161,9 @@ llvm::Constant *CGObjCGNU::GenerateClassStructure(
Elements.addInt(LongTy, info);
// instance_size
if (isMeta) {
- llvm::DataLayout td(&TheModule);
- Elements.addInt(LongTy,
- td.getTypeSizeInBits(ClassTy) /
- CGM.getContext().getCharWidth());
+ const llvm::DataLayout &DL = TheModule.getDataLayout();
+ Elements.addInt(LongTy, DL.getTypeSizeInBits(ClassTy) /
+ CGM.getContext().getCharWidth());
} else
Elements.add(InstanceSize);
// ivars
diff --git a/clang/lib/CodeGen/CodeGenTBAA.cpp b/clang/lib/CodeGen/CodeGenTBAA.cpp
index b66b6234c9d3d4..b7e6a4d1adcc37 100644
--- a/clang/lib/CodeGen/CodeGenTBAA.cpp
+++ b/clang/lib/CodeGen/CodeGenTBAA.cpp
@@ -318,7 +318,7 @@ TBAAAccessInfo CodeGenTBAA::getAccessInfo(QualType AccessType) {
}
TBAAAccessInfo CodeGenTBAA::getVTablePtrAccessInfo(llvm::Type *VTablePtrType) {
- llvm::DataLayout DL(&Module);
+ const llvm::DataLayout &DL = Module.getDataLayout();
unsigned Size = DL.getPointerTypeSize(VTablePtrType);
return TBAAAccessInfo(createScalarTypeNode("vtable pointer", getRoot(), Size),
Size);
diff --git a/llvm/include/llvm/IR/DataLayout.h b/llvm/include/llvm/IR/DataLayout.h
index afcb8bcb77f10a..6679c65ef2f182 100644
--- a/llvm/include/llvm/IR/DataLayout.h
+++ b/llvm/include/llvm/IR/DataLayout.h
@@ -45,7 +45,6 @@ namespace llvm {
class GlobalVariable;
class LLVMContext;
-class Module;
class StructLayout;
class Triple;
class Value;
@@ -194,9 +193,6 @@ class DataLayout {
reset(LayoutDescription);
}
- /// Initialize target data from properties stored in the module.
- explicit DataLayout(const Module *M);
-
DataLayout(const DataLayout &DL) { *this = DL; }
~DataLayout(); // Not virtual, do not subclass this class
@@ -225,8 +221,6 @@ class DataLayout {
bool operator==(const DataLayout &Other) const;
bool operator!=(const DataLayout &Other) const { return !(*this == Other); }
- void init(const Module *M);
-
/// Parse a data layout string (with fallback to default values).
void reset(StringRef LayoutDescription);
diff --git a/llvm/lib/Analysis/InlineCost.cpp b/llvm/lib/Analysis/InlineCost.cpp
index 345e5a0195201c..4b65fa0ae41b2f 100644
--- a/llvm/lib/Analysis/InlineCost.cpp
+++ b/llvm/lib/Analysis/InlineCost.cpp
@@ -3246,8 +3246,7 @@ InlineCostAnnotationPrinterPass::run(Function &F,
};
Module *M = F.getParent();
ProfileSummaryInfo PSI(*M);
- DataLayout DL(M);
- TargetTransformInfo TTI(DL);
+ TargetTransformInfo TTI(M->getDataLayout());
// FIXME: Redesign the usage of InlineParams to expand the scope of this pass.
// In the current implementation, the type of InlineParams doesn't matter as
// the pass serves only for verification of inliner's decisions.
diff --git a/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp b/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp
index 146276b4fd0bb2..788cdfe3bb13d9 100644
--- a/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp
+++ b/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp
@@ -2826,13 +2826,12 @@ bool AssignmentTrackingAnalysis::runOnFunction(Function &F) {
LLVM_DEBUG(dbgs() << "AssignmentTrackingAnalysis run on " << F.getName()
<< "\n");
- auto DL = std::make_unique<DataLayout>(F.getParent());
// Clear previous results.
Results->clear();
FunctionVarLocsBuilder Builder;
- analyzeFunction(F, *DL.get(), &Builder);
+ analyzeFunction(F, F.getDataLayout(), &Builder);
// Save these results.
Results->init(Builder);
diff --git a/llvm/lib/FuzzMutate/RandomIRBuilder.cpp b/llvm/lib/FuzzMutate/RandomIRBuilder.cpp
index fe4ad10a02d57d..b645888463b12a 100644
--- a/llvm/lib/FuzzMutate/RandomIRBuilder.cpp
+++ b/llvm/lib/FuzzMutate/RandomIRBuilder.cpp
@@ -67,7 +67,7 @@ AllocaInst *RandomIRBuilder::createStackMemory(Function *F, Type *Ty,
Value *Init) {
/// TODO: For all Allocas, maybe allocate an array.
BasicBlock *EntryBB = &F->getEntryBlock();
- DataLayout DL(F->getParent());
+ const DataLayout &DL = F->getDataLayout();
AllocaInst *Alloca = new AllocaInst(Ty, DL.getAllocaAddrSpace(), "A",
EntryBB->getFirstInsertionPt());
if (Init)
@@ -423,7 +423,7 @@ Function *RandomIRBuilder::createFunctionDefinition(Module &M,
// TODO: Some arguments and a return value would probably be more
// interesting.
LLVMContext &Context = M.getContext();
- DataLayout DL(&M);
+ const DataLayout &DL = M.getDataLayout();
BasicBlock *BB = BasicBlock::Create(Context, "BB", F);
Type *RetTy = F->getReturnType();
if (RetTy != Type::getVoidTy(Context)) {
diff --git a/llvm/lib/IR/DataLayout.cpp b/llvm/lib/IR/DataLayout.cpp
index 5104cb86320be7..bbdaa679aa2c5a 100644
--- a/llvm/lib/IR/DataLayout.cpp
+++ b/llvm/lib/IR/DataLayout.cpp
@@ -22,7 +22,6 @@
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/GetElementPtrTypeIterator.h"
#include "llvm/IR/GlobalVariable.h"
-#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Casting.h"
@@ -550,12 +549,6 @@ Error DataLayout::parseSpecifier(StringRef Desc) {
return Error::success();
}
-DataLayout::DataLayout(const Module *M) {
- init(M);
-}
-
-void DataLayout::init(const Module *M) { *this = M->getDataLayout(); }
-
bool DataLayout::operator==(const DataLayout &Other) const {
bool Ret = BigEndian == Other.BigEndian &&
AllocaAddrSpace == Other.AllocaAddrSpace &&
diff --git a/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp b/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp
index 773322937498dc..1205ad4c6b008f 100644
--- a/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp
@@ -328,7 +328,7 @@ static void adjustByValArgAlignment(Argument *Arg, Value *ArgInParamAS,
const NVPTXTargetLowering *TLI) {
Function *Func = Arg->getParent();
Type *StructType = Arg->getParamByValType();
- const DataLayout DL(Func->getParent());
+ const DataLayout &DL = Func->getDataLayout();
uint64_t NewArgAlign =
TLI->getFunctionParamOptimizedAlign(Func, StructType, DL).value();
diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp
index 9c9fc7a49a9d18..94e87656a192c7 100644
--- a/llvm/lib/Transforms/Utils/InlineFunction.cpp
+++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp
@@ -1896,8 +1896,8 @@ static void trackInlinedStores(Function::iterator Start, Function::iterator End,
LLVM_DEBUG(errs() << "trackInlinedStores into "
<< Start->getParent()->getName() << " from "
<< CB.getCalledFunction()->getName() << "\n");
- std::unique_ptr<DataLayout> DL = std::make_unique<DataLayout>(CB.getModule());
- at::trackAssignments(Start, End, collectEscapedLocals(*DL, CB), *DL);
+ const DataLayout &DL = CB.getDataLayout();
+ at::trackAssignments(Start, End, collectEscapedLocals(DL, CB), DL);
}
/// Update inlined instructions' DIAssignID metadata. We need to do this
diff --git a/llvm/unittests/IR/IRBuilderTest.cpp b/llvm/unittests/IR/IRBuilderTest.cpp
index ff96df85812002..434cca93ae720a 100644
--- a/llvm/unittests/IR/IRBuilderTest.cpp
+++ b/llvm/unittests/IR/IRBuilderTest.cpp
@@ -521,11 +521,10 @@ TEST_F(IRBuilderTest, GetIntTy) {
IntegerType *Ty1 = Builder.getInt1Ty();
EXPECT_EQ(Ty1, IntegerType::get(Ctx, 1));
- DataLayout* DL = new DataLayout(M.get());
- IntegerType *IntPtrTy = Builder.getIntPtrTy(*DL);
- unsigned IntPtrBitSize = DL->getPointerSizeInBits(0);
+ const DataLayout &DL = M->getDataLayout();
+ IntegerType *IntPtrTy = Builder.getIntPtrTy(DL);
+ unsigned IntPtrBitSize = DL.getPointerSizeInBits(0);
EXPECT_EQ(IntPtrTy, IntegerType::get(Ctx, IntPtrBitSize));
- delete DL;
}
TEST_F(IRBuilderTest, UnaryOperators) {
diff --git a/llvm/unittests/SandboxIR/SandboxIRTest.cpp b/llvm/unittests/SandboxIR/SandboxIRTest.cpp
index f98a60b49ecab3..b1e89f92a637da 100644
--- a/llvm/unittests/SandboxIR/SandboxIRTest.cpp
+++ b/llvm/unittests/SandboxIR/SandboxIRTest.cpp
@@ -1453,7 +1453,7 @@ define void @foo(ptr %ptr, <2 x ptr> %ptrs) {
// Check hasNoUnsignedWrap().
EXPECT_EQ(GEP->hasNoUnsignedWrap(), LLVMGEP->hasNoUnsignedWrap());
// Check accumulateConstantOffset().
- DataLayout DL(M.get());
+ const DataLayout &DL = M->getDataLayout();
APInt Offset1 =
APInt::getZero(DL.getIndexSizeInBits(GEP->getPointerAddressSpace()));
APInt Offset2 =
@@ -1533,7 +1533,7 @@ define void @foo() {
ret void
}
)IR");
- DataLayout DL(M.get());
+ const DataLayout &DL = M->getDataLayout();
llvm::Function &LLVMF = *M->getFunction("foo");
llvm::BasicBlock *LLVMBB = &*LLVMF.begin();
auto LLVMIt = LLVMBB->begin();
More information about the cfe-commits
mailing list