llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Sergei Barannikov (s-barannikov) <details> <summary>Changes</summary> 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. Note that the constructor is a part of public interface, but the fix is trivial so I skipped the deprecation part. Depends on #<!-- -->102839. --- Full diff: https://github.com/llvm/llvm-project/pull/102841.diff 11 Files Affected: - (modified) clang/lib/CodeGen/CGObjCGNU.cpp (+15-16) - (modified) clang/lib/CodeGen/CodeGenTBAA.cpp (+1-1) - (modified) llvm/include/llvm/IR/DataLayout.h (-6) - (modified) llvm/lib/Analysis/InlineCost.cpp (+1-2) - (modified) llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp (+1-2) - (modified) llvm/lib/FuzzMutate/RandomIRBuilder.cpp (+2-2) - (modified) llvm/lib/IR/DataLayout.cpp (-7) - (modified) llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp (+1-1) - (modified) llvm/lib/Transforms/Utils/InlineFunction.cpp (+2-2) - (modified) llvm/unittests/IR/IRBuilderTest.cpp (+3-4) - (modified) llvm/unittests/SandboxIR/SandboxIRTest.cpp (+2-2) ``````````diff 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(); `````````` </details> https://github.com/llvm/llvm-project/pull/102841 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits