20 #include "llvm/Support/SourceMgr.h"
30 llvm::cl::opt<bool> noImplicitModule{
32 llvm::cl::desc(
"Disable the parsing of an implicit top-level module op"),
33 llvm::cl::init(
false)};
36 static llvm::ManagedStatic<TranslationOptions>
clOptions;
47 static llvm::StringMap<Translation> translationBundle;
48 return translationBundle;
53 std::optional<llvm::Align> inputAlignment,
56 if (registry.count(name))
57 llvm::report_fatal_error(
58 "Attempting to overwrite an existing <file-to-file> function");
60 "Attempting to register an empty translate <file-to-file> function");
61 registry[name] =
Translation(
function, description, inputAlignment);
77 StringRef name, StringRef description,
79 std::optional<llvm::Align> inputAlignment,
81 auto wrappedFn = [
function, dialectRegistration](
82 const std::shared_ptr<llvm::SourceMgr> &sourceMgr,
85 dialectRegistration(registry);
86 context->appendDialectRegistry(registry);
90 op.get()->
print(output);
97 StringRef name, StringRef description,
100 std::optional<llvm::Align> inputAlignment) {
102 inputAlignment,
function);
105 StringRef name, StringRef description,
108 std::optional<llvm::Align> inputAlignment) {
110 name, description, dialectRegistration, inputAlignment,
111 [
function](
const std::shared_ptr<llvm::SourceMgr> &sourceMgr,
112 MLIRContext *ctx) {
return function(*sourceMgr, ctx); });
117 StringRef name, StringRef description,
120 std::optional<llvm::Align> inputAlignment) {
122 name, description, dialectRegistration, inputAlignment,
123 [
function](
const std::shared_ptr<llvm::SourceMgr> &sourceMgr,
125 const llvm::MemoryBuffer *buffer =
126 sourceMgr->getMemoryBuffer(sourceMgr->getMainFileID());
127 return function(buffer->getBuffer(), ctx);
136 StringRef name, StringRef description,
140 name, description, std::nullopt,
142 dialectRegistration](
const std::shared_ptr<llvm::SourceMgr> &sourceMgr,
145 dialectRegistration(registry);
147 bool implicitModule =
153 return function(op.get(), output);
164 addLiteralOption(kv.first(), &kv.second, kv.second.getDescription());
168 size_t globalWidth)
const {
170 llvm::array_pod_sort(tp->Values.begin(), tp->Values.end(),
171 [](
const TranslationParser::OptionInfo *lhs,
172 const TranslationParser::OptionInfo *rhs) {
173 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.
void print(raw_ostream &os, const OpPrintingFlags &flags=std::nullopt)
This class acts as an owning reference to an op, and will automatically destroy the held op on destru...
This class contains all of the components necessary for performing a translation.
Include the generated interface declarations.
Include the generated interface declarations.
LogicalResult failure(bool isFailure=true)
Utility function to generate a LogicalResult.
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...
LogicalResult success(bool isSuccess=true)
Utility function to generate a LogicalResult.
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,...
bool failed(LogicalResult result)
Utility function that returns true if the provided LogicalResult corresponds to a failure value.
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)