// // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines common utilities for generating C++ from tablegen // structures. // //===----------------------------------------------------------------------===// #ifndef MLIR_TABLEGEN_CODEGENHELPERS_H #define MLIR_TABLEGEN_CODEGENHELPERS_H #include "mlir/TableGen/Constraint.h" #include "mlir/TableGen/Dialect.h" #include "mlir/TableGen/Format.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/MapVector.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" namespace llvm { class RecordKeeper; } // namespace llvm namespace mlir { namespace tblgen { class Constraint; class DagLeaf; // Format into a std::string template <typename... Parameters> std::string strfmt(const char *fmt, Parameters &&...parameters) { … } // Simple RAII helper for defining ifdef-undef-endif scopes. class IfDefScope { … }; // A helper RAII class to emit nested namespaces for this op. class NamespaceEmitter { … }; /// This class deduplicates shared operation verification code by emitting /// static functions alongside the op definitions. These methods are local to /// the definition file, and are invoked within the operation verify methods. /// An example is shown below: /// /// static LogicalResult localVerify(...) /// /// LogicalResult OpA::verify(...) { /// if (failed(localVerify(...))) /// return failure(); /// ... /// } /// /// LogicalResult OpB::verify(...) { /// if (failed(localVerify(...))) /// return failure(); /// ... /// } /// class StaticVerifierFunctionEmitter { … }; /// Escape a string using C++ encoding. E.g. foo"bar -> foo\x22bar. std::string escapeString(StringRef value); namespace detail { template <typename> struct stringifier { … }; template <> struct stringifier<Twine> { … }; stringifier<std::optional<OptionalT>>; } // namespace detail /// Generically convert a value to a std::string. template <typename T> std::string stringify(T &&t) { … } } // namespace tblgen } // namespace mlir #endif // MLIR_TABLEGEN_CODEGENHELPERS_H