//===- GenInfo.h - Generator info -------------------------------*- C++ -*-===// // // 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 // //===----------------------------------------------------------------------===// #ifndef MLIR_TABLEGEN_GENINFO_H_ #define MLIR_TABLEGEN_GENINFO_H_ #include "mlir/Support/LLVM.h" #include "llvm/ADT/StringRef.h" #include namespace llvm { class RecordKeeper; } // end namespace llvm namespace mlir { /// Generator function to invoke. using GenFunction = std::function; /// Structure to group information about a generator (argument to invoke via /// mlir-tblgen, description, and generator function). class GenInfo { public: /// GenInfo constructor should not be invoked directly, instead use /// GenRegistration or registerGen. GenInfo(StringRef arg, StringRef description, GenFunction generator) : arg(arg), description(description), generator(generator) {} /// Invokes the generator and returns whether the generator failed. bool invoke(const llvm::RecordKeeper &recordKeeper, raw_ostream &os) const { assert(generator && "Cannot call generator with null generator"); return generator(recordKeeper, os); } /// Returns the command line option that may be passed to 'mlir-tblgen' to /// invoke this generator. StringRef getGenArgument() const { return arg; } /// Returns a description for the generator. StringRef getGenDescription() const { return description; } private: // The argument with which to invoke the generator via mlir-tblgen. StringRef arg; // Description of the generator. StringRef description; // Generator function. GenFunction generator; }; /// GenRegistration provides a global initializer that registers a generator /// function. /// /// Usage: /// /// // At namespace scope. /// static GenRegistration Print("print", "Print records", [](...){...}); struct GenRegistration { GenRegistration(StringRef arg, StringRef description, GenFunction function); }; } // end namespace mlir #endif // MLIR_TABLEGEN_GENINFO_H_