![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/self/root/usr/lib/llvm-10/include/llvm/ProfileData/ |
Upload File : |
//===- ProfileCommon.h - Common profiling APIs. -----------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains data structures and functions common to both instrumented // and sample profiling. // //===----------------------------------------------------------------------===// #ifndef LLVM_PROFILEDATA_PROFILECOMMON_H #define LLVM_PROFILEDATA_PROFILECOMMON_H #include "llvm/ADT/ArrayRef.h" #include "llvm/IR/ProfileSummary.h" #include "llvm/ProfileData/InstrProf.h" #include "llvm/Support/Error.h" #include <algorithm> #include <cstdint> #include <functional> #include <map> #include <memory> #include <vector> namespace llvm { namespace sampleprof { class FunctionSamples; } // end namespace sampleprof inline const char *getHotSectionPrefix() { return ".hot"; } inline const char *getUnlikelySectionPrefix() { return ".unlikely"; } class ProfileSummaryBuilder { private: /// We keep track of the number of times a count (block count or samples) /// appears in the profile. The map is kept sorted in the descending order of /// counts. std::map<uint64_t, uint32_t, std::greater<uint64_t>> CountFrequencies; std::vector<uint32_t> DetailedSummaryCutoffs; protected: SummaryEntryVector DetailedSummary; uint64_t TotalCount = 0; uint64_t MaxCount = 0; uint64_t MaxFunctionCount = 0; uint32_t NumCounts = 0; uint32_t NumFunctions = 0; ProfileSummaryBuilder(std::vector<uint32_t> Cutoffs) : DetailedSummaryCutoffs(std::move(Cutoffs)) {} ~ProfileSummaryBuilder() = default; inline void addCount(uint64_t Count); void computeDetailedSummary(); public: /// A vector of useful cutoff values for detailed summary. static const ArrayRef<uint32_t> DefaultCutoffs; }; class InstrProfSummaryBuilder final : public ProfileSummaryBuilder { uint64_t MaxInternalBlockCount = 0; inline void addEntryCount(uint64_t Count); inline void addInternalCount(uint64_t Count); public: InstrProfSummaryBuilder(std::vector<uint32_t> Cutoffs) : ProfileSummaryBuilder(std::move(Cutoffs)) {} void addRecord(const InstrProfRecord &); std::unique_ptr<ProfileSummary> getSummary(); }; class SampleProfileSummaryBuilder final : public ProfileSummaryBuilder { public: SampleProfileSummaryBuilder(std::vector<uint32_t> Cutoffs) : ProfileSummaryBuilder(std::move(Cutoffs)) {} void addRecord(const sampleprof::FunctionSamples &FS, bool isCallsiteSample = false); std::unique_ptr<ProfileSummary> getSummary(); }; /// This is called when a count is seen in the profile. void ProfileSummaryBuilder::addCount(uint64_t Count) { TotalCount += Count; if (Count > MaxCount) MaxCount = Count; NumCounts++; CountFrequencies[Count]++; } } // end namespace llvm #endif // LLVM_PROFILEDATA_PROFILECOMMON_H