[llvm] r259941 - [PGO] Speed up name tab reading
Sean Silva via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 5 15:05:26 PST 2016
On Fri, Feb 5, 2016 at 2:32 PM, Xinliang David Li via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: davidxl
> Date: Fri Feb 5 16:32:01 2016
> New Revision: 259941
>
> URL: http://llvm.org/viewvc/llvm-project?rev=259941&view=rev
> Log:
> [PGO] Speed up name tab reading
> The change allows skipping duplicate strings
> early to avoid redundant md5 computation and
> string copying/swapping.
>
>
>
>
> Modified:
> llvm/trunk/include/llvm/ProfileData/InstrProf.h
>
> Modified: llvm/trunk/include/llvm/ProfileData/InstrProf.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/InstrProf.h?rev=259941&r1=259940&r2=259941&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ProfileData/InstrProf.h (original)
> +++ llvm/trunk/include/llvm/ProfileData/InstrProf.h Fri Feb 5 16:32:01
> 2016
> @@ -269,17 +269,20 @@ public:
> private:
> StringRef Data;
> uint64_t Address;
> - // A map from MD5 hash keys to function name strings.
> - std::vector<std::pair<uint64_t, std::string>> HashNameMap;
> + // Unique name strings.
> + StringSet<> NameTab;
> + // A map from MD5 keys to function name strings.
> + std::vector<std::pair<uint64_t, StringRef>> MD5NameMap;
> // A map from function runtime address to function name MD5 hash.
> // This map is only populated and used by raw instr profile reader.
> AddrHashMap AddrToMD5Map;
>
> public:
> - InstrProfSymtab() : Data(), Address(0), HashNameMap(), AddrToMD5Map() {}
> + InstrProfSymtab()
> + : Data(), Address(0), NameTab(), MD5NameMap(), AddrToMD5Map() {}
>
> /// Create InstrProfSymtab from an object file section which
> - /// contains function PGO names. When section may contain raw
> + /// contains function PGO names. When section may contain raw
> /// string data or string data in compressed form. This method
> /// only initialize the symtab with reference to the data and
> /// the section base address. The decompression will be delayed
> @@ -307,8 +310,10 @@ public:
> /// Update the symtab by adding \p FuncName to the table. This interface
> /// is used by the raw and text profile readers.
> void addFuncName(StringRef FuncName) {
> - HashNameMap.push_back(std::make_pair(
> - IndexedInstrProf::ComputeHash(FuncName), FuncName.str()));
> + auto ins = NameTab.insert(FuncName);
>
http://llvm.org/docs/CodingStandards.html#name-types-functions-variables-and-enumerators-properly
-- Sean Silva
> + if (ins.second)
> + MD5NameMap.push_back(std::make_pair(
> + IndexedInstrProf::ComputeHash(FuncName), ins.first->getKey()));
> }
> /// Map a function address to its name's MD5 hash. This interface
> /// is only used by the raw profiler reader.
> @@ -346,15 +351,13 @@ std::error_code InstrProfSymtab::create(
> template <typename NameIterRange>
> void InstrProfSymtab::create(const NameIterRange &IterRange) {
> for (auto Name : IterRange)
> - HashNameMap.push_back(
> - std::make_pair(IndexedInstrProf::ComputeHash(Name), Name.str()));
> + addFuncName(Name);
> +
> finalizeSymtab();
> }
>
> void InstrProfSymtab::finalizeSymtab() {
> - std::sort(HashNameMap.begin(), HashNameMap.end(), less_first());
> - HashNameMap.erase(std::unique(HashNameMap.begin(), HashNameMap.end()),
> - HashNameMap.end());
> + std::sort(MD5NameMap.begin(), MD5NameMap.end(), less_first());
> std::sort(AddrToMD5Map.begin(), AddrToMD5Map.end(), less_first());
> AddrToMD5Map.erase(std::unique(AddrToMD5Map.begin(),
> AddrToMD5Map.end()),
> AddrToMD5Map.end());
> @@ -362,10 +365,10 @@ void InstrProfSymtab::finalizeSymtab() {
>
> StringRef InstrProfSymtab::getFuncName(uint64_t FuncMD5Hash) {
> auto Result =
> - std::lower_bound(HashNameMap.begin(), HashNameMap.end(),
> FuncMD5Hash,
> + std::lower_bound(MD5NameMap.begin(), MD5NameMap.end(), FuncMD5Hash,
> [](const std::pair<uint64_t, std::string> &LHS,
> uint64_t RHS) { return LHS.first < RHS; });
> - if (Result != HashNameMap.end())
> + if (Result != MD5NameMap.end())
> return Result->second;
> return StringRef();
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160205/0a79179d/attachment.html>
More information about the llvm-commits
mailing list