7#ifndef JLM_UTIL_STATISTICS_HPP
8#define JLM_UTIL_STATISTICS_HPP
20#include <unordered_map>
70 using Measurement = std::variant<std::string, int64_t, uint64_t, double>;
73 using TimerList = std::list<std::pair<std::string, util::Timer>>;
91 [[nodiscard]] std::string_view
110 [[nodiscard]] std::string
111 Serialize(
char fieldSeparator,
char nameValueSeparator)
const;
133 [[nodiscard]]
const T &
137 return std::get<T>(measurement);
151 HasTimer(
const std::string & name)
const noexcept;
181 Measurements_.emplace_back(std::make_pair(std::move(name), std::move(value)));
201 GetTimer(
const std::string & name)
const;
230 "#PointsToGraphExternallyAvailableNodes";
232 "#PointsToGraphNodesTargetsAllExternallyAvailable";
252 static inline const char *
Timer =
"Time";
305 std::optional<FilePath> directory,
306 std::string moduleName)
399 [[nodiscard]]
const std::string &
417 [[nodiscard]]
const std::string &
509 std::vector<std::unique_ptr<Statistics>>::const_iterator
it_;
588 [[nodiscard]] std::unique_ptr<Statistics>
595 if (it->get()->GetId() ==
id)
597 auto result = std::move(*it);
602 throw std::out_of_range(
"No Statistics with the given id has been collected");
std::size_t Size() const noexcept
bool Contains(const ItemType &item) const noexcept
void SetOutputDirectory(FilePath directory)
size_t NumDemandedStatistics() const noexcept
const std::string & GetModuleName() const noexcept
const HashSet< Statistics::Id > & GetDemandedStatistics() const noexcept
bool HasOutputDirectory() const noexcept
std::optional< FilePath > Directory_
void SetUniqueString(std::string uniqueString)
const FilePath & GetOutputDirectory() const noexcept
void SetDemandedStatistics(HashSet< Statistics::Id > demandedStatistics)
HashSet< Statistics::Id > DemandedStatistics_
StatisticsCollectorSettings()
StatisticsCollectorSettings(HashSet< Statistics::Id > demandedStatistics, std::optional< FilePath > directory, std::string moduleName)
void SetModuleName(std::string moduleName)
const FilePath & GetOrCreateOutputDirectory() const noexcept
bool isDemanded(Statistics::Id id) const noexcept
Checks if a statistics is demanded.
StatisticsCollectorSettings(HashSet< Statistics::Id > demandedStatistics)
const std::string & GetUniqueString() const noexcept
std::string UniqueString_
friend StatisticsCollector
std::ptrdiff_t difference_type
std::vector< std::unique_ptr< Statistics > >::const_iterator it_
const Statistics * GetStatistics() const noexcept
bool operator!=(const StatisticsIterator &other) const
const Statistics * operator->() const
StatisticsIterator & operator++()
const Statistics & operator*() const
bool operator==(const StatisticsIterator &other) const
StatisticsIterator operator++(int)
StatisticsIterator(const std::vector< std::unique_ptr< Statistics > >::const_iterator &it)
std::forward_iterator_tag iterator_category
IteratorRange< StatisticsIterator > StatisticsRange
bool IsDemanded(const Statistics &statistics) const noexcept
std::unique_ptr< Statistics > releaseStatistic(Statistics::Id id)
void PrintStatistics()
Print collected statistics to file. If no statistics have been collected, this is a no-op.
const StatisticsCollectorSettings & GetSettings() const noexcept
bool IsDemanded(Statistics::Id id) const noexcept
StatisticsCollectorSettings Settings_
std::vector< std::unique_ptr< Statistics > > CollectedStatistics_
std::unordered_map< std::string, size_t > OutputFileCounter_
void CollectDemandedStatistics(std::unique_ptr< Statistics > statistics)
StatisticsRange CollectedStatistics() const noexcept
File createOutputFile(std::string fileNameSuffix, bool includeCount=false)
StatisticsCollector(StatisticsCollectorSettings settings)
size_t NumCollectedStatistics() const noexcept
util::Timer & GetTimer(const std::string &name)
util::FilePath SourceFile_
std::string_view GetName() const
const util::FilePath & GetSourceFile() const
std::list< std::pair< std::string, util::Timer > > TimerList
Statistics::Id StatisticsId_
Statistics(const Statistics::Id &statisticsId, util::FilePath sourceFile)
MeasurementList Measurements_
bool HasTimer(const std::string &name) const noexcept
std::string Serialize(char fieldSeparator, char nameValueSeparator) const
const Measurement & GetMeasurement(const std::string &name) const
util::Timer & AddTimer(std::string name)
const T & GetMeasurementValue(const std::string &name) const
IteratorRange< MeasurementList::const_iterator > GetMeasurements() const
IteratorRange< TimerList::const_iterator > GetTimers() const
size_t GetTimerElapsedNanoseconds(const std::string &name) const
bool HasMeasurement(const std::string &name) const noexcept
@ InvariantValueRedirection
@ AggregateAllocaSplitting
@ AliasAnalysisPrecisionEvaluation
@ AgnosticModRefSummarizer
@ RegionAwareModRefSummarizer
Statistics::Id GetId() const noexcept
std::variant< std::string, int64_t, uint64_t, double > Measurement
std::list< std::pair< std::string, Measurement > > MeasurementList
void AddMeasurement(std::string name, T value)
std::string CreateRandomAlphanumericString(std::size_t length)
static const char * NumGepOperationsReduced
static const char * FunctionNameLabel_
static const char * TripCounts
static const char * NumFirstOrderInductionVariables
static const char * NumPointsToGraphAllocaNodes
static const char * NumPointsToGraphMemoryNodes
static const char * NumRvsdgNodes
static const char * NumPointsToGraphDeltaNodes
static const char * NumThreeAddressCodes
static const char * NumRvsdgNodesBefore
static const char * NumPointsToGraphRegisterNodes
static const char * NumConstantInductionVariables
static const char * NumPointsToGraphNodes
static const char * NumGepLSRCandidates
static const char * NumOperationsReduced
static const char * NumPointsToGraphMallocNodes
static const char * NumPointsToGraphImportNodes
static const char * NumRvsdgNodesAfter
static const char * NumTotalInductionVariables
static const char * NumPointsToGraphExternallyAvailableNodes
static const char * NumPointsToGraphExplicitEdges
static const char * NumPointsToGraphLambdaNodes
static const char * NumSecondOrderInductionVariables
static const char * NumPointsToGraphEdges
static const char * NumPointsToGraphNodesTargetsAllExternallyAvailable
static const char * NumArithmeticOperationsReduced
static const char * NumLoopVariablesTotal
static const char * NumLSRCandidates
static const char * NumArithmeticLSRCandidates
static const char * NumCfgNodes
static const char * NumRvsdgInputsAfter
static const char * NumLoops
static const char * NumRvsdgInputsBefore