Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions llvm/include/llvm/IR/PassInstrumentation.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,8 @@ class PassInstrumentationCallbacks {
/// Add a class name to pass name mapping for use by pass instrumentation.
LLVM_ABI void addClassToPassName(StringRef ClassName, StringRef PassName);
/// Get the pass name for a given pass class name.
LLVM_ABI StringRef getPassNameForClassName(StringRef ClassName);
LLVM_ABI std::optional<StringRef>
getPassNameForClassName(StringRef ClassName);

private:
friend class PassInstrumentation;
Expand Down Expand Up @@ -339,7 +340,8 @@ class PassInstrumentation {
/// Get the pass name for a given pass class name.
StringRef getPassNameForClassName(StringRef ClassName) const {
if (Callbacks)
return Callbacks->getPassNameForClassName(ClassName);
return Callbacks->getPassNameForClassName(ClassName).value_or(
StringRef());
return {};
}
};
Expand Down
3 changes: 2 additions & 1 deletion llvm/include/llvm/Passes/CodeGenPassBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -681,7 +681,8 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::setStartStopPasses(
}

auto PassName = PIC->getPassNameForClassName(ClassName);
if (Info.StartPass == PassName && ++Count == Info.StartInstanceNum)
if (PassName && Info.StartPass == *PassName &&
++Count == Info.StartInstanceNum)
Started = !Info.StartAfter;

return Started;
Expand Down
8 changes: 6 additions & 2 deletions llvm/lib/IR/PassInstrumentation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,21 @@ template struct LLVM_EXPORT_TEMPLATE Any::TypeId<const Loop *>;

void PassInstrumentationCallbacks::addClassToPassName(StringRef ClassName,
StringRef PassName) {
assert(!PassName.empty() && "PassName can't be empty!");
ClassToPassName.try_emplace(ClassName, PassName.str());
}

StringRef
std::optional<StringRef>
PassInstrumentationCallbacks::getPassNameForClassName(StringRef ClassName) {
if (!ClassToPassNameCallbacks.empty()) {
for (auto &Fn : ClassToPassNameCallbacks)
Fn();
ClassToPassNameCallbacks.clear();
}
return ClassToPassName[ClassName];
auto PassNameIter = ClassToPassName.find(ClassName);
if (PassNameIter != ClassToPassName.end())
return PassNameIter->second;
return std::nullopt;
}

AnalysisKey PassInstrumentationAnalysis::Key;
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/LTO/LTOBackend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ static void runNewPMPasses(const Config &Conf, Module &Mod, TargetMachine *TM,
raw_string_ostream OS(PipelineStr);
MPM.printPipeline(OS, [&PIC](StringRef ClassName) {
auto PassName = PIC.getPassNameForClassName(ClassName);
return PassName.empty() ? ClassName : PassName;
return PassName ? ClassName : *PassName;
});
outs() << "pipeline-passes: " << PipelineStr << '\n';
}
Expand Down
17 changes: 9 additions & 8 deletions llvm/lib/Passes/StandardInstrumentations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -454,12 +454,12 @@ template <typename T>
void ChangeReporter<T>::registerRequiredCallbacks(
PassInstrumentationCallbacks &PIC) {
PIC.registerBeforeNonSkippedPassCallback([&PIC, this](StringRef P, Any IR) {
saveIRBeforePass(IR, P, PIC.getPassNameForClassName(P));
saveIRBeforePass(IR, P, PIC.getPassNameForClassName(P).value_or(""));
});

PIC.registerAfterPassCallback(
[&PIC, this](StringRef P, Any IR, const PreservedAnalyses &) {
handleIRAfterPass(IR, P, PIC.getPassNameForClassName(P));
handleIRAfterPass(IR, P, PIC.getPassNameForClassName(P).value_or(""));
});
PIC.registerAfterPassInvalidatedCallback(
[this](StringRef P, const PreservedAnalyses &) {
Expand Down Expand Up @@ -970,15 +970,15 @@ bool PrintIRInstrumentation::shouldPrintBeforePass(StringRef PassID) {
if (shouldPrintBeforeAll())
return true;

StringRef PassName = PIC->getPassNameForClassName(PassID);
StringRef PassName = PIC->getPassNameForClassName(PassID).value_or("");
return is_contained(printBeforePasses(), PassName);
}

bool PrintIRInstrumentation::shouldPrintAfterPass(StringRef PassID) {
if (shouldPrintAfterAll())
return true;

StringRef PassName = PIC->getPassNameForClassName(PassID);
StringRef PassName = PIC->getPassNameForClassName(PassID).value_or("");
return is_contained(printAfterPasses(), PassName);
}

Expand Down Expand Up @@ -1080,10 +1080,10 @@ void OptPassGateInstrumentation::registerCallbacks(

PIC.registerShouldRunOptionalPassCallback(
[this, &PIC](StringRef ClassName, Any IR) {
StringRef PassName = PIC.getPassNameForClassName(ClassName);
if (PassName.empty())
auto PassName = PIC.getPassNameForClassName(ClassName);
if (!PassName)
return this->shouldRun(ClassName, IR);
return this->shouldRun(PassName, IR);
return this->shouldRun(*PassName, IR);
});
}

Expand Down Expand Up @@ -2501,7 +2501,8 @@ void PrintCrashIRInstrumentation::registerCallbacks(
raw_string_ostream OS(SavedIR);
OS << formatv("*** Dump of {0}IR Before Last Pass {1}",
llvm::forcePrintModuleIR() ? "Module " : "", PassID);
if (!isInteresting(IR, PassID, PIC.getPassNameForClassName(PassID))) {
if (!isInteresting(IR, PassID,
PIC.getPassNameForClassName(PassID).value_or(""))) {
OS << " Filtered Out ***\n";
return;
}
Expand Down
2 changes: 1 addition & 1 deletion llvm/tools/llc/NewPMDriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ int llvm::compileModuleWithNewPM(
raw_string_ostream OS(PipelineStr);
MPM.printPipeline(OS, [&PIC](StringRef ClassName) {
auto PassName = PIC.getPassNameForClassName(ClassName);
return PassName.empty() ? ClassName : PassName;
return PassName ? ClassName : *PassName;
});
outs() << PipelineStr << '\n';
return 0;
Expand Down
2 changes: 1 addition & 1 deletion llvm/tools/opt/NewPMDriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ bool llvm::runPassPipeline(
raw_string_ostream SOS(Pipeline);
MPM.printPipeline(SOS, [&PIC](StringRef ClassName) {
auto PassName = PIC.getPassNameForClassName(ClassName);
return PassName.empty() ? ClassName : PassName;
return PassName ? ClassName : *PassName;
});
outs() << Pipeline;
outs() << "\n";
Expand Down
Loading