[Mlir-commits] [mlir] a77cd55 - [mlir] Add support for specifying printing flags when adding an op to a Diagnostic
River Riddle
llvmlistbot at llvm.org
Mon Oct 18 08:16:18 PDT 2021
Author: River Riddle
Date: 2021-10-18T15:07:55Z
New Revision: a77cd55dea058395f787effff8411f1173bf69d8
URL: https://github.com/llvm/llvm-project/commit/a77cd55dea058395f787effff8411f1173bf69d8
DIFF: https://github.com/llvm/llvm-project/commit/a77cd55dea058395f787effff8411f1173bf69d8.diff
LOG: [mlir] Add support for specifying printing flags when adding an op to a Diagnostic
This removes edge cases where the default flags we want to use
during printing (e.g. local scope, eliding attributes, etc.)
get missed/dropped.
Differential Revision: https://reviews.llvm.org/D111761
Added:
Modified:
mlir/include/mlir/IR/Diagnostics.h
mlir/lib/IR/Diagnostics.cpp
mlir/lib/IR/Operation.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/IR/Diagnostics.h b/mlir/include/mlir/IR/Diagnostics.h
index 7bf35c7b5de55..5f6d870fc805e 100644
--- a/mlir/include/mlir/IR/Diagnostics.h
+++ b/mlir/include/mlir/IR/Diagnostics.h
@@ -29,6 +29,7 @@ struct LogicalResult;
class MLIRContext;
class Operation;
class OperationName;
+class OpPrintingFlags;
class Type;
class Value;
@@ -218,6 +219,8 @@ class Diagnostic {
Diagnostic &operator<<(Operation *val) {
return *this << *val;
}
+ /// Append an operation with the given printing flags.
+ Diagnostic &appendOp(Operation &val, const OpPrintingFlags &flags);
/// Stream in a Value.
Diagnostic &operator<<(Value val);
diff --git a/mlir/lib/IR/Diagnostics.cpp b/mlir/lib/IR/Diagnostics.cpp
index 339f5607abdb3..31391b2b9405e 100644
--- a/mlir/lib/IR/Diagnostics.cpp
+++ b/mlir/lib/IR/Diagnostics.cpp
@@ -127,9 +127,13 @@ Diagnostic &Diagnostic::operator<<(OperationName val) {
/// Stream in an Operation.
Diagnostic &Diagnostic::operator<<(Operation &val) {
+ return appendOp(val, OpPrintingFlags());
+}
+Diagnostic &Diagnostic::appendOp(Operation &val, const OpPrintingFlags &flags) {
std::string str;
llvm::raw_string_ostream os(str);
- val.print(os, OpPrintingFlags().useLocalScope().elideLargeElementsAttrs());
+ val.print(os,
+ OpPrintingFlags(flags).useLocalScope().elideLargeElementsAttrs());
return *this << os.str();
}
diff --git a/mlir/lib/IR/Operation.cpp b/mlir/lib/IR/Operation.cpp
index 8eb4c612dd612..e877449fa83fb 100644
--- a/mlir/lib/IR/Operation.cpp
+++ b/mlir/lib/IR/Operation.cpp
@@ -276,17 +276,9 @@ void Operation::insertOperands(unsigned index, ValueRange operands) {
InFlightDiagnostic Operation::emitError(const Twine &message) {
InFlightDiagnostic diag = mlir::emitError(getLoc(), message);
if (getContext()->shouldPrintOpOnDiagnostic()) {
- // Print out the operation explicitly here so that we can print the generic
- // form.
- // TODO: It would be nice if we could instead provide the
- // specific printing flags when adding the operation as an argument to the
- // diagnostic.
- std::string printedOp;
- {
- llvm::raw_string_ostream os(printedOp);
- print(os, OpPrintingFlags().printGenericOpForm().useLocalScope());
- }
- diag.attachNote(getLoc()) << "see current operation: " << printedOp;
+ diag.attachNote(getLoc())
+ .append("see current operation: ")
+ .appendOp(*this, OpPrintingFlags().printGenericOpForm());
}
return diag;
}
More information about the Mlir-commits
mailing list