diff --git a/llvm/include/llvm/ProfileData/SampleProf.h b/llvm/include/llvm/ProfileData/SampleProf.h --- a/llvm/include/llvm/ProfileData/SampleProf.h +++ b/llvm/include/llvm/ProfileData/SampleProf.h @@ -728,7 +728,7 @@ using BodySampleMap = std::map; // NOTE: Using a StringMap here makes parsed profiles consume around 17% more // memory, which is *very* significant for large profiles. -using FunctionSamplesMap = std::map>; +using FunctionSamplesMap = std::map; using CallsiteSampleMap = std::map; using LocToLocMap = std::unordered_map; diff --git a/llvm/lib/ProfileData/SampleProf.cpp b/llvm/lib/ProfileData/SampleProf.cpp --- a/llvm/lib/ProfileData/SampleProf.cpp +++ b/llvm/lib/ProfileData/SampleProf.cpp @@ -474,7 +474,7 @@ if (NodeProfile) { // Add child profile to the callsite profile map. auto &SamplesMap = NodeProfile->functionSamplesAt(ChildNode.CallSiteLoc); - SamplesMap.emplace(OrigChildContext.getName().str(), *ChildProfile); + SamplesMap.emplace(OrigChildContext.getName(), *ChildProfile); NodeProfile->addTotalSamples(ChildProfile->getTotalSamples()); // Remove the corresponding body sample for the callsite and update the // total weight. @@ -498,7 +498,7 @@ ProfileMap[ChildProfile->getContext()].merge(*ChildProfile); NewChildProfileHash = ChildProfile->getContext().getHashCode(); auto &SamplesMap = NodeProfile->functionSamplesAt(ChildNode.CallSiteLoc); - SamplesMap[ChildProfile->getName().str()].getContext().setAttribute( + SamplesMap[ChildProfile->getName()].getContext().setAttribute( ContextDuplicatedIntoBase); } diff --git a/llvm/lib/ProfileData/SampleProfReader.cpp b/llvm/lib/ProfileData/SampleProfReader.cpp --- a/llvm/lib/ProfileData/SampleProfReader.cpp +++ b/llvm/lib/ProfileData/SampleProfReader.cpp @@ -392,7 +392,7 @@ switch (LineTy) { case LineType::CallSiteProfile: { FunctionSamples &FSamples = InlineStack.back()->functionSamplesAt( - LineLocation(LineOffset, Discriminator))[std::string(FName)]; + LineLocation(LineOffset, Discriminator))[FName]; FSamples.setName(FName); MergeResult(Result, FSamples.addTotalSamples(NumSamples)); InlineStack.push_back(&FSamples); @@ -657,7 +657,7 @@ uint32_t DiscriminatorVal = (*Discriminator) & getDiscriminatorMask(); FunctionSamples &CalleeProfile = FProfile.functionSamplesAt( - LineLocation(*LineOffset, DiscriminatorVal))[std::string(*FName)]; + LineLocation(*LineOffset, DiscriminatorVal))[*FName]; CalleeProfile.setName(*FName); if (std::error_code EC = readProfile(CalleeProfile)) return EC; @@ -1252,7 +1252,7 @@ CalleeProfile = const_cast( &FProfile->functionSamplesAt(LineLocation( *LineOffset, - *Discriminator))[std::string(FContext.getName())]); + *Discriminator))[FContext.getName()]); } if (std::error_code EC = readFuncMetadata(ProfileHasAttribute, CalleeProfile)) @@ -1674,7 +1674,7 @@ uint32_t LineOffset = Offset >> 16; uint32_t Discriminator = Offset & 0xffff; FProfile = &CallerProfile->functionSamplesAt( - LineLocation(LineOffset, Discriminator))[std::string(Name)]; + LineLocation(LineOffset, Discriminator))[Name]; } FProfile->setName(Name); diff --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp --- a/llvm/tools/llvm-profdata/llvm-profdata.cpp +++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp @@ -904,8 +904,7 @@ for (const auto &Callsite : CallsiteSamples.second) { sampleprof::FunctionSamples Remapped = remapSamples(Callsite.second, Remapper, Error); - MergeResult(Error, - Target[std::string(Remapped.getName())].merge(Remapped)); + MergeResult(Error, Target[Remapped.getName()].merge(Remapped)); } } return Result; diff --git a/llvm/tools/llvm-profgen/ProfileGenerator.cpp b/llvm/tools/llvm-profgen/ProfileGenerator.cpp --- a/llvm/tools/llvm-profgen/ProfileGenerator.cpp +++ b/llvm/tools/llvm-profgen/ProfileGenerator.cpp @@ -610,7 +610,7 @@ FunctionSamplesMap &SamplesMap = FunctionProfile->functionSamplesAt(Callsite); auto Ret = - SamplesMap.emplace(FrameVec[I].FuncName.str(), FunctionSamples()); + SamplesMap.emplace(FrameVec[I].FuncName, FunctionSamples()); if (Ret.second) { SampleContext Context(FrameVec[I].FuncName); Ret.first->second.setContext(Context); diff --git a/llvm/unittests/ProfileData/SampleProfTest.cpp b/llvm/unittests/ProfileData/SampleProfTest.cpp --- a/llvm/unittests/ProfileData/SampleProfTest.cpp +++ b/llvm/unittests/ProfileData/SampleProfTest.cpp @@ -157,7 +157,7 @@ // Add inline instance with name "_Z3gooi". StringRef GooName("_Z3gooi"); auto &GooSamples = - FooSamples.functionSamplesAt(LineLocation(7, 0))[GooName.str()]; + FooSamples.functionSamplesAt(LineLocation(7, 0))[GooName]; GooSamples.setName(GooName); GooSamples.addTotalSamples(502); GooSamples.addBodySamples(3, 0, 502); @@ -165,7 +165,7 @@ // Add inline instance with name "_Z3hooi". StringRef HooName("_Z3hooi"); auto &HooSamples = - GooSamples.functionSamplesAt(LineLocation(9, 0))[HooName.str()]; + GooSamples.functionSamplesAt(LineLocation(9, 0))[HooName]; HooSamples.setName(HooName); HooSamples.addTotalSamples(317); HooSamples.addBodySamples(4, 0, 317);