[Mlir-commits] [mlir] 16e530d - When generating C++ code, use C++ string escaping.
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Oct 25 15:53:48 PDT 2021
Author: Matthias Kramm
Date: 2021-10-25T22:53:44Z
New Revision: 16e530d43b2b24bc30e0afa1f74dc3ea475fde5b
URL: https://github.com/llvm/llvm-project/commit/16e530d43b2b24bc30e0afa1f74dc3ea475fde5b
DIFF: https://github.com/llvm/llvm-project/commit/16e530d43b2b24bc30e0afa1f74dc3ea475fde5b.diff
LOG: When generating C++ code, use C++ string escaping.
Reviewed By: Mogball
Differential Revision: https://reviews.llvm.org/D112468
Added:
Modified:
mlir/include/mlir/TableGen/CodeGenHelpers.h
mlir/test/mlir-tblgen/predicate.td
mlir/tools/mlir-tblgen/CodeGenHelpers.cpp
mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
mlir/tools/mlir-tblgen/RewriterGen.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/TableGen/CodeGenHelpers.h b/mlir/include/mlir/TableGen/CodeGenHelpers.h
index 68fdf545e23b6..c7252a6b99e3d 100644
--- a/mlir/include/mlir/TableGen/CodeGenHelpers.h
+++ b/mlir/include/mlir/TableGen/CodeGenHelpers.h
@@ -146,6 +146,9 @@ class StaticVerifierFunctionEmitter {
llvm::DenseMap<const void *, std::string> localTypeConstraints;
};
+// Escape a string using C++ encoding. E.g. foo"bar -> foo\x22bar.
+std::string escapeString(StringRef value);
+
} // namespace tblgen
} // namespace mlir
diff --git a/mlir/test/mlir-tblgen/predicate.td b/mlir/test/mlir-tblgen/predicate.td
index f8c1b1d90b3a3..71ed215b774c8 100644
--- a/mlir/test/mlir-tblgen/predicate.td
+++ b/mlir/test/mlir-tblgen/predicate.td
@@ -111,3 +111,14 @@ def OpK : NS_Op<"op_for_AnyTensorOf", []> {
// CHECK: auto valueGroup0 = getODSOperands(0);
// CHECK: for (::mlir::Value v : valueGroup0) {
// CHECK: if (::mlir::failed([[$TENSOR_INTEGER_FLOAT_CONSTRAINT]]
+
+def OpL : NS_Op<"op_for_StringEscaping", []> {
+ let arguments = (ins
+ StringBasedAttr<CPred<"$_self.cast<StringAttr>().getValue() == \"foo\"">,
+ "only value \"foo\" is allowed">:$s
+ );
+}
+
+// CHECK-LABEL: OpLAdaptor::verify
+// CHECK: getValue() == "foo"
+// CHECK-SAME: only value \"foo\" is allowed
diff --git a/mlir/tools/mlir-tblgen/CodeGenHelpers.cpp b/mlir/tools/mlir-tblgen/CodeGenHelpers.cpp
index c003ad9eb673c..1528c56f906e3 100644
--- a/mlir/tools/mlir-tblgen/CodeGenHelpers.cpp
+++ b/mlir/tools/mlir-tblgen/CodeGenHelpers.cpp
@@ -137,3 +137,10 @@ void StaticVerifierFunctionEmitter::emitTypeConstraintMethods(
os.unindent() << "}\n\n";
}
}
+
+std::string mlir::tblgen::escapeString(StringRef value) {
+ std::string ret;
+ llvm::raw_string_ostream os(ret);
+ os.write_escaped(value);
+ return os.str();
+}
diff --git a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
index 12cb505d2a656..9a5d8bd4d721e 100644
--- a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
+++ b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
@@ -151,14 +151,6 @@ static std::string replaceAllSubstrs(std::string str, const std::string &match,
return str;
}
-// Escape a string using LLVM/MLIR encoding. E.g. foo"bar -> foo\22bar.
-static std::string escapeString(StringRef value) {
- std::string ret;
- llvm::raw_string_ostream os(ret);
- llvm::printEscapedString(value, os);
- return os.str();
-}
-
// Returns whether the record has a value of the given name that can be returned
// via getValueAsString.
static inline bool hasStringAttribute(const Record &record,
diff --git a/mlir/tools/mlir-tblgen/RewriterGen.cpp b/mlir/tools/mlir-tblgen/RewriterGen.cpp
index 617e6b29254b7..2d2694940850b 100644
--- a/mlir/tools/mlir-tblgen/RewriterGen.cpp
+++ b/mlir/tools/mlir-tblgen/RewriterGen.cpp
@@ -12,6 +12,7 @@
#include "mlir/Support/IndentedOstream.h"
#include "mlir/TableGen/Attribute.h"
+#include "mlir/TableGen/CodeGenHelpers.h"
#include "mlir/TableGen/Format.h"
#include "mlir/TableGen/GenInfo.h"
#include "mlir/TableGen/Operator.h"
@@ -50,15 +51,6 @@ struct format_provider<mlir::tblgen::Pattern::IdentifierLine> {
};
} // end namespace llvm
-// Escape a string for use inside a C++ literal.
-// E.g. foo"bar -> foo\x22bar.
-static std::string escapeString(StringRef value) {
- std::string ret;
- llvm::raw_string_ostream os(ret);
- os.write_escaped(value, /*use_hex_escapes=*/true);
- return os.str();
-}
-
//===----------------------------------------------------------------------===//
// PatternEmitter
//===----------------------------------------------------------------------===//
More information about the Mlir-commits
mailing list