[llvm] [StandardInstrumentations] Add ExtendedIRContext and trait registration for custom IR types (PR #153171)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 2 05:47:01 PDT 2026
https://github.com/ankurepa updated https://github.com/llvm/llvm-project/pull/153171
>From 99f7bc2bcc460b5488c0e346ab1a9f67e3a4c542 Mon Sep 17 00:00:00 2001
From: Anja Kurepa <ankurepa at amd.com>
Date: Tue, 12 Aug 2025 14:08:06 +0200
Subject: [PATCH 1/9] [StandardInsturmentations] Add helper class to
StandardInstrumentations
---
.../llvm/Passes/StandardInstrumentations.h | 16 ++++++++++++++++
llvm/lib/Passes/StandardInstrumentations.cpp | 17 +++++++++++++++++
2 files changed, 33 insertions(+)
diff --git a/llvm/include/llvm/Passes/StandardInstrumentations.h b/llvm/include/llvm/Passes/StandardInstrumentations.h
index 4ee5ab25548682..3ee3ad3a2fc948 100644
--- a/llvm/include/llvm/Passes/StandardInstrumentations.h
+++ b/llvm/include/llvm/Passes/StandardInstrumentations.h
@@ -629,6 +629,22 @@ class StandardInstrumentations {
TimePassesHandler &getTimePasses() { return TimePasses; }
};
+class ExtendedIRType {
+public:
+ ExtendedIRType();
+
+ ExtendedIRType(const ExtendedIRType&) = delete;
+ ExtendedIRType& operator=(const ExtendedIRType&) = delete;
+
+ ExtendedIRType(ExtendedIRType&&) = delete;
+ ExtendedIRType& operator=(ExtendedIRType&&) = delete;
+
+ virtual ~ExtendedIRType();
+ virtual std::optional<std::string> getIRName(Any IR) = 0;
+
+ std::mutex ExtendedIRTypesAccess;
+};
+
extern template class BlockDataT<EmptyData>;
extern template class FuncDataT<EmptyData>;
extern template class IRDataT<EmptyData>;
diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index f165e85baf611a..94cb574d7fd523 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -237,6 +237,8 @@ void printIR(raw_ostream &OS, const MachineFunction *MF) {
MF->print(OS);
}
+static std::vector<ExtendedIRType *> ExtendedIRTypes;
+
std::string getIRName(Any IR) {
if (unwrapIR<Module>(IR))
return "[module]";
@@ -254,6 +256,11 @@ std::string getIRName(Any IR) {
if (const auto *MF = unwrapIR<MachineFunction>(IR))
return MF->getName().str();
+ for (auto *ExtendedIRType : ExtendedIRTypes) {
+ if (auto IRName = ExtendedIRType->getIRName(IR))
+ return *IRName;
+ }
+
llvm_unreachable("Unknown wrapped IR type");
}
@@ -407,6 +414,16 @@ void ChangeReporter<T>::saveIRBeforePass(Any IR, StringRef PassID,
generateIRRepresentation(IR, PassID, Data);
}
+ExtendedIRType::ExtendedIRType() {
+ std::lock_guard<std::mutex> Lock(ExtendedIRTypesAccess);
+ ExtendedIRTypes.push_back(this);
+}
+
+ExtendedIRType::~ExtendedIRType(){
+ std::lock_guard<std::mutex> Lock(ExtendedIRTypesAccess);
+ llvm::erase(ExtendedIRTypes, this);
+}
+
template <typename T>
void ChangeReporter<T>::handleIRAfterPass(Any IR, StringRef PassID,
StringRef PassName) {
>From 536b849e4b1a5206c82f8c9855b4b34b02283805 Mon Sep 17 00:00:00 2001
From: Anja Kurepa <ankurepa at amd.com>
Date: Thu, 8 Jan 2026 14:16:17 +0100
Subject: [PATCH 2/9] [StandardInsturmentations] Add helper class to
StandardInstrumentations - part 2
---
.../llvm/Passes/StandardInstrumentations.h | 42 ++++++++++-------
llvm/lib/Passes/StandardInstrumentations.cpp | 45 ++++++++++++-------
2 files changed, 55 insertions(+), 32 deletions(-)
diff --git a/llvm/include/llvm/Passes/StandardInstrumentations.h b/llvm/include/llvm/Passes/StandardInstrumentations.h
index 3ee3ad3a2fc948..3fa8112e6b59df 100644
--- a/llvm/include/llvm/Passes/StandardInstrumentations.h
+++ b/llvm/include/llvm/Passes/StandardInstrumentations.h
@@ -594,6 +594,31 @@ class PrintCrashIRInstrumentation {
static void SignalHandler(void *);
};
+
+class ExtendedIRType {
+public:
+ ExtendedIRType() = default;
+
+ ExtendedIRType(const ExtendedIRType&) = delete;
+ ExtendedIRType& operator=(const ExtendedIRType&) = delete;
+
+ ExtendedIRType(ExtendedIRType&&) = delete;
+ ExtendedIRType& operator=(ExtendedIRType&&) = delete;
+
+ virtual ~ExtendedIRType() = default;
+ virtual std::optional<std::string> getIRName(Any IR);
+ LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC);
+
+ // Register an extended IR type handler.
+ static LLVM_ABI void registerExtendedIRTypeHandler(std::function<std::optional<std::string>(Any)> Handler);
+
+ // Get IR name using registered handlers.
+ static LLVM_ABI std::optional<std::string> getExtendedIRName(Any IR);
+
+private:
+ static llvm::SmallVector<std::function<std::optional<std::string>(Any)>> ExtendedIRTypeHandlers;
+};
+
/// This class provides an interface to register all the standard pass
/// instrumentations and manages their state (if any).
class StandardInstrumentations {
@@ -612,6 +637,7 @@ class StandardInstrumentations {
IRChangedTester ChangeTester;
VerifyInstrumentation Verify;
DroppedVariableStatsIR DroppedStatsIR;
+ ExtendedIRType ExtendedIR;
bool VerifyEach;
@@ -629,22 +655,6 @@ class StandardInstrumentations {
TimePassesHandler &getTimePasses() { return TimePasses; }
};
-class ExtendedIRType {
-public:
- ExtendedIRType();
-
- ExtendedIRType(const ExtendedIRType&) = delete;
- ExtendedIRType& operator=(const ExtendedIRType&) = delete;
-
- ExtendedIRType(ExtendedIRType&&) = delete;
- ExtendedIRType& operator=(ExtendedIRType&&) = delete;
-
- virtual ~ExtendedIRType();
- virtual std::optional<std::string> getIRName(Any IR) = 0;
-
- std::mutex ExtendedIRTypesAccess;
-};
-
extern template class BlockDataT<EmptyData>;
extern template class FuncDataT<EmptyData>;
extern template class IRDataT<EmptyData>;
diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index 94cb574d7fd523..a5fb7661f0dc67 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -237,8 +237,6 @@ void printIR(raw_ostream &OS, const MachineFunction *MF) {
MF->print(OS);
}
-static std::vector<ExtendedIRType *> ExtendedIRTypes;
-
std::string getIRName(Any IR) {
if (unwrapIR<Module>(IR))
return "[module]";
@@ -256,10 +254,8 @@ std::string getIRName(Any IR) {
if (const auto *MF = unwrapIR<MachineFunction>(IR))
return MF->getName().str();
- for (auto *ExtendedIRType : ExtendedIRTypes) {
- if (auto IRName = ExtendedIRType->getIRName(IR))
- return *IRName;
- }
+ if (auto IRName = ExtendedIRType::getExtendedIRName(IR))
+ return *IRName;
llvm_unreachable("Unknown wrapped IR type");
}
@@ -414,16 +410,6 @@ void ChangeReporter<T>::saveIRBeforePass(Any IR, StringRef PassID,
generateIRRepresentation(IR, PassID, Data);
}
-ExtendedIRType::ExtendedIRType() {
- std::lock_guard<std::mutex> Lock(ExtendedIRTypesAccess);
- ExtendedIRTypes.push_back(this);
-}
-
-ExtendedIRType::~ExtendedIRType(){
- std::lock_guard<std::mutex> Lock(ExtendedIRTypesAccess);
- llvm::erase(ExtendedIRTypes, this);
-}
-
template <typename T>
void ChangeReporter<T>::handleIRAfterPass(Any IR, StringRef PassID,
StringRef PassName) {
@@ -2543,6 +2529,7 @@ void StandardInstrumentations::registerCallbacks(
ChangeTester.registerCallbacks(PIC);
PrintCrashIR.registerCallbacks(PIC);
DroppedStatsIR.registerCallbacks(PIC);
+ ExtendedIR.registerCallbacks(PIC);
if (MAM)
PreservedCFGChecker.registerCallbacks(PIC, *MAM);
@@ -2555,6 +2542,32 @@ void StandardInstrumentations::registerCallbacks(
TimeProfilingPasses.registerCallbacks(PIC);
}
+// ExtendedIRType implementation
+llvm::SmallVector<std::function<std::optional<std::string>(Any)>> ExtendedIRType::ExtendedIRTypeHandlers;
+
+std::optional<std::string> ExtendedIRType::getIRName(Any IR) {
+ // Default implementation returns nullopt.
+ return std::nullopt;
+}
+
+void ExtendedIRType::registerCallbacks(PassInstrumentationCallbacks &PIC) {
+ registerExtendedIRTypeHandler([this](Any IR) -> std::optional<std::string> {
+ return this->getIRName(IR);
+ });
+}
+
+void ExtendedIRType::registerExtendedIRTypeHandler(std::function<std::optional<std::string>(Any)> Handler) {
+ ExtendedIRTypeHandlers.push_back(std::move(Handler));
+}
+
+std::optional<std::string> ExtendedIRType::getExtendedIRName(Any IR) {
+ for (const auto &Handler : ExtendedIRTypeHandlers) {
+ if (auto IRName = Handler(IR))
+ return IRName;
+ }
+ return std::nullopt;
+}
+
template class ChangeReporter<std::string>;
template class TextChangeReporter<std::string>;
>From 0e42e4920583ececed1d5efa2477dce6a01f5539 Mon Sep 17 00:00:00 2001
From: Anja Kurepa <ankurepa at amd.com>
Date: Tue, 24 Feb 2026 12:52:47 +0100
Subject: [PATCH 3/9] [StandardInsturmentations] Add helper class to
StandardInstrumentations - part 3
---
.../llvm/Passes/StandardInstrumentations.h | 58 ++++++++++---------
llvm/lib/Passes/StandardInstrumentations.cpp | 40 +++----------
2 files changed, 39 insertions(+), 59 deletions(-)
diff --git a/llvm/include/llvm/Passes/StandardInstrumentations.h b/llvm/include/llvm/Passes/StandardInstrumentations.h
index 3fa8112e6b59df..dd00bb69190b43 100644
--- a/llvm/include/llvm/Passes/StandardInstrumentations.h
+++ b/llvm/include/llvm/Passes/StandardInstrumentations.h
@@ -41,6 +41,34 @@ class Function;
class MachineFunction;
class PassInstrumentationCallbacks;
+class ExtendedIRTraits {
+ public:
+ ExtendedIRTraits() = default;
+ ExtendedIRTraits(const ExtendedIRTraits&) = delete;
+ ExtendedIRTraits& operator=(const ExtendedIRTraits&) = delete;
+
+ ExtendedIRTraits(ExtendedIRTraits&&) = delete;
+ ExtendedIRTraits& operator=(ExtendedIRTraits&&) = delete;
+
+ virtual ~ExtendedIRTraits() = default;
+ virtual std::optional<std::string> getIRName(Any IR) = 0;
+};
+
+struct ExtendedIRContext {
+ ExtendedIRContext() = default;
+ ExtendedIRContext(const ExtendedIRContext&) = delete;
+ ExtendedIRContext& operator=(const ExtendedIRContext&) = delete;
+
+ ExtendedIRContext(ExtendedIRContext&&) = delete;
+ ExtendedIRContext& operator=(ExtendedIRContext&&) = delete;
+
+ llvm::SmallVector<std::unique_ptr<ExtendedIRTraits>> traits;
+ // Add an ExtendedIRTraits to the traits vector
+ void addTrait(std::unique_ptr<ExtendedIRTraits> trait) {
+ traits.push_back(std::move(trait));
+ }
+};
+
/// Instrumentation to print IR before/after passes.
///
/// Needs state to be able to print module after pass that invalidates IR unit
@@ -209,9 +237,9 @@ class PreservedCFGCheckerInstrumentation {
// 6. When a pass is run on an IR that is not interesting (based on options).
// 7. When a pass is ignored (pass manager or adapter pass).
// 8. To compare two IR representations (of type \p T).
-template <typename IRUnitT> class LLVM_ABI ChangeReporter {
+template <typename IRUnitT> class LLVM_ABI ChangeReporter : public ExtendedIRContext {
protected:
- ChangeReporter(bool RunInVerboseMode) : VerboseMode(RunInVerboseMode) {}
+ ChangeReporter(bool RunInVerboseMode) : ExtendedIRContext(), VerboseMode(RunInVerboseMode) {}
public:
virtual ~ChangeReporter();
@@ -594,31 +622,6 @@ class PrintCrashIRInstrumentation {
static void SignalHandler(void *);
};
-
-class ExtendedIRType {
-public:
- ExtendedIRType() = default;
-
- ExtendedIRType(const ExtendedIRType&) = delete;
- ExtendedIRType& operator=(const ExtendedIRType&) = delete;
-
- ExtendedIRType(ExtendedIRType&&) = delete;
- ExtendedIRType& operator=(ExtendedIRType&&) = delete;
-
- virtual ~ExtendedIRType() = default;
- virtual std::optional<std::string> getIRName(Any IR);
- LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC);
-
- // Register an extended IR type handler.
- static LLVM_ABI void registerExtendedIRTypeHandler(std::function<std::optional<std::string>(Any)> Handler);
-
- // Get IR name using registered handlers.
- static LLVM_ABI std::optional<std::string> getExtendedIRName(Any IR);
-
-private:
- static llvm::SmallVector<std::function<std::optional<std::string>(Any)>> ExtendedIRTypeHandlers;
-};
-
/// This class provides an interface to register all the standard pass
/// instrumentations and manages their state (if any).
class StandardInstrumentations {
@@ -637,7 +640,6 @@ class StandardInstrumentations {
IRChangedTester ChangeTester;
VerifyInstrumentation Verify;
DroppedVariableStatsIR DroppedStatsIR;
- ExtendedIRType ExtendedIR;
bool VerifyEach;
diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index a5fb7661f0dc67..d4ea3ebfd7d656 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -237,7 +237,7 @@ void printIR(raw_ostream &OS, const MachineFunction *MF) {
MF->print(OS);
}
-std::string getIRName(Any IR) {
+std::string getIRName(Any IR, ExtendedIRContext *Ctx = nullptr) {
if (unwrapIR<Module>(IR))
return "[module]";
@@ -254,8 +254,13 @@ std::string getIRName(Any IR) {
if (const auto *MF = unwrapIR<MachineFunction>(IR))
return MF->getName().str();
- if (auto IRName = ExtendedIRType::getExtendedIRName(IR))
- return *IRName;
+ if (Ctx) {
+ // Go through the traits and check if any of them apply
+ for (const auto& extendedIRTraits : Ctx->traits) {
+ if (auto IRName = extendedIRTraits->getIRName(IR))
+ return *IRName;
+ }
+ }
llvm_unreachable("Unknown wrapped IR type");
}
@@ -415,7 +420,7 @@ void ChangeReporter<T>::handleIRAfterPass(Any IR, StringRef PassID,
StringRef PassName) {
assert(!BeforeStack.empty() && "Unexpected empty stack encountered.");
- std::string Name = getIRName(IR);
+ std::string Name = getIRName(IR, this);
if (isIgnored(PassID)) {
if (VerboseMode)
@@ -2529,7 +2534,6 @@ void StandardInstrumentations::registerCallbacks(
ChangeTester.registerCallbacks(PIC);
PrintCrashIR.registerCallbacks(PIC);
DroppedStatsIR.registerCallbacks(PIC);
- ExtendedIR.registerCallbacks(PIC);
if (MAM)
PreservedCFGChecker.registerCallbacks(PIC, *MAM);
@@ -2542,32 +2546,6 @@ void StandardInstrumentations::registerCallbacks(
TimeProfilingPasses.registerCallbacks(PIC);
}
-// ExtendedIRType implementation
-llvm::SmallVector<std::function<std::optional<std::string>(Any)>> ExtendedIRType::ExtendedIRTypeHandlers;
-
-std::optional<std::string> ExtendedIRType::getIRName(Any IR) {
- // Default implementation returns nullopt.
- return std::nullopt;
-}
-
-void ExtendedIRType::registerCallbacks(PassInstrumentationCallbacks &PIC) {
- registerExtendedIRTypeHandler([this](Any IR) -> std::optional<std::string> {
- return this->getIRName(IR);
- });
-}
-
-void ExtendedIRType::registerExtendedIRTypeHandler(std::function<std::optional<std::string>(Any)> Handler) {
- ExtendedIRTypeHandlers.push_back(std::move(Handler));
-}
-
-std::optional<std::string> ExtendedIRType::getExtendedIRName(Any IR) {
- for (const auto &Handler : ExtendedIRTypeHandlers) {
- if (auto IRName = Handler(IR))
- return IRName;
- }
- return std::nullopt;
-}
-
template class ChangeReporter<std::string>;
template class TextChangeReporter<std::string>;
>From 01b18c9f38e740fd848fed938ea5ce9c38f7dbbb Mon Sep 17 00:00:00 2001
From: Anja Kurepa <ankurepa at amd.com>
Date: Fri, 7 Aug 2026 15:52:35 +0200
Subject: [PATCH 4/9] [StandardInsturmentations] Add helper class to
StandardInstrumentations - Add context to registerCallback
---
.../llvm/Passes/StandardInstrumentations.h | 86 +++++++++++--------
llvm/lib/Passes/StandardInstrumentations.cpp | 65 ++++++++------
2 files changed, 89 insertions(+), 62 deletions(-)
diff --git a/llvm/include/llvm/Passes/StandardInstrumentations.h b/llvm/include/llvm/Passes/StandardInstrumentations.h
index dd00bb69190b43..dd083f8c3e89bf 100644
--- a/llvm/include/llvm/Passes/StandardInstrumentations.h
+++ b/llvm/include/llvm/Passes/StandardInstrumentations.h
@@ -40,34 +40,7 @@ class Module;
class Function;
class MachineFunction;
class PassInstrumentationCallbacks;
-
-class ExtendedIRTraits {
- public:
- ExtendedIRTraits() = default;
- ExtendedIRTraits(const ExtendedIRTraits&) = delete;
- ExtendedIRTraits& operator=(const ExtendedIRTraits&) = delete;
-
- ExtendedIRTraits(ExtendedIRTraits&&) = delete;
- ExtendedIRTraits& operator=(ExtendedIRTraits&&) = delete;
-
- virtual ~ExtendedIRTraits() = default;
- virtual std::optional<std::string> getIRName(Any IR) = 0;
-};
-
-struct ExtendedIRContext {
- ExtendedIRContext() = default;
- ExtendedIRContext(const ExtendedIRContext&) = delete;
- ExtendedIRContext& operator=(const ExtendedIRContext&) = delete;
-
- ExtendedIRContext(ExtendedIRContext&&) = delete;
- ExtendedIRContext& operator=(ExtendedIRContext&&) = delete;
-
- llvm::SmallVector<std::unique_ptr<ExtendedIRTraits>> traits;
- // Add an ExtendedIRTraits to the traits vector
- void addTrait(std::unique_ptr<ExtendedIRTraits> trait) {
- traits.push_back(std::move(trait));
- }
-};
+struct ExtendedIRContext;
/// Instrumentation to print IR before/after passes.
///
@@ -77,7 +50,8 @@ class PrintIRInstrumentation {
public:
LLVM_ABI ~PrintIRInstrumentation();
- LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC);
+ LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC,
+ ExtendedIRContext *IRContext = nullptr);
private:
struct PassRunDescriptor {
@@ -128,15 +102,18 @@ class PrintIRInstrumentation {
/// Used for print-at-pass-number
unsigned CurrentPassNumber = 0;
+ ExtendedIRContext *IRContext = nullptr;
};
class OptNoneInstrumentation {
public:
OptNoneInstrumentation(bool DebugLogging) : DebugLogging(DebugLogging) {}
- LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC);
+ LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC,
+ ExtendedIRContext *IRContext = nullptr);
private:
bool DebugLogging;
+ ExtendedIRContext *IRContext = nullptr;
bool shouldRun(StringRef PassID, Any IR);
};
@@ -146,7 +123,11 @@ class OptPassGateInstrumentation {
public:
OptPassGateInstrumentation(LLVMContext &Context) : Context(Context) {}
LLVM_ABI bool shouldRun(StringRef PassName, Any IR);
- LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC);
+ LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC,
+ ExtendedIRContext *IRContext = nullptr);
+
+private:
+ ExtendedIRContext *IRContext = nullptr;
};
struct PrintPassOptions {
@@ -165,10 +146,12 @@ class PrintPassInstrumentation {
public:
PrintPassInstrumentation(bool Enabled, PrintPassOptions Opts)
: Enabled(Enabled), Opts(Opts) {}
- LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC);
+ LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC,
+ ExtendedIRContext *IRContext = nullptr);
private:
bool Enabled;
+ ExtendedIRContext *IRContext = nullptr;
PrintPassOptions Opts;
int Indent = 0;
};
@@ -222,6 +205,35 @@ class PreservedCFGCheckerInstrumentation {
ModuleAnalysisManager &MAM);
};
+class ExtendedIRTraits {
+ public:
+ ExtendedIRTraits() = default;
+ ExtendedIRTraits(const ExtendedIRTraits&) = delete;
+ ExtendedIRTraits& operator=(const ExtendedIRTraits&) = delete;
+
+ ExtendedIRTraits(ExtendedIRTraits&&) = delete;
+ ExtendedIRTraits& operator=(ExtendedIRTraits&&) = delete;
+
+ virtual ~ExtendedIRTraits() = default;
+ virtual std::optional<std::string> getIRName(Any IR) = 0;
+};
+
+struct ExtendedIRContext {
+ ExtendedIRContext() = default;
+ ExtendedIRContext(const ExtendedIRContext&) = delete;
+ ExtendedIRContext& operator=(const ExtendedIRContext&) = delete;
+
+ ExtendedIRContext(ExtendedIRContext&&) = delete;
+ ExtendedIRContext& operator=(ExtendedIRContext&&) = delete;
+
+ ExtendedIRContext* context;
+ llvm::SmallVector<std::unique_ptr<ExtendedIRTraits>> traits;
+ // Add an ExtendedIRTraits to the traits vector
+ void addTrait(std::unique_ptr<ExtendedIRTraits> trait) {
+ traits.push_back(std::move(trait));
+ }
+};
+
// Base class for classes that report changes to the IR.
// It presents an interface for such classes and provides calls
// on various events as the new pass manager transforms the IR.
@@ -239,7 +251,7 @@ class PreservedCFGCheckerInstrumentation {
// 8. To compare two IR representations (of type \p T).
template <typename IRUnitT> class LLVM_ABI ChangeReporter : public ExtendedIRContext {
protected:
- ChangeReporter(bool RunInVerboseMode) : ExtendedIRContext(), VerboseMode(RunInVerboseMode) {}
+ ChangeReporter(bool RunInVerboseMode) : VerboseMode(RunInVerboseMode) {}
public:
virtual ~ChangeReporter();
@@ -519,12 +531,15 @@ class TimeProfilingPassesHandler {
TimeProfilingPassesHandler(const TimeProfilingPassesHandler &) = delete;
void operator=(const TimeProfilingPassesHandler &) = delete;
- LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC);
+ LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC,
+ ExtendedIRContext *IRContext = nullptr);
private:
// Implementation of pass instrumentation callbacks.
void runBeforePass(StringRef PassID, Any IR);
void runAfterPass();
+
+ ExtendedIRContext *IRContext = nullptr;
};
// Class that holds transitions between basic blocks. The transitions
@@ -652,7 +667,8 @@ class StandardInstrumentations {
// Register all the standard instrumentation callbacks. If \p FAM is nullptr
// then PreservedCFGChecker is not enabled.
LLVM_ABI void registerCallbacks(PassInstrumentationCallbacks &PIC,
- ModuleAnalysisManager *MAM = nullptr);
+ ModuleAnalysisManager *MAM = nullptr,
+ ExtendedIRContext *IRContext = nullptr);
TimePassesHandler &getTimePasses() { return TimePasses; }
};
diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index d4ea3ebfd7d656..b5a62a6fd92677 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -237,7 +237,7 @@ void printIR(raw_ostream &OS, const MachineFunction *MF) {
MF->print(OS);
}
-std::string getIRName(Any IR, ExtendedIRContext *Ctx = nullptr) {
+std::string getIRName(Any IR, ExtendedIRContext *Context) {
if (unwrapIR<Module>(IR))
return "[module]";
@@ -254,9 +254,9 @@ std::string getIRName(Any IR, ExtendedIRContext *Ctx = nullptr) {
if (const auto *MF = unwrapIR<MachineFunction>(IR))
return MF->getName().str();
- if (Ctx) {
+ if (Context) {
// Go through the traits and check if any of them apply
- for (const auto& extendedIRTraits : Ctx->traits) {
+ for (const auto& extendedIRTraits : Context->traits) {
if (auto IRName = extendedIRTraits->getIRName(IR))
return *IRName;
}
@@ -420,7 +420,7 @@ void ChangeReporter<T>::handleIRAfterPass(Any IR, StringRef PassID,
StringRef PassName) {
assert(!BeforeStack.empty() && "Unexpected empty stack encountered.");
- std::string Name = getIRName(IR, this);
+ std::string Name = getIRName(IR, this->context);
if (isIgnored(PassID)) {
if (VerboseMode)
@@ -824,7 +824,7 @@ void PrintIRInstrumentation::pushPassRunDescriptor(StringRef PassID, Any IR,
unsigned PassNumber) {
const Module *M = unwrapModule(IR);
PassRunDescriptorStack.emplace_back(M, PassNumber, getIRFileDisplayName(IR),
- getIRName(IR), PassID);
+ getIRName(IR, this->IRContext), PassID);
}
PrintIRInstrumentation::PassRunDescriptor
@@ -872,7 +872,7 @@ void PrintIRInstrumentation::printBeforePass(StringRef PassID, Any IR) {
if (shouldPrintPassNumbers())
dbgs() << " Running pass " << CurrentPassNumber << " " << PassID
- << " on " << getIRName(IR) << "\n";
+ << " on " << getIRName(IR, this->IRContext) << "\n";
if (shouldPrintAfterCurrentPassNumber())
pushPassRunDescriptor(PassID, IR, CurrentPassNumber);
@@ -884,7 +884,8 @@ void PrintIRInstrumentation::printBeforePass(StringRef PassID, Any IR) {
Stream << "; *** IR Dump Before ";
if (shouldPrintBeforeSomePassNumber())
Stream << CurrentPassNumber << "-";
- Stream << PassID << " on " << getIRName(IR) << " ***\n";
+ Stream << PassID << " on " << getIRName(IR, this->IRContext)
+ << " ***\n";
unwrapAndPrint(Stream, IR);
};
@@ -1013,7 +1014,8 @@ bool PrintIRInstrumentation::shouldPrintAfterSomePassNumber() {
}
void PrintIRInstrumentation::registerCallbacks(
- PassInstrumentationCallbacks &PIC) {
+ PassInstrumentationCallbacks &PIC, ExtendedIRContext *IRContext) {
+ this->IRContext = IRContext;
this->PIC = &PIC;
// BeforePass callback is not just for printing, it also saves a Module
@@ -1038,7 +1040,8 @@ void PrintIRInstrumentation::registerCallbacks(
}
void OptNoneInstrumentation::registerCallbacks(
- PassInstrumentationCallbacks &PIC) {
+ PassInstrumentationCallbacks &PIC, ExtendedIRContext *IRContext) {
+ this->IRContext = IRContext;
PIC.registerShouldRunOptionalPassCallback(
[this](StringRef P, Any IR) { return this->shouldRun(P, IR); });
}
@@ -1053,7 +1056,8 @@ bool OptNoneInstrumentation::shouldRun(StringRef PassID, Any IR) {
ShouldRun = !MF->getFunction().hasOptNone();
if (!ShouldRun && DebugLogging) {
- errs() << "Skipping pass " << PassID << " on " << getIRName(IR)
+ errs() << "Skipping pass " << PassID << " on "
+ << getIRName(IR, this->IRContext)
<< " due to optnone attribute\n";
}
return ShouldRun;
@@ -1064,7 +1068,8 @@ bool OptPassGateInstrumentation::shouldRun(StringRef PassName, Any IR) {
return true;
bool ShouldRun =
- Context.getOptPassGate().shouldRunPass(PassName, getIRName(IR));
+ Context.getOptPassGate().shouldRunPass(PassName,
+ getIRName(IR, this->IRContext));
if (!ShouldRun && !this->HasWrittenIR && !OptBisectPrintIRPath.empty()) {
// FIXME: print IR if limit is higher than number of opt-bisect
// invocations
@@ -1081,7 +1086,8 @@ bool OptPassGateInstrumentation::shouldRun(StringRef PassName, Any IR) {
}
void OptPassGateInstrumentation::registerCallbacks(
- PassInstrumentationCallbacks &PIC) {
+ PassInstrumentationCallbacks &PIC, ExtendedIRContext *IRContext) {
+ this->IRContext = IRContext;
const OptPassGate &PassGate = Context.getOptPassGate();
if (!PassGate.isEnabled())
return;
@@ -1104,7 +1110,8 @@ raw_ostream &PrintPassInstrumentation::print() {
}
void PrintPassInstrumentation::registerCallbacks(
- PassInstrumentationCallbacks &PIC) {
+ PassInstrumentationCallbacks &PIC, ExtendedIRContext *IRContext) {
+ this->IRContext = IRContext;
if (!Enabled)
return;
@@ -1119,7 +1126,8 @@ void PrintPassInstrumentation::registerCallbacks(
assert(!isSpecialPass(PassID, SpecialPasses) &&
"Unexpectedly skipping special pass");
- print() << "Skipping pass: " << PassID << " on " << getIRName(IR) << "\n";
+ print() << "Skipping pass: " << PassID << " on "
+ << getIRName(IR, this->IRContext) << "\n";
});
PIC.registerBeforeNonSkippedPassCallback([this, SpecialPasses](
StringRef PassID, Any IR) {
@@ -1127,7 +1135,8 @@ void PrintPassInstrumentation::registerCallbacks(
return;
auto &OS = print();
- OS << "Running pass: " << PassID << " on " << getIRName(IR);
+ OS << "Running pass: " << PassID << " on "
+ << getIRName(IR, this->IRContext);
if (const auto *F = unwrapIR<Function>(IR)) {
unsigned Count = F->getInstructionCount();
OS << " (" << Count << " instruction";
@@ -1162,15 +1171,15 @@ void PrintPassInstrumentation::registerCallbacks(
if (!Opts.SkipAnalyses) {
PIC.registerBeforeAnalysisCallback([this](StringRef PassID, Any IR) {
- print() << "Running analysis: " << PassID << " on " << getIRName(IR)
- << "\n";
+ print() << "Running analysis: " << PassID << " on "
+ << getIRName(IR, this->IRContext) << "\n";
Indent += 2;
});
PIC.registerAfterAnalysisCallback(
[this](StringRef PassID, Any IR) { Indent -= 2; });
PIC.registerAnalysisInvalidatedCallback([this](StringRef PassID, Any IR) {
- print() << "Invalidating analysis: " << PassID << " on " << getIRName(IR)
- << "\n";
+ print() << "Invalidating analysis: " << PassID << " on "
+ << getIRName(IR, this->IRContext) << "\n";
});
PIC.registerAnalysesClearedCallback([this](StringRef IRName) {
print() << "Clearing all analysis results for: " << IRName << "\n";
@@ -1577,7 +1586,8 @@ void InLineChangePrinter::registerCallbacks(PassInstrumentationCallbacks &PIC) {
TimeProfilingPassesHandler::TimeProfilingPassesHandler() {}
void TimeProfilingPassesHandler::registerCallbacks(
- PassInstrumentationCallbacks &PIC) {
+ PassInstrumentationCallbacks &PIC, ExtendedIRContext *IRContext) {
+ this->IRContext = IRContext;
if (!getTimeTraceProfilerInstance())
return;
PIC.registerBeforeNonSkippedPassCallback(
@@ -1597,7 +1607,7 @@ void TimeProfilingPassesHandler::registerCallbacks(
}
void TimeProfilingPassesHandler::runBeforePass(StringRef PassID, Any IR) {
- timeTraceProfilerBegin(PassID, getIRName(IR));
+ timeTraceProfilerBegin(PassID, getIRName(IR, this->IRContext));
}
void TimeProfilingPassesHandler::runAfterPass() { timeTraceProfilerEnd(); }
@@ -2519,12 +2529,13 @@ void PrintCrashIRInstrumentation::registerCallbacks(
}
void StandardInstrumentations::registerCallbacks(
- PassInstrumentationCallbacks &PIC, ModuleAnalysisManager *MAM) {
- PrintIR.registerCallbacks(PIC);
- PrintPass.registerCallbacks(PIC);
+ PassInstrumentationCallbacks &PIC, ModuleAnalysisManager *MAM,
+ ExtendedIRContext *IRContext) {
+ PrintIR.registerCallbacks(PIC, IRContext);
+ PrintPass.registerCallbacks(PIC, IRContext);
TimePasses.registerCallbacks(PIC);
- OptNone.registerCallbacks(PIC);
- OptPassGate.registerCallbacks(PIC);
+ OptNone.registerCallbacks(PIC, IRContext);
+ OptPassGate.registerCallbacks(PIC, IRContext);
PrintChangedIR.registerCallbacks(PIC);
PseudoProbeVerification.registerCallbacks(PIC);
if (VerifyEach)
@@ -2543,7 +2554,7 @@ void StandardInstrumentations::registerCallbacks(
// Its 'AfterPassCallback' is put at the front of all the
// AfterCallbacks by its `registerCallbacks`. This is necessary
// to ensure that other callbacks are not included in the timings.
- TimeProfilingPasses.registerCallbacks(PIC);
+ TimeProfilingPasses.registerCallbacks(PIC, IRContext);
}
template class ChangeReporter<std::string>;
>From 0b3b70e4b96fa675fb19d3eda3131f0cea61bfd4 Mon Sep 17 00:00:00 2001
From: Anja Kurepa <ankurepa at amd.com>
Date: Fri, 21 Aug 2026 17:44:58 +0200
Subject: [PATCH 5/9] [StandardInsturmentations] Add helper class to
StandardInstrumentations - Add context as member field
---
llvm/include/llvm/Passes/StandardInstrumentations.h | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/llvm/include/llvm/Passes/StandardInstrumentations.h b/llvm/include/llvm/Passes/StandardInstrumentations.h
index dd083f8c3e89bf..2a4f678a21ecc5 100644
--- a/llvm/include/llvm/Passes/StandardInstrumentations.h
+++ b/llvm/include/llvm/Passes/StandardInstrumentations.h
@@ -215,7 +215,7 @@ class ExtendedIRTraits {
ExtendedIRTraits& operator=(ExtendedIRTraits&&) = delete;
virtual ~ExtendedIRTraits() = default;
- virtual std::optional<std::string> getIRName(Any IR) = 0;
+ virtual std::optional<std::string> getIRName(Any IR) const = 0;
};
struct ExtendedIRContext {
@@ -226,7 +226,6 @@ struct ExtendedIRContext {
ExtendedIRContext(ExtendedIRContext&&) = delete;
ExtendedIRContext& operator=(ExtendedIRContext&&) = delete;
- ExtendedIRContext* context;
llvm::SmallVector<std::unique_ptr<ExtendedIRTraits>> traits;
// Add an ExtendedIRTraits to the traits vector
void addTrait(std::unique_ptr<ExtendedIRTraits> trait) {
@@ -249,9 +248,10 @@ struct ExtendedIRContext {
// 6. When a pass is run on an IR that is not interesting (based on options).
// 7. When a pass is ignored (pass manager or adapter pass).
// 8. To compare two IR representations (of type \p T).
-template <typename IRUnitT> class LLVM_ABI ChangeReporter : public ExtendedIRContext {
+template <typename IRUnitT> class LLVM_ABI ChangeReporter {
protected:
ChangeReporter(bool RunInVerboseMode) : VerboseMode(RunInVerboseMode) {}
+ void setContext(ExtendedIRContext *Context) { context = Context; }
public:
virtual ~ChangeReporter();
@@ -293,6 +293,9 @@ template <typename IRUnitT> class LLVM_ABI ChangeReporter : public ExtendedIRCon
// Run in verbose mode, printing everything?
const bool VerboseMode;
+
+ // Optional extended context used to resolve custom IR names.
+ ExtendedIRContext *context = nullptr;
};
// An abstract template base class that handles printing banners and
>From 1920be607267577a770bdc584f42972e06b31c91 Mon Sep 17 00:00:00 2001
From: Anja Kurepa <ankurepa at amd.com>
Date: Fri, 28 Aug 2026 15:42:30 +0200
Subject: [PATCH 6/9] [StandardInsturmentations] Add helper class to
StandardInstrumentations - remove 'this' pointer
---
llvm/lib/Passes/StandardInstrumentations.cpp | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index e052869cdcb177..4a3d51857494d3 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -421,7 +421,7 @@ void ChangeReporter<T>::handleIRAfterPass(Any IR, StringRef PassID,
StringRef PassName) {
assert(!BeforeStack.empty() && "Unexpected empty stack encountered.");
- std::string Name = getIRName(IR, this->context);
+ std::string Name = getIRName(IR, context);
if (isIgnored(PassID)) {
if (VerboseMode)
@@ -825,7 +825,7 @@ void PrintIRInstrumentation::pushPassRunDescriptor(StringRef PassID, Any IR,
unsigned PassNumber) {
const Module *M = unwrapModule(IR);
PassRunDescriptorStack.emplace_back(M, PassNumber, getIRFileDisplayName(IR),
- getIRName(IR, this->IRContext), PassID);
+ getIRName(IR, IRContext), PassID);
}
PrintIRInstrumentation::PassRunDescriptor
@@ -873,7 +873,7 @@ void PrintIRInstrumentation::printBeforePass(StringRef PassID, Any IR) {
if (shouldPrintPassNumbers())
dbgs() << " Running pass " << CurrentPassNumber << " " << PassID
- << " on " << getIRName(IR, this->IRContext) << "\n";
+ << " on " << getIRName(IR, IRContext) << "\n";
if (shouldPrintAfterCurrentPassNumber())
pushPassRunDescriptor(PassID, IR, CurrentPassNumber);
@@ -885,7 +885,7 @@ void PrintIRInstrumentation::printBeforePass(StringRef PassID, Any IR) {
Stream << "; *** IR Dump Before ";
if (shouldPrintBeforeSomePassNumber())
Stream << CurrentPassNumber << "-";
- Stream << PassID << " on " << getIRName(IR, this->IRContext)
+ Stream << PassID << " on " << getIRName(IR, IRContext)
<< " ***\n";
unwrapAndPrint(Stream, IR);
};
@@ -1058,7 +1058,7 @@ bool OptNoneInstrumentation::shouldRun(StringRef PassID, Any IR) {
if (!ShouldRun && DebugLogging) {
errs() << "Skipping pass " << PassID << " on "
- << getIRName(IR, this->IRContext)
+ << getIRName(IR, IRContext)
<< " due to optnone attribute\n";
}
return ShouldRun;
@@ -1070,7 +1070,7 @@ bool OptPassGateInstrumentation::shouldRun(StringRef PassName, Any IR) {
bool ShouldRun =
Context.getOptPassGate().shouldRunPass(PassName,
- getIRName(IR, this->IRContext));
+ getIRName(IR, IRContext));
if (!ShouldRun && !this->HasWrittenIR && !OptBisectPrintIRPath.empty()) {
// FIXME: print IR if limit is higher than number of opt-bisect
// invocations
@@ -1137,7 +1137,7 @@ void PrintPassInstrumentation::registerCallbacks(
auto &OS = print();
OS << "Running pass: " << PassID << " on "
- << getIRName(IR, this->IRContext);
+ << getIRName(IR, this->IRContext);
if (const auto *F = unwrapIR<Function>(IR)) {
unsigned Count = F->getInstructionCount();
OS << " (" << Count << " instruction";
@@ -1608,7 +1608,7 @@ void TimeProfilingPassesHandler::registerCallbacks(
}
void TimeProfilingPassesHandler::runBeforePass(StringRef PassID, Any IR) {
- timeTraceProfilerBegin(PassID, getIRName(IR, this->IRContext));
+ timeTraceProfilerBegin(PassID, getIRName(IR, IRContext));
}
void TimeProfilingPassesHandler::runAfterPass() { timeTraceProfilerEnd(); }
>From efabb81a87f2fc71df015acd8098ef995f174447 Mon Sep 17 00:00:00 2001
From: Anja Kurepa <ankurepa at amd.com>
Date: Thu, 17 Sep 2026 10:12:14 +0200
Subject: [PATCH 7/9] [StandardInsturmentations] Add helper class to
StandardInstrumentations - formatting
---
llvm/lib/Passes/StandardInstrumentations.cpp | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index 4a3d51857494d3..8f6d7e7cd9f504 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -1069,8 +1069,7 @@ bool OptPassGateInstrumentation::shouldRun(StringRef PassName, Any IR) {
return true;
bool ShouldRun =
- Context.getOptPassGate().shouldRunPass(PassName,
- getIRName(IR, IRContext));
+ Context.getOptPassGate().shouldRunPass(PassName, getIRName(IR, IRContext));
if (!ShouldRun && !this->HasWrittenIR && !OptBisectPrintIRPath.empty()) {
// FIXME: print IR if limit is higher than number of opt-bisect
// invocations
@@ -1136,8 +1135,8 @@ void PrintPassInstrumentation::registerCallbacks(
return;
auto &OS = print();
- OS << "Running pass: " << PassID << " on "
- << getIRName(IR, this->IRContext);
+ OS << "Running pass: " << PassID << " on "
+ << getIRName(IR, this->IRContext);
if (const auto *F = unwrapIR<Function>(IR)) {
unsigned Count = F->getInstructionCount();
OS << " (" << Count << " instruction";
>From cd055eebdcffdbfc34c7205b034e206a7c77517b Mon Sep 17 00:00:00 2001
From: Anja Kurepa <ankurepa at amd.com>
Date: Mon, 28 Sep 2026 14:10:49 +0200
Subject: [PATCH 8/9] [StandardInsturmentations] Add helper class to
StandardInstrumentations - Rework comments
---
.../llvm/Passes/StandardInstrumentations.h | 5 ++-
llvm/lib/Passes/StandardInstrumentations.cpp | 38 +++++++++----------
2 files changed, 22 insertions(+), 21 deletions(-)
diff --git a/llvm/include/llvm/Passes/StandardInstrumentations.h b/llvm/include/llvm/Passes/StandardInstrumentations.h
index d6960ef8b30d23..fb61a594a5f5b9 100644
--- a/llvm/include/llvm/Passes/StandardInstrumentations.h
+++ b/llvm/include/llvm/Passes/StandardInstrumentations.h
@@ -220,6 +220,8 @@ class ExtendedIRTraits {
virtual std::optional<std::string> getIRName(IRUnitRef IR) const = 0;
};
+// Stores custom IR-name traits used to specialize instrumentation output for
+// non-standard IR representations.
struct ExtendedIRContext {
ExtendedIRContext() = default;
ExtendedIRContext(const ExtendedIRContext&) = delete;
@@ -229,7 +231,7 @@ struct ExtendedIRContext {
ExtendedIRContext& operator=(ExtendedIRContext&&) = delete;
llvm::SmallVector<std::unique_ptr<ExtendedIRTraits>> traits;
- // Add an ExtendedIRTraits to the traits vector
+ // Register an ExtendedIRTraits implementation for this IR context.
void addTrait(std::unique_ptr<ExtendedIRTraits> trait) {
traits.push_back(std::move(trait));
}
@@ -301,7 +303,6 @@ template <typename IRUnitT> class LLVM_ABI ChangeReporter {
// Run in verbose mode, printing everything?
const bool VerboseMode;
- // Optional extended context used to resolve custom IR names.
ExtendedIRContext *context = nullptr;
};
diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index c91a9a568562cb..3e0da94c906f61 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -1168,25 +1168,25 @@ void PrintPassInstrumentation::registerCallbacks(
if (isSpecialPass(PassID, SpecialPasses))
return;
- auto &OS = print();
- OS << "Running pass: " << PassID << " on "
- << getIRName(IR, this->IRContext);
- if (const auto *F = unwrapIR<Function>(IR)) {
- unsigned Count = F->getInstructionCount();
- OS << " (" << Count << " instruction";
- if (Count != 1)
- OS << 's';
- OS << ')';
- } else if (const auto *C = unwrapIR<LazyCallGraph::SCC>(IR)) {
- int Count = C->size();
- OS << " (" << Count << " node";
- if (Count != 1)
- OS << 's';
- OS << ')';
- }
- OS << "\n";
- Indent += 2;
- });
+ auto &OS = print();
+ OS << "Running pass: " << PassID << " on "
+ << getIRName(IR, this->IRContext);
+ if (const auto *F = dyn_cast<Function>(IR)) {
+ unsigned Count = F->getInstructionCount();
+ OS << " (" << Count << " instruction";
+ if (Count != 1)
+ OS << 's';
+ OS << ')';
+ } else if (const auto *C = dyn_cast<LazyCallGraph::SCC>(IR)) {
+ int Count = C->size();
+ OS << " (" << Count << " node";
+ if (Count != 1)
+ OS << 's';
+ OS << ')';
+ }
+ OS << "\n";
+ Indent += 2;
+ });
PIC.registerAfterPassCallback(
[this, SpecialPasses](StringRef PassID, IRUnitRef IR,
const PreservedAnalyses &) {
>From 48639cb2b7444e61e0c82a8e9f56daf159fffc01 Mon Sep 17 00:00:00 2001
From: Anja Kurepa <ankurepa at amd.com>
Date: Fri, 2 Oct 2026 14:49:51 +0200
Subject: [PATCH 9/9] [StandardInsturmentations] Add helper class to
StandardInstrumentations - Formatting fix
---
.../llvm/Passes/StandardInstrumentations.h | 18 ++++++------
llvm/lib/Passes/StandardInstrumentations.cpp | 29 +++++++++----------
2 files changed, 23 insertions(+), 24 deletions(-)
diff --git a/llvm/include/llvm/Passes/StandardInstrumentations.h b/llvm/include/llvm/Passes/StandardInstrumentations.h
index fb61a594a5f5b9..7c47a93f4e24d8 100644
--- a/llvm/include/llvm/Passes/StandardInstrumentations.h
+++ b/llvm/include/llvm/Passes/StandardInstrumentations.h
@@ -208,13 +208,13 @@ class PreservedCFGCheckerInstrumentation {
};
class ExtendedIRTraits {
- public:
+public:
ExtendedIRTraits() = default;
- ExtendedIRTraits(const ExtendedIRTraits&) = delete;
- ExtendedIRTraits& operator=(const ExtendedIRTraits&) = delete;
+ ExtendedIRTraits(const ExtendedIRTraits &) = delete;
+ ExtendedIRTraits &operator=(const ExtendedIRTraits &) = delete;
- ExtendedIRTraits(ExtendedIRTraits&&) = delete;
- ExtendedIRTraits& operator=(ExtendedIRTraits&&) = delete;
+ ExtendedIRTraits(ExtendedIRTraits &&) = delete;
+ ExtendedIRTraits &operator=(ExtendedIRTraits &&) = delete;
virtual ~ExtendedIRTraits() = default;
virtual std::optional<std::string> getIRName(IRUnitRef IR) const = 0;
@@ -224,11 +224,11 @@ class ExtendedIRTraits {
// non-standard IR representations.
struct ExtendedIRContext {
ExtendedIRContext() = default;
- ExtendedIRContext(const ExtendedIRContext&) = delete;
- ExtendedIRContext& operator=(const ExtendedIRContext&) = delete;
+ ExtendedIRContext(const ExtendedIRContext &) = delete;
+ ExtendedIRContext &operator=(const ExtendedIRContext &) = delete;
- ExtendedIRContext(ExtendedIRContext&&) = delete;
- ExtendedIRContext& operator=(ExtendedIRContext&&) = delete;
+ ExtendedIRContext(ExtendedIRContext &&) = delete;
+ ExtendedIRContext &operator=(ExtendedIRContext &&) = delete;
llvm::SmallVector<std::unique_ptr<ExtendedIRTraits>> traits;
// Register an ExtendedIRTraits implementation for this IR context.
diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index 3e0da94c906f61..2dbbf23c9eeab6 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -271,7 +271,7 @@ std::string getIRName(IRUnitRef IR, ExtendedIRContext *Context) {
if (Context) {
// Go through the traits and check if any of them apply
- for (const auto& extendedIRTraits : Context->traits) {
+ for (const auto &extendedIRTraits : Context->traits) {
if (auto IRName = extendedIRTraits->getIRName(IR))
return *IRName;
}
@@ -906,8 +906,8 @@ void PrintIRInstrumentation::printBeforePass(StringRef PassID, IRUnitRef IR) {
++CurrentPassNumber;
if (shouldPrintPassNumbers())
- dbgs() << " Running pass " << CurrentPassNumber << " " << PassID
- << " on " << getIRName(IR, IRContext) << "\n";
+ dbgs() << " Running pass " << CurrentPassNumber << " " << PassID << " on "
+ << getIRName(IR, IRContext) << "\n";
if (shouldPrintAfterCurrentPassNumber())
pushPassRunDescriptor(PassID, IR, CurrentPassNumber);
@@ -919,8 +919,7 @@ void PrintIRInstrumentation::printBeforePass(StringRef PassID, IRUnitRef IR) {
Stream << "; *** IR Dump Before ";
if (shouldPrintBeforeSomePassNumber())
Stream << CurrentPassNumber << "-";
- Stream << PassID << " on " << getIRName(IR, IRContext)
- << " ***\n";
+ Stream << PassID << " on " << getIRName(IR, IRContext) << " ***\n";
unwrapAndPrint(Stream, IR);
};
@@ -1091,8 +1090,7 @@ bool OptNoneInstrumentation::shouldRun(StringRef PassID, IRUnitRef IR) {
ShouldRun = !MF->getFunction().hasOptNone();
if (!ShouldRun && DebugLogging) {
- errs() << "Skipping pass " << PassID << " on "
- << getIRName(IR, IRContext)
+ errs() << "Skipping pass " << PassID << " on " << getIRName(IR, IRContext)
<< " due to optnone attribute\n";
}
return ShouldRun;
@@ -1102,8 +1100,8 @@ bool OptPassGateInstrumentation::shouldRun(StringRef PassName, IRUnitRef IR) {
if (isIgnored(PassName))
return true;
- bool ShouldRun =
- Context.getOptPassGate().shouldRunPass(PassName, getIRName(IR, IRContext));
+ bool ShouldRun = Context.getOptPassGate().shouldRunPass(
+ PassName, getIRName(IR, IRContext));
if (!ShouldRun && !this->HasWrittenIR && !OptBisectPrintIRPath.empty()) {
// FIXME: print IR if limit is higher than number of opt-bisect
// invocations
@@ -1160,8 +1158,8 @@ void PrintPassInstrumentation::registerCallbacks(
assert(!isSpecialPass(PassID, SpecialPasses) &&
"Unexpectedly skipping special pass");
- print() << "Skipping pass: " << PassID << " on "
- << getIRName(IR, this->IRContext) << "\n";
+ print() << "Skipping pass: " << PassID << " on "
+ << getIRName(IR, this->IRContext) << "\n";
});
PIC.registerBeforeNonSkippedPassCallback(
[this, SpecialPasses](StringRef PassID, IRUnitRef IR) {
@@ -1211,10 +1209,11 @@ void PrintPassInstrumentation::registerCallbacks(
});
PIC.registerAfterAnalysisCallback(
[this](StringRef PassID, IRUnitRef IR) { Indent -= 2; });
- PIC.registerAnalysisInvalidatedCallback([this](StringRef PassID, IRUnitRef IR) {
- print() << "Invalidating analysis: " << PassID << " on "
- << getIRName(IR, this->IRContext) << "\n";
- });
+ PIC.registerAnalysisInvalidatedCallback(
+ [this](StringRef PassID, IRUnitRef IR) {
+ print() << "Invalidating analysis: " << PassID << " on "
+ << getIRName(IR, this->IRContext) << "\n";
+ });
PIC.registerAnalysesClearedCallback([this](StringRef IRName) {
print() << "Clearing all analysis results for: " << IRName << "\n";
});
More information about the llvm-commits
mailing list