[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