InstrProfWriter.h revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)//=-- InstrProfWriter.h - Instrumented profiling writer -----------*- C++ -*-=//
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)//
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)//
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// License. See LICENSE.TXT for details.
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)//
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)//===----------------------------------------------------------------------===//
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)//
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// This file contains support for writing profiling data for instrumentation
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// based PGO and coverage.
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)//
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)//===----------------------------------------------------------------------===//
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef LLVM_PROFILEDATA_INSTRPROF_WRITER_H_
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define LLVM_PROFILEDATA_INSTRPROF_WRITER_H_
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "llvm/ADT/ArrayRef.h"
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "llvm/ADT/StringMap.h"
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "llvm/ProfileData/InstrProf.h"
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "llvm/Support/DataTypes.h"
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "llvm/Support/raw_ostream.h"
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <vector>
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace llvm {
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/// Writer for instrumentation based profile data.
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class InstrProfWriter {
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)public:
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  struct CounterData {
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    uint64_t Hash;
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    std::vector<uint64_t> Counts;
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  };
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)private:
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  StringMap<CounterData> FunctionData;
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)public:
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /// Add function counts for the given function. If there are already counts
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /// for this function and the hash and number of counts match, each counter is
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /// summed.
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  error_code addFunctionCounts(StringRef FunctionName, uint64_t FunctionHash,
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                               ArrayRef<uint64_t> Counters);
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /// Ensure that all data is written to disk.
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void write(raw_ostream &OS);
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // end namespace llvm
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // LLVM_PROFILE_INSTRPROF_WRITER_H_
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)