-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[mlir] expose -debug-only equivalent to C and Python #93175
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
These are useful for finer-grain debugging and complement the already exposed global debug flag.
@llvm/pr-subscribers-mlir Author: Oleksandr "Alex" Zinenko (ftynse) ChangesThese are useful for finer-grain debugging and complement the already exposed global debug flag. Full diff: https://github.com/llvm/llvm-project/pull/93175.diff 3 Files Affected:
diff --git a/mlir/include/mlir-c/Debug.h b/mlir/include/mlir-c/Debug.h
index 2502f2fa23bf0..7dad73500858d 100644
--- a/mlir/include/mlir-c/Debug.h
+++ b/mlir/include/mlir-c/Debug.h
@@ -21,6 +21,19 @@ MLIR_CAPI_EXPORTED void mlirEnableGlobalDebug(bool enable);
/// Retuns `true` if the global debugging flag is set, false otherwise.
MLIR_CAPI_EXPORTED bool mlirIsGlobalDebugEnabled();
+/// Sets the current debug type, similarly to `-debug-only=type` in the
+/// command-line tools. Note that global debug should be enabled for any output
+/// to be produced.
+MLIR_CAPI_EXPORTED void mlirSetGlobalDebugType(const char *type);
+
+/// Sets multiple current debug types, similarly to `-debug-only=type1,type2" in
+/// the command-line tools. Note that global debug should be enabled for any
+/// output to be produced.
+MLIR_CAPI_EXPORTED void mlirSetGlobalDebugTypes(const char **types, intptr_t n);
+
+/// Checks if `type` is set as the current debug type.
+MLIR_CAPI_EXPORTED bool mlirIsCurrentDebugType(const char *type);
+
#ifdef __cplusplus
}
#endif
diff --git a/mlir/lib/Bindings/Python/IRCore.cpp b/mlir/lib/Bindings/Python/IRCore.cpp
index 01678a9719f90..2b2792ea6c776 100644
--- a/mlir/lib/Bindings/Python/IRCore.cpp
+++ b/mlir/lib/Bindings/Python/IRCore.cpp
@@ -240,7 +240,20 @@ struct PyGlobalDebugFlag {
// Debug flags.
py::class_<PyGlobalDebugFlag>(m, "_GlobalDebug", py::module_local())
.def_property_static("flag", &PyGlobalDebugFlag::get,
- &PyGlobalDebugFlag::set, "LLVM-wide debug flag");
+ &PyGlobalDebugFlag::set, "LLVM-wide debug flag")
+ .def_static(
+ "set_types",
+ [](const std::string &type) {
+ mlirSetGlobalDebugType(type.c_str());
+ },
+ "types"_a, "Sets specific debug types to be produced by LLVM")
+ .def_static("set_types", [](const std::vector<std::string> &types) {
+ std::vector<const char *> pointers;
+ pointers.reserve(types.size());
+ for (const std::string &str : types)
+ pointers.push_back(str.c_str());
+ mlirSetGlobalDebugTypes(pointers.data(), pointers.size());
+ });
}
};
diff --git a/mlir/lib/CAPI/Debug/Debug.cpp b/mlir/lib/CAPI/Debug/Debug.cpp
index 288ecd6012749..320ece4998e04 100644
--- a/mlir/lib/CAPI/Debug/Debug.cpp
+++ b/mlir/lib/CAPI/Debug/Debug.cpp
@@ -16,3 +16,21 @@
void mlirEnableGlobalDebug(bool enable) { llvm::DebugFlag = enable; }
bool mlirIsGlobalDebugEnabled() { return llvm::DebugFlag; }
+
+void mlirSetGlobalDebugType(const char *type) {
+ // Depending on the NDEBUG flag, this name can be either a function or a macro
+ // that expands to something that isn't a funciton call, so we cannot
+ // explicitly prefix it with `llvm::` or declare `using` it.
+ using namespace llvm;
+ setCurrentDebugType(type);
+}
+
+void mlirSetGlobalDebugTypes(const char **types, intptr_t n) {
+ using namespace llvm;
+ setCurrentDebugTypes(types, n);
+}
+
+bool mlirIsCurrentDebugType(const char *type) {
+ using namespace llvm;
+ return isCurrentDebugType(type);
+}
|
&PyGlobalDebugFlag::set, "LLVM-wide debug flag"); | ||
&PyGlobalDebugFlag::set, "LLVM-wide debug flag") | ||
.def_static( | ||
"set_types", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: this only sets on type?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh this is an overload. whoops.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Only thing I'll say is is I have long wondered why this is hidden (i.e., _
in the _GlobalDebug
) and now maybe since it's growing functionality we can expose it. The value is some editors/IDEs will tab complete it for people (or just display it in the list of all attributes when you .
the module) and so that I'll help with "discoverability".
I suppose it's hidden because |
These are useful for finer-grain debugging and complement the already exposed global debug flag.