1//===- bolt/Profile/ProfileReaderBase.h -------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Interface to be implemented by all profile readers.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef BOLT_PROFILE_PROFILE_READER_BASE_H
14#define BOLT_PROFILE_PROFILE_READER_BASE_H
15
16#include "llvm/ADT/StringSet.h"
17#include "llvm/Support/Error.h"
18
19namespace llvm {
20namespace bolt {
21
22class BinaryContext;
23class BinaryFunction;
24class BoltAddressTranslation;
25
26class ProfileReaderBase {
27protected:
28 /// Name of the file with profile.
29 std::string Filename;
30
31public:
32 ProfileReaderBase() = delete;
33 ProfileReaderBase(const ProfileReaderBase &) = delete;
34 ProfileReaderBase &operator=(const ProfileReaderBase &) = delete;
35 ProfileReaderBase(ProfileReaderBase &&) = delete;
36 ProfileReaderBase &operator=(ProfileReaderBase &&) = delete;
37
38 /// Construct a reader for a given file.
39 explicit ProfileReaderBase(StringRef Filename) : Filename(Filename) {}
40
41 virtual ~ProfileReaderBase() = default;
42
43 /// Return the name of the file containing the profile.
44 StringRef getFilename() const { return Filename; }
45
46 /// Instruct the profiler to use address-translation tables.
47 virtual void setBAT(BoltAddressTranslation *BAT) {}
48
49 /// Pre-process the profile when functions in \p BC are discovered,
50 /// but not yet disassembled. Once the profile is pre-processed, calls to
51 /// mayHaveProfileData() should be able to identify if the function possibly
52 /// has a profile available.
53 virtual Error preprocessProfile(BinaryContext &BC) = 0;
54
55 /// Assign profile to all objects in the \p BC while functions are
56 /// in pre-CFG state with instruction addresses available.
57 virtual Error readProfilePreCFG(BinaryContext &BC) = 0;
58
59 /// Assign profile to all objects in the \p BC.
60 virtual Error readProfile(BinaryContext &BC) = 0;
61
62 /// Return the string identifying the reader.
63 virtual StringRef getReaderName() const = 0;
64
65 /// Return true if the function \p BF may have a profile available.
66 /// The result is based on the name(s) of the function alone and the profile
67 /// match is not guaranteed.
68 virtual bool mayHaveProfileData(const BinaryFunction &BF) { return true; }
69
70 /// Return true if the profile contains an entry for a local object
71 /// that has an associated file name.
72 virtual bool hasLocalsWithFileName() const { return true; }
73
74 /// Return all event names used to collect this profile.
75 virtual StringSet<> getEventNames() const { return StringSet<>(); }
76
77 /// Return true if the source of the profile should be trusted. E.g., even
78 /// good source of profile data may contain discrepancies. Nevertheless, the
79 /// rest of the profile is correct.
80 virtual bool isTrustedSource() const = 0;
81};
82
83} // namespace bolt
84} // namespace llvm
85
86#endif
87

source code of bolt/include/bolt/Profile/ProfileReaderBase.h