mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 06:32:24 +00:00
This required some minor API to be added to these types to avoid needing temp files. Also, I've used initializer lists in the tests, as MSVC 2013 claims to support them. I'll redo this without them if the bots complain. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229455 91177308-0d34-0410-b5e6-96231b3b80d8
55 lines
1.7 KiB
C++
55 lines
1.7 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_INSTRPROFWRITER_H
|
|
#define LLVM_PROFILEDATA_INSTRPROFWRITER_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);
|
|
/// Write the profile to \c OS
|
|
void write(raw_fd_ostream &OS);
|
|
/// Write the profile, returning the raw data. For testing.
|
|
std::string writeString();
|
|
private:
|
|
std::pair<uint64_t, uint64_t> writeImpl(raw_ostream &OS);
|
|
};
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif
|