18 #include "llvm/Support/ManagedStatic.h"
19 #include "llvm/Support/SourceMgr.h"
29 llvm::cl::opt<bool> noImplicitModule{
31 llvm::cl::desc(
"Disable the parsing of an implicit top-level module op"),
32 llvm::cl::init(
false)};
35 static llvm::ManagedStatic<TranslationOptions>
clOptions;
46 static llvm::StringMap<Translation> translationBundle;
47 return translationBundle;
52 std::optional<llvm::Align> inputAlignment,
55 if (registry.count(name))
56 llvm::report_fatal_error(
57 "Attempting to overwrite an existing <file-to-file> function");
59 "Attempting to register an empty translate <file-to-file> function");
60 registry[name] =
Translation(
function, description, inputAlignment);
76 StringRef name, StringRef description,
78 std::optional<llvm::Align> inputAlignment,
80 auto wrappedFn = [
function, dialectRegistration](
81 const std::shared_ptr<llvm::SourceMgr> &sourceMgr,
84 dialectRegistration(registry);
85 context->appendDialectRegistry(registry);
89 op.
get()->print(output);
96 StringRef name, StringRef description,
99 std::optional<llvm::Align> inputAlignment) {
101 inputAlignment,
function);
104 StringRef name, StringRef description,
107 std::optional<llvm::Align> inputAlignment) {
109 name, description, dialectRegistration, inputAlignment,
110 [
function](
const std::shared_ptr<llvm::SourceMgr> &sourceMgr,
111 MLIRContext *ctx) {
return function(*sourceMgr, ctx); });
116 StringRef name, StringRef description,
119 std::optional<llvm::Align> inputAlignment) {
121 name, description, dialectRegistration, inputAlignment,
122 [
function](
const std::shared_ptr<llvm::SourceMgr> &sourceMgr,
124 const llvm::MemoryBuffer *buffer =
125 sourceMgr->getMemoryBuffer(sourceMgr->getMainFileID());
126 return function(buffer->getBuffer(), ctx);
135 StringRef name, StringRef description,
139 name, description, std::nullopt,
141 dialectRegistration](
const std::shared_ptr<llvm::SourceMgr> &sourceMgr,
144 dialectRegistration(registry);
146 bool implicitModule =
152 return function(op.
get(), output);
163 addLiteralOption(kv.first(), &kv.second, kv.second.getDescription());
167 size_t globalWidth)
const {
169 llvm::array_pod_sort(tp->Values.begin(), tp->Values.end(),
170 [](
const TranslationParser::OptionInfo *lhs,
171 const TranslationParser::OptionInfo *rhs) {
172 return lhs->Name.compare(rhs->Name);
static llvm::ManagedStatic< TranslationOptions > clOptions
static llvm::StringMap< Translation > & getTranslationRegistry()
Get the mutable static map between registered file-to-file MLIR translations.
static void registerTranslateToMLIRFunction(StringRef name, StringRef description, const DialectRegistrationFunction &dialectRegistration, std::optional< llvm::Align > inputAlignment, const TranslateSourceMgrToMLIRFunction &function)
static void registerTranslation(StringRef name, StringRef description, std::optional< llvm::Align > inputAlignment, const TranslateFunction &function)
Register the given translation.
The DialectRegistry maps a dialect namespace to a constructor for the matching dialect.
MLIRContext is the top-level object for a collection of MLIR operations.
void appendDialectRegistry(const DialectRegistry ®istry)
Append the contents of the given dialect registry to the registry associated with this context.
This class acts as an owning reference to an op, and will automatically destroy the held op on destru...
OpTy get() const
Allow accessing the internal op.
This class contains all of the components necessary for performing a translation.
The OpAsmOpInterface, see OpAsmInterface.td for more details.
Include the generated interface declarations.
std::function< LogicalResult(const std::shared_ptr< llvm::SourceMgr > &sourceMgr, llvm::raw_ostream &output, MLIRContext *)> TranslateFunction
Interface of the function that performs file-to-file translation involving MLIR.
std::function< OwningOpRef< Operation * >(llvm::SourceMgr &sourceMgr, MLIRContext *)> TranslateRawSourceMgrToMLIRFunction
void registerTranslationCLOptions()
Register command-line options used by the translation registry.
std::function< void(DialectRegistry &)> DialectRegistrationFunction
Interface of the function that adds all dialects and dialect extensions used for the translation to t...
OwningOpRef< Operation * > parseSourceFileForTool(const std::shared_ptr< llvm::SourceMgr > &sourceMgr, const ParserConfig &config, bool insertImplicitModule)
This parses the file specified by the indicated SourceMgr.
std::function< LogicalResult(Operation *, llvm::raw_ostream &output)> TranslateFromMLIRFunction
Interface of the function that translates MLIR to a different format and outputs the result to a stre...
std::function< OwningOpRef< Operation * >(llvm::StringRef, MLIRContext *)> TranslateStringRefToMLIRFunction
Interface of the function that translates the given string to MLIR.
std::function< OwningOpRef< Operation * >(const std::shared_ptr< llvm::SourceMgr > &sourceMgr, MLIRContext *)> TranslateSourceMgrToMLIRFunction
Interface of the function that translates the sources managed by sourceMgr to MLIR.
LogicalResult verify(Operation *op, bool verifyRecursively=true)
Perform (potentially expensive) checks of invariants, used to detect compiler bugs,...
TranslateFromMLIRRegistration(llvm::StringRef name, llvm::StringRef description, const TranslateFromMLIRFunction &function, const DialectRegistrationFunction &dialectRegistration=[](DialectRegistry &) {})
TranslateRegistration(llvm::StringRef name, llvm::StringRef description, const TranslateFunction &function)
TranslateToMLIRRegistration(llvm::StringRef name, llvm::StringRef description, const TranslateSourceMgrToMLIRFunction &function, const DialectRegistrationFunction &dialectRegistration=[](DialectRegistry &) {}, std::optional< llvm::Align > inputAlignment=std::nullopt)
A command line parser for translation functions.
void printOptionInfo(const llvm::cl::Option &o, size_t globalWidth) const override
TranslationParser(llvm::cl::Option &opt)