From: Duncan P. N. Exon Smith Date: Wed, 26 Mar 2014 19:26:05 +0000 (+0000) Subject: InstrProf: Use unique_ptr X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b16150ca73644a928dbe987bb2ef7bf37dfc5677;p=clang InstrProf: Use unique_ptr git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204846 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CodeGenPGO.cpp b/lib/CodeGen/CodeGenPGO.cpp index 34dca7c724..7b45650572 100644 --- a/lib/CodeGen/CodeGenPGO.cpp +++ b/lib/CodeGen/CodeGenPGO.cpp @@ -162,7 +162,7 @@ void CodeGenPGO::setFuncName(llvm::Function *Fn) { RawFuncName = RawFuncName.substr(1); if (!Fn->hasLocalLinkage()) { - PrefixedFuncName = new std::string(RawFuncName); + PrefixedFuncName.reset(new std::string(RawFuncName)); return; } @@ -170,7 +170,7 @@ void CodeGenPGO::setFuncName(llvm::Function *Fn) { // Do not include the full path in the file name since there's no guarantee // that it will stay the same, e.g., if the files are checked out from // version control in different locations. - PrefixedFuncName = new std::string(CGM.getCodeGenOpts().MainFileName); + PrefixedFuncName.reset(new std::string(CGM.getCodeGenOpts().MainFileName)); if (PrefixedFuncName->empty()) PrefixedFuncName->assign(""); PrefixedFuncName->append(":"); @@ -849,7 +849,7 @@ void CodeGenPGO::assignRegionCounters(const Decl *D, llvm::Function *Fn) { } void CodeGenPGO::mapRegionCounters(const Decl *D) { - RegionCounterMap = new llvm::DenseMap(); + RegionCounterMap.reset(new llvm::DenseMap); MapRegionCounters Walker(*RegionCounterMap); if (const FunctionDecl *FD = dyn_cast_or_null(D)) Walker.VisitFunctionDecl(FD); @@ -863,7 +863,7 @@ void CodeGenPGO::mapRegionCounters(const Decl *D) { } void CodeGenPGO::computeRegionCounts(const Decl *D) { - StmtCountMap = new llvm::DenseMap(); + StmtCountMap.reset(new llvm::DenseMap); ComputeRegionCounts Walker(*StmtCountMap, *this); if (const FunctionDecl *FD = dyn_cast_or_null(D)) Walker.VisitFunctionDecl(FD); @@ -917,22 +917,17 @@ void CodeGenPGO::loadRegionCounts(PGOProfileData *PGOData) { // counters does not match. This could be tightened down in the future to // ignore counts when the input changes in various ways, e.g., by comparing a // hash value based on some characteristics of the input. - RegionCounts = new std::vector(); + RegionCounts.reset(new std::vector); uint64_t Hash; if (PGOData->getFunctionCounts(getFuncName(), Hash, *RegionCounts) || - Hash != FunctionHash || RegionCounts->size() != NumRegionCounters) { - delete RegionCounts; - RegionCounts = 0; - } + Hash != FunctionHash || RegionCounts->size() != NumRegionCounters) + RegionCounts.reset(); } void CodeGenPGO::destroyRegionCounters() { - if (RegionCounterMap != 0) - delete RegionCounterMap; - if (StmtCountMap != 0) - delete StmtCountMap; - if (RegionCounts != 0) - delete RegionCounts; + RegionCounterMap.reset(); + StmtCountMap.reset(); + RegionCounts.reset(); } /// \brief Calculate what to divide by to scale weights. diff --git a/lib/CodeGen/CodeGenPGO.h b/lib/CodeGen/CodeGenPGO.h index 2645537cba..c59a58e3f8 100644 --- a/lib/CodeGen/CodeGenPGO.h +++ b/lib/CodeGen/CodeGenPGO.h @@ -53,26 +53,22 @@ public: class CodeGenPGO { private: CodeGenModule &CGM; - std::string *PrefixedFuncName; + std::unique_ptr PrefixedFuncName; StringRef RawFuncName; llvm::GlobalValue::LinkageTypes VarLinkage; unsigned NumRegionCounters; uint64_t FunctionHash; llvm::GlobalVariable *RegionCounters; - llvm::DenseMap *RegionCounterMap; - llvm::DenseMap *StmtCountMap; - std::vector *RegionCounts; + std::unique_ptr> RegionCounterMap; + std::unique_ptr> StmtCountMap; + std::unique_ptr> RegionCounts; uint64_t CurrentRegionCount; public: CodeGenPGO(CodeGenModule &CGM) - : CGM(CGM), PrefixedFuncName(0), NumRegionCounters(0), FunctionHash(0), - RegionCounters(0), RegionCounterMap(0), StmtCountMap(0), - RegionCounts(0), CurrentRegionCount(0) {} - ~CodeGenPGO() { - if (PrefixedFuncName) delete PrefixedFuncName; - } + : CGM(CGM), NumRegionCounters(0), FunctionHash(0), RegionCounters(0), + CurrentRegionCount(0) {} /// Whether or not we have PGO region data for the current function. This is /// false both when we have no data at all and when our data has been