mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Introduce namespace-scope functions to enable LLVM statistics without
passing the command-line parameter "-stats" and to print the resulting statistics without calling llvm_shutdown(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99893 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8260ea5c6c
commit
6ce57922bb
@ -29,6 +29,7 @@
|
||||
#include "llvm/System/Atomic.h"
|
||||
|
||||
namespace llvm {
|
||||
class raw_ostream;
|
||||
|
||||
class Statistic {
|
||||
public:
|
||||
@ -113,6 +114,15 @@ protected:
|
||||
#define STATISTIC(VARNAME, DESC) \
|
||||
static llvm::Statistic VARNAME = { DEBUG_TYPE, DESC, 0, 0 }
|
||||
|
||||
/// \brief Enable the collection and printing of statistics.
|
||||
void EnableStatistics();
|
||||
|
||||
/// \brief Print statistics to the file returned by CreateInfoOutputFile().
|
||||
void PrintStatistics();
|
||||
|
||||
/// \brief Print statistics to the given output stream.
|
||||
void PrintStatistics(raw_ostream &OS);
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
||||
|
@ -48,6 +48,8 @@ namespace {
|
||||
/// llvm_shutdown is called. We print statistics from the destructor.
|
||||
class StatisticInfo {
|
||||
std::vector<const Statistic*> Stats;
|
||||
friend void llvm::PrintStatistics();
|
||||
friend void llvm::PrintStatistics(raw_ostream &OS);
|
||||
public:
|
||||
~StatisticInfo();
|
||||
|
||||
@ -92,41 +94,55 @@ struct NameCompare {
|
||||
|
||||
// Print information when destroyed, iff command line option is specified.
|
||||
StatisticInfo::~StatisticInfo() {
|
||||
// Statistics not enabled?
|
||||
if (Stats.empty()) return;
|
||||
llvm::PrintStatistics();
|
||||
}
|
||||
|
||||
// Get the stream to write to.
|
||||
raw_ostream &OutStream = *CreateInfoOutputFile();
|
||||
void llvm::EnableStatistics() {
|
||||
Enabled.setValue(true);
|
||||
}
|
||||
|
||||
void llvm::PrintStatistics(raw_ostream &OS) {
|
||||
StatisticInfo &Stats = *StatInfo;
|
||||
|
||||
// Figure out how long the biggest Value and Name fields are.
|
||||
unsigned MaxNameLen = 0, MaxValLen = 0;
|
||||
for (size_t i = 0, e = Stats.size(); i != e; ++i) {
|
||||
for (size_t i = 0, e = Stats.Stats.size(); i != e; ++i) {
|
||||
MaxValLen = std::max(MaxValLen,
|
||||
(unsigned)utostr(Stats[i]->getValue()).size());
|
||||
(unsigned)utostr(Stats.Stats[i]->getValue()).size());
|
||||
MaxNameLen = std::max(MaxNameLen,
|
||||
(unsigned)std::strlen(Stats[i]->getName()));
|
||||
(unsigned)std::strlen(Stats.Stats[i]->getName()));
|
||||
}
|
||||
|
||||
// Sort the fields by name.
|
||||
std::stable_sort(Stats.begin(), Stats.end(), NameCompare());
|
||||
std::stable_sort(Stats.Stats.begin(), Stats.Stats.end(), NameCompare());
|
||||
|
||||
// Print out the statistics header...
|
||||
OutStream << "===" << std::string(73, '-') << "===\n"
|
||||
<< " ... Statistics Collected ...\n"
|
||||
<< "===" << std::string(73, '-') << "===\n\n";
|
||||
OS << "===" << std::string(73, '-') << "===\n"
|
||||
<< " ... Statistics Collected ...\n"
|
||||
<< "===" << std::string(73, '-') << "===\n\n";
|
||||
|
||||
// Print all of the statistics.
|
||||
for (size_t i = 0, e = Stats.size(); i != e; ++i) {
|
||||
std::string CountStr = utostr(Stats[i]->getValue());
|
||||
OutStream << std::string(MaxValLen-CountStr.size(), ' ')
|
||||
<< CountStr << " " << Stats[i]->getName()
|
||||
<< std::string(MaxNameLen-std::strlen(Stats[i]->getName()), ' ')
|
||||
<< " - " << Stats[i]->getDesc() << "\n";
|
||||
|
||||
for (size_t i = 0, e = Stats.Stats.size(); i != e; ++i) {
|
||||
std::string CountStr = utostr(Stats.Stats[i]->getValue());
|
||||
OS << std::string(MaxValLen-CountStr.size(), ' ')
|
||||
<< CountStr << " " << Stats.Stats[i]->getName()
|
||||
<< std::string(MaxNameLen-std::strlen(Stats.Stats[i]->getName()), ' ')
|
||||
<< " - " << Stats.Stats[i]->getDesc() << "\n";
|
||||
}
|
||||
|
||||
OutStream << '\n'; // Flush the output stream.
|
||||
OutStream.flush();
|
||||
|
||||
OS << '\n'; // Flush the output stream.
|
||||
OS.flush();
|
||||
|
||||
}
|
||||
|
||||
void llvm::PrintStatistics() {
|
||||
StatisticInfo &Stats = *StatInfo;
|
||||
|
||||
// Statistics not enabled?
|
||||
if (Stats.Stats.empty()) return;
|
||||
|
||||
// Get the stream to write to.
|
||||
raw_ostream &OutStream = *CreateInfoOutputFile();
|
||||
PrintStatistics(OutStream);
|
||||
delete &OutStream; // Close the file.
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user