mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-23 17:28:54 +00:00
This updates the instrumentation based profiling format so that when we have multiple functions with the same name (but different function hashes) we keep all of them instead of rejecting the later ones. There are a number of scenarios where this can come up where it's more useful to keep multiple function profiles: * Name collisions in unrelated libraries that are profiled together. * Multiple "main" functions from multiple tools built against a common library. * Combining profiles from different build configurations (ie, asserts and no-asserts) The profile format now stores the number of counters between the hash and the counts themselves, so that multiple sets of counts can be stored. Since this is backwards incompatible, I've bumped the format version and added some trivial logic to skip this when reading the old format. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214585 91177308-0d34-0410-b5e6-96231b3b80d8
52 lines
1.6 KiB
C++
52 lines
1.6 KiB
C++
//=-- InstrProfWriter.h - Instrumented profiling writer -----------*- C++ -*-=//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file contains support for writing profiling data for instrumentation
|
|
// based PGO and coverage.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_PROFILEDATA_INSTRPROF_WRITER_H_
|
|
#define LLVM_PROFILEDATA_INSTRPROF_WRITER_H_
|
|
|
|
#include "llvm/ADT/ArrayRef.h"
|
|
#include "llvm/ADT/DenseMap.h"
|
|
#include "llvm/ADT/StringMap.h"
|
|
#include "llvm/ProfileData/InstrProf.h"
|
|
#include "llvm/Support/DataTypes.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
|
|
#include <vector>
|
|
|
|
namespace llvm {
|
|
|
|
/// Writer for instrumentation based profile data.
|
|
class InstrProfWriter {
|
|
public:
|
|
typedef SmallDenseMap<uint64_t, std::vector<uint64_t>, 1> CounterData;
|
|
private:
|
|
StringMap<CounterData> FunctionData;
|
|
uint64_t MaxFunctionCount;
|
|
public:
|
|
InstrProfWriter() : MaxFunctionCount(0) {}
|
|
|
|
/// Add function counts for the given function. If there are already counts
|
|
/// for this function and the hash and number of counts match, each counter is
|
|
/// summed.
|
|
std::error_code addFunctionCounts(StringRef FunctionName,
|
|
uint64_t FunctionHash,
|
|
ArrayRef<uint64_t> Counters);
|
|
/// Ensure that all data is written to disk.
|
|
void write(raw_fd_ostream &OS);
|
|
};
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_PROFILE_INSTRPROF_WRITER_H_
|