1 //===- GenInfo.h - Generator info -------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef MLIR_TABLEGEN_GENINFO_H_ 10 #define MLIR_TABLEGEN_GENINFO_H_ 11 12 #include "mlir/Support/LLVM.h" 13 #include "llvm/ADT/StringRef.h" 14 #include <functional> 15 16 namespace llvm { 17 class RecordKeeper; 18 } // end namespace llvm 19 20 namespace mlir { 21 22 /// Generator function to invoke. 23 using GenFunction = std::function<bool(const llvm::RecordKeeper &recordKeeper, 24 raw_ostream &os)>; 25 26 /// Structure to group information about a generator (argument to invoke via 27 /// mlir-tblgen, description, and generator function). 28 class GenInfo { 29 public: 30 /// GenInfo constructor should not be invoked directly, instead use 31 /// GenRegistration or registerGen. GenInfo(StringRef arg,StringRef description,GenFunction generator)32 GenInfo(StringRef arg, StringRef description, GenFunction generator) 33 : arg(arg), description(description), generator(generator) {} 34 35 /// Invokes the generator and returns whether the generator failed. invoke(const llvm::RecordKeeper & recordKeeper,raw_ostream & os)36 bool invoke(const llvm::RecordKeeper &recordKeeper, raw_ostream &os) const { 37 assert(generator && "Cannot call generator with null generator"); 38 return generator(recordKeeper, os); 39 } 40 41 /// Returns the command line option that may be passed to 'mlir-tblgen' to 42 /// invoke this generator. getGenArgument()43 StringRef getGenArgument() const { return arg; } 44 45 /// Returns a description for the generator. getGenDescription()46 StringRef getGenDescription() const { return description; } 47 48 private: 49 // The argument with which to invoke the generator via mlir-tblgen. 50 StringRef arg; 51 52 // Description of the generator. 53 StringRef description; 54 55 // Generator function. 56 GenFunction generator; 57 }; 58 59 /// GenRegistration provides a global initializer that registers a generator 60 /// function. 61 /// 62 /// Usage: 63 /// 64 /// // At namespace scope. 65 /// static GenRegistration Print("print", "Print records", [](...){...}); 66 struct GenRegistration { 67 GenRegistration(StringRef arg, StringRef description, GenFunction function); 68 }; 69 70 } // end namespace mlir 71 72 #endif // MLIR_TABLEGEN_GENINFO_H_ 73