[Mlir-commits] [mlir] [mlir] Expand error message to include unregistered dialects. (PR #158028)
Jacques Pienaar
llvmlistbot at llvm.org
Wed Sep 17 23:46:45 PDT 2025
https://github.com/jpienaar updated https://github.com/llvm/llvm-project/pull/158028
>From d35976d0f8a0ceaa56a5c025ea0747028604e367 Mon Sep 17 00:00:00 2001
From: Jacques Pienaar <jacques+gh at japienaar.info>
Date: Thu, 11 Sep 2025 10:30:34 +0000
Subject: [PATCH 1/4] [mlir] Expand error message to include unregistered
dialects.
It is possible to load unregistered dialects, this can result in
a confusing error message. Mark unregistered but loaded dialects.
This is currently done as a merged list as that is most concise but
requires some additional preprocessing (did merge sort given the other
two lists are, could do it shorter and probably at not too much extra
cost if I just used SetVectors).
---
mlir/lib/AsmParser/Parser.cpp | 42 ++++++++++++++++++++++++++++++++---
1 file changed, 39 insertions(+), 3 deletions(-)
diff --git a/mlir/lib/AsmParser/Parser.cpp b/mlir/lib/AsmParser/Parser.cpp
index 435ff713a1b29..86ffe41092547 100644
--- a/mlir/lib/AsmParser/Parser.cpp
+++ b/mlir/lib/AsmParser/Parser.cpp
@@ -2077,9 +2077,45 @@ OperationParser::parseCustomOperation(ArrayRef<ResultRecord> resultIDs) {
diag << " (tried '" << opName << "' as well)";
auto ¬e = diag.attachNote();
note << "Registered dialects: ";
- llvm::interleaveComma(getContext()->getAvailableDialects(), note,
- [&](StringRef dialect) { note << dialect; });
- note << " ; for more info on dialect registration see "
+ std::vector<StringRef> registered = getContext()->getAvailableDialects();
+ auto loaded = getContext()->getLoadedDialects();
+
+ // Merge the sorted lists of registered and loaded dialects.
+ SmallVector<std::pair<StringRef, bool>> mergedDialects;
+ auto regIt = registered.begin(), regEnd = registered.end();
+ auto loadIt = loaded.rbegin(), loadEnd = loaded.rend();
+ bool isRegistered = false;
+ bool isOnlyLoaded = true;
+ while (regIt != regEnd && loadIt != loadEnd) {
+ StringRef reg = *regIt;
+ StringRef load = (*loadIt)->getNamespace();
+ if (reg < load) {
+ mergedDialects.emplace_back(*regIt++, isRegistered);
+ } else if (load < reg) {
+ mergedDialects.emplace_back(load, isOnlyLoaded);
+ loadIt++;
+ } else {
+ mergedDialects.emplace_back(*regIt++, isRegistered);
+ loadIt++;
+ }
+ }
+ for (; regIt != regEnd; ++regIt)
+ mergedDialects.emplace_back(*regIt, isRegistered);
+ for (; loadIt != loadEnd; ++loadIt)
+ mergedDialects.emplace_back((*loadIt)->getNamespace(), isOnlyLoaded);
+
+ bool loadedUnregistered = false;
+ llvm::interleaveComma(mergedDialects, note, [&](auto &pair) {
+ note << pair.first;
+ if (pair.second) {
+ loadedUnregistered = true;
+ note << " (*)";
+ }
+ });
+ note << " ";
+ if (loadedUnregistered)
+ note << "(* corresponding to loaded but unregistered dialects)";
+ note << "; for more info on dialect registration see "
"https://mlir.llvm.org/getting_started/Faq/"
"#registered-loaded-dependent-whats-up-with-dialects-management";
return nullptr;
>From 30abb6b54dca0bedb0fdcdc762e61882d9dbde04 Mon Sep 17 00:00:00 2001
From: Jacques Pienaar <jacques+gh at japienaar.info>
Date: Wed, 17 Sep 2025 00:24:51 -0700
Subject: [PATCH 2/4] Update mlir/lib/AsmParser/Parser.cpp
Co-authored-by: Mehdi Amini <joker.eph at gmail.com>
---
mlir/lib/AsmParser/Parser.cpp | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/mlir/lib/AsmParser/Parser.cpp b/mlir/lib/AsmParser/Parser.cpp
index 86ffe41092547..a50c507cd7001 100644
--- a/mlir/lib/AsmParser/Parser.cpp
+++ b/mlir/lib/AsmParser/Parser.cpp
@@ -2089,14 +2089,14 @@ OperationParser::parseCustomOperation(ArrayRef<ResultRecord> resultIDs) {
while (regIt != regEnd && loadIt != loadEnd) {
StringRef reg = *regIt;
StringRef load = (*loadIt)->getNamespace();
- if (reg < load) {
- mergedDialects.emplace_back(*regIt++, isRegistered);
- } else if (load < reg) {
+ if (load < reg) {
mergedDialects.emplace_back(load, isOnlyLoaded);
- loadIt++;
+ ++loadIt;
} else {
- mergedDialects.emplace_back(*regIt++, isRegistered);
- loadIt++;
+ mergedDialects.emplace_back(reg, isRegistered);
+ ++regIt;
+ if (reg == load)
+ ++loadIt;
}
}
for (; regIt != regEnd; ++regIt)
>From b6fafd7b8d8d602be082b97b0184a7f2cf82d79c Mon Sep 17 00:00:00 2001
From: Jacques Pienaar <jacques+gh at japienaar.info>
Date: Wed, 17 Sep 2025 00:25:00 -0700
Subject: [PATCH 3/4] Update mlir/lib/AsmParser/Parser.cpp
Co-authored-by: Mehdi Amini <joker.eph at gmail.com>
---
mlir/lib/AsmParser/Parser.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mlir/lib/AsmParser/Parser.cpp b/mlir/lib/AsmParser/Parser.cpp
index a50c507cd7001..82bdb844480f1 100644
--- a/mlir/lib/AsmParser/Parser.cpp
+++ b/mlir/lib/AsmParser/Parser.cpp
@@ -2076,7 +2076,7 @@ OperationParser::parseCustomOperation(ArrayRef<ResultRecord> resultIDs) {
if (originalOpName != opName)
diag << " (tried '" << opName << "' as well)";
auto ¬e = diag.attachNote();
- note << "Registered dialects: ";
+ note << "Available dialects: ";
std::vector<StringRef> registered = getContext()->getAvailableDialects();
auto loaded = getContext()->getLoadedDialects();
>From 1b4ab51ace3f79ae8b436dbbfe3a8b9df011031d Mon Sep 17 00:00:00 2001
From: Jacques Pienaar <jacques+gh at japienaar.info>
Date: Thu, 18 Sep 2025 08:46:35 +0200
Subject: [PATCH 4/4] Update invalid.mlir
---
mlir/test/IR/invalid.mlir | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mlir/test/IR/invalid.mlir b/mlir/test/IR/invalid.mlir
index d0bbf8669b63d..89077ef0f4736 100644
--- a/mlir/test/IR/invalid.mlir
+++ b/mlir/test/IR/invalid.mlir
@@ -114,7 +114,7 @@ func.func @non_operation() {
func.func @unknown_dialect_operation() {
// expected-error at below {{Dialect `foo' not found for custom op 'foo.asd'}}
- // expected-note-re at below {{Registered dialects:{{.*}} test{{.*}}}}
+ // expected-note-re at below {{Available dialects:{{.*}} test{{.*}}}}
foo.asd
}
More information about the Mlir-commits
mailing list