[instrprof] Rename the profile kind types to be more descriptive.

Based on the discussion in D115393, I've updated the names to be more
descriptive.

Reviewed By: ellis, MaskRay

Differential Revision: https://reviews.llvm.org/D120092
This commit is contained in:
Snehasish Kumar 2022-02-17 14:44:49 -08:00
parent 9392c0d4ef
commit b681799938
5 changed files with 42 additions and 30 deletions

View File

@ -281,13 +281,20 @@ bool needsComdatForCounter(const Function &F, const Module &M);
/// An enum describing the attributes of an instrumented profile.
enum class InstrProfKind {
Unknown = 0x0,
FE = 0x1, // A frontend clang profile, incompatible with other attrs.
IR = 0x2, // An IR-level profile (default when -fprofile-generate is used).
BB = 0x4, // A profile with entry basic block instrumentation.
CS = 0x8, // A context sensitive IR-level profile.
SingleByteCoverage = 0x10, // Use single byte probes for coverage.
FunctionEntryOnly = 0x20, // Only instrument the function entry basic block.
MemProf = 0x40, // A memory profile collected using -fprofile=memory.
// A frontend clang profile, incompatible with other attrs.
FrontendInstrumentation = 0x1,
// An IR-level profile (default when -fprofile-generate is used).
IRInstrumentation = 0x2,
// A profile with entry basic block instrumentation.
FunctionEntryInstrumentation = 0x4,
// A context sensitive IR-level profile.
ContextSensitive = 0x8,
// Use single byte probes for coverage.
SingleByteCoverage = 0x10,
// Only instrument the function entry basic block.
FunctionEntryOnly = 0x20,
// A memory profile collected using -fprofile=memory.
MemProf = 0x40,
LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/MemProf)
};

View File

@ -213,15 +213,16 @@ public:
static bool hasFormat(const MemoryBuffer &Buffer);
bool isIRLevelProfile() const override {
return static_cast<bool>(ProfileKind & InstrProfKind::IR);
return static_cast<bool>(ProfileKind & InstrProfKind::IRInstrumentation);
}
bool hasCSIRLevelProfile() const override {
return static_cast<bool>(ProfileKind & InstrProfKind::CS);
return static_cast<bool>(ProfileKind & InstrProfKind::ContextSensitive);
}
bool instrEntryBBEnabled() const override {
return static_cast<bool>(ProfileKind & InstrProfKind::BB);
return static_cast<bool>(ProfileKind &
InstrProfKind::FunctionEntryInstrumentation);
}
bool hasSingleByteCoverage() const override {

View File

@ -106,11 +106,13 @@ public:
// Check if the profiles are in-compatible. Clang frontend profiles can't be
// merged with other profile types.
if (static_cast<bool>((ProfileKind & InstrProfKind::FE) ^
(Other & InstrProfKind::FE))) {
if (static_cast<bool>(
(ProfileKind & InstrProfKind::FrontendInstrumentation) ^
(Other & InstrProfKind::FrontendInstrumentation))) {
return make_error<InstrProfError>(instrprof_error::unsupported_version);
}
if (testIncompatible(InstrProfKind::FunctionEntryOnly, InstrProfKind::BB)) {
if (testIncompatible(InstrProfKind::FunctionEntryOnly,
InstrProfKind::FunctionEntryInstrumentation)) {
return make_error<InstrProfError>(
instrprof_error::unsupported_version,
"cannot merge FunctionEntryOnly profiles and BB profiles together");

View File

@ -45,13 +45,13 @@ using namespace llvm;
static InstrProfKind getProfileKindFromVersion(uint64_t Version) {
InstrProfKind ProfileKind = InstrProfKind::Unknown;
if (Version & VARIANT_MASK_IR_PROF) {
ProfileKind |= InstrProfKind::IR;
ProfileKind |= InstrProfKind::IRInstrumentation;
}
if (Version & VARIANT_MASK_CSIR_PROF) {
ProfileKind |= InstrProfKind::CS;
ProfileKind |= InstrProfKind::ContextSensitive;
}
if (Version & VARIANT_MASK_INSTR_ENTRY) {
ProfileKind |= InstrProfKind::BB;
ProfileKind |= InstrProfKind::FunctionEntryInstrumentation;
}
if (Version & VARIANT_MASK_BYTE_COVERAGE) {
ProfileKind |= InstrProfKind::SingleByteCoverage;
@ -177,16 +177,16 @@ Error TextInstrProfReader::readHeader() {
while (Line->startswith(":")) {
StringRef Str = Line->substr(1);
if (Str.equals_insensitive("ir"))
ProfileKind |= InstrProfKind::IR;
ProfileKind |= InstrProfKind::IRInstrumentation;
else if (Str.equals_insensitive("fe"))
ProfileKind |= InstrProfKind::FE;
ProfileKind |= InstrProfKind::FrontendInstrumentation;
else if (Str.equals_insensitive("csir")) {
ProfileKind |= InstrProfKind::IR;
ProfileKind |= InstrProfKind::CS;
ProfileKind |= InstrProfKind::IRInstrumentation;
ProfileKind |= InstrProfKind::ContextSensitive;
} else if (Str.equals_insensitive("entry_first"))
ProfileKind |= InstrProfKind::BB;
ProfileKind |= InstrProfKind::FunctionEntryInstrumentation;
else if (Str.equals_insensitive("not_entry_first"))
ProfileKind &= ~InstrProfKind::BB;
ProfileKind &= ~InstrProfKind::FunctionEntryInstrumentation;
else
return error(instrprof_error::bad_header);
++Line;

View File

@ -336,11 +336,12 @@ Error InstrProfWriter::writeImpl(ProfOStream &OS) {
IndexedInstrProf::Header Header;
Header.Magic = IndexedInstrProf::Magic;
Header.Version = IndexedInstrProf::ProfVersion::CurrentVersion;
if (static_cast<bool>(ProfileKind & InstrProfKind::IR))
if (static_cast<bool>(ProfileKind & InstrProfKind::IRInstrumentation))
Header.Version |= VARIANT_MASK_IR_PROF;
if (static_cast<bool>(ProfileKind & InstrProfKind::CS))
if (static_cast<bool>(ProfileKind & InstrProfKind::ContextSensitive))
Header.Version |= VARIANT_MASK_CSIR_PROF;
if (static_cast<bool>(ProfileKind & InstrProfKind::BB))
if (static_cast<bool>(ProfileKind &
InstrProfKind::FunctionEntryInstrumentation))
Header.Version |= VARIANT_MASK_INSTR_ENTRY;
if (static_cast<bool>(ProfileKind & InstrProfKind::SingleByteCoverage))
Header.Version |= VARIANT_MASK_BYTE_COVERAGE;
@ -381,7 +382,7 @@ Error InstrProfWriter::writeImpl(ProfOStream &OS) {
OS.write(0);
uint64_t CSSummaryOffset = 0;
uint64_t CSSummarySize = 0;
if (static_cast<bool>(ProfileKind & InstrProfKind::CS)) {
if (static_cast<bool>(ProfileKind & InstrProfKind::ContextSensitive)) {
CSSummaryOffset = OS.tell();
CSSummarySize = SummarySize / sizeof(uint64_t);
for (unsigned I = 0; I < CSSummarySize; I++)
@ -438,7 +439,7 @@ Error InstrProfWriter::writeImpl(ProfOStream &OS) {
// For Context Sensitive summary.
std::unique_ptr<IndexedInstrProf::Summary> TheCSSummary = nullptr;
if (static_cast<bool>(ProfileKind & InstrProfKind::CS)) {
if (static_cast<bool>(ProfileKind & InstrProfKind::ContextSensitive)) {
TheCSSummary = IndexedInstrProf::allocSummary(SummarySize);
std::unique_ptr<ProfileSummary> CSPS = CSISB.getSummary();
setSummary(TheCSSummary.get(), *CSPS);
@ -553,12 +554,13 @@ void InstrProfWriter::writeRecordInText(StringRef Name, uint64_t Hash,
Error InstrProfWriter::writeText(raw_fd_ostream &OS) {
// Check CS first since it implies an IR level profile.
if (static_cast<bool>(ProfileKind & InstrProfKind::CS))
if (static_cast<bool>(ProfileKind & InstrProfKind::ContextSensitive))
OS << "# CSIR level Instrumentation Flag\n:csir\n";
else if (static_cast<bool>(ProfileKind & InstrProfKind::IR))
else if (static_cast<bool>(ProfileKind & InstrProfKind::IRInstrumentation))
OS << "# IR level Instrumentation Flag\n:ir\n";
if (static_cast<bool>(ProfileKind & InstrProfKind::BB))
if (static_cast<bool>(ProfileKind &
InstrProfKind::FunctionEntryInstrumentation))
OS << "# Always instrument the function entry block\n:entry_first\n";
InstrProfSymtab Symtab;