73 lines
2.3 KiB
C
73 lines
2.3 KiB
C
|
//===- 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_
|