blob: 16ed55954f3a22209c3fd92a33c40b871fb97359 [file] [log] [blame]
//===- 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 <functional>
namespace llvm {
class RecordKeeper;
} // end namespace llvm
namespace mlir {
/// Generator function to invoke.
using GenFunction = std::function<bool(const llvm::RecordKeeper &recordKeeper,
raw_ostream &os)>;
/// 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_