};
struct TranslateFromMLIRRegistration {
- TranslateFromMLIRRegistration(llvm::StringRef name,
- const TranslateFromMLIRFunction &function);
+ TranslateFromMLIRRegistration(
+ llvm::StringRef name, const TranslateFromMLIRFunction &function,
+ std::function<void(DialectRegistry &)> dialectRegistration =
+ [](DialectRegistry &) {});
};
struct TranslateRegistration {
TranslateRegistration(llvm::StringRef name,
//
//===----------------------------------------------------------------------===//
+#include "mlir/Dialect/SPIRV/SPIRVDialect.h"
#include "mlir/Dialect/SPIRV/SPIRVModule.h"
#include "mlir/Dialect/SPIRV/SPIRVOps.h"
#include "mlir/Dialect/SPIRV/Serialization.h"
#include "mlir/IR/Builders.h"
+#include "mlir/IR/Dialect.h"
#include "mlir/IR/Function.h"
#include "mlir/IR/Module.h"
#include "mlir/Parser.h"
namespace mlir {
void registerToSPIRVTranslation() {
TranslateFromMLIRRegistration toBinary(
- "serialize-spirv", [](ModuleOp module, raw_ostream &output) {
+ "serialize-spirv",
+ [](ModuleOp module, raw_ostream &output) {
return serializeModule(module, output);
+ },
+ [](DialectRegistry ®istry) {
+ registry.insert<spirv::SPIRVDialect>();
});
}
} // namespace mlir
namespace mlir {
void registerTestRoundtripSPIRV() {
TranslateFromMLIRRegistration roundtrip(
- "test-spirv-roundtrip", [](ModuleOp module, raw_ostream &output) {
+ "test-spirv-roundtrip",
+ [](ModuleOp module, raw_ostream &output) {
return roundTripModule(module, /*emitDebugInfo=*/false, output);
+ },
+ [](DialectRegistry ®istry) {
+ registry.insert<spirv::SPIRVDialect>();
});
}
void registerTestRoundtripDebugSPIRV() {
TranslateFromMLIRRegistration roundtrip(
- "test-spirv-roundtrip-debug", [](ModuleOp module, raw_ostream &output) {
+ "test-spirv-roundtrip-debug",
+ [](ModuleOp module, raw_ostream &output) {
return roundTripModule(module, /*emitDebugInfo=*/true, output);
+ },
+ [](DialectRegistry ®istry) {
+ registry.insert<spirv::SPIRVDialect>();
});
}
} // namespace mlir
namespace mlir {
void registerToLLVMIRTranslation() {
TranslateFromMLIRRegistration registration(
- "mlir-to-llvmir", [](ModuleOp module, raw_ostream &output) {
+ "mlir-to-llvmir",
+ [](ModuleOp module, raw_ostream &output) {
llvm::LLVMContext llvmContext;
auto llvmModule = LLVM::ModuleTranslation::translateModule<>(
module, llvmContext, "LLVMDialectModule");
llvmModule->print(output, nullptr);
return success();
- });
+ },
+ [](DialectRegistry ®istry) { registry.insert<LLVM::LLVMDialect>(); });
}
} // namespace mlir
namespace mlir {
void registerToNVVMIRTranslation() {
TranslateFromMLIRRegistration registration(
- "mlir-to-nvvmir", [](ModuleOp module, raw_ostream &output) {
+ "mlir-to-nvvmir",
+ [](ModuleOp module, raw_ostream &output) {
llvm::LLVMContext llvmContext;
auto llvmModule = mlir::translateModuleToNVVMIR(module, llvmContext);
if (!llvmModule)
llvmModule->print(output, nullptr);
return success();
+ },
+ [](DialectRegistry ®istry) {
+ registry.insert<LLVM::LLVMDialect, NVVM::NVVMDialect>();
});
}
} // namespace mlir
namespace mlir {
void registerToROCDLIRTranslation() {
TranslateFromMLIRRegistration registration(
- "mlir-to-rocdlir", [](ModuleOp module, raw_ostream &output) {
+ "mlir-to-rocdlir",
+ [](ModuleOp module, raw_ostream &output) {
llvm::LLVMContext llvmContext;
auto llvmModule = mlir::translateModuleToROCDLIR(module, llvmContext);
if (!llvmModule)
llvmModule->print(output, nullptr);
return success();
+ },
+ [](DialectRegistry ®istry) {
+ registry.insert<ROCDL::ROCDLDialect, LLVM::LLVMDialect>();
});
}
} // namespace mlir
namespace mlir {
void registerAVX512ToLLVMIRTranslation() {
TranslateFromMLIRRegistration reg(
- "avx512-mlir-to-llvmir", [](ModuleOp module, raw_ostream &output) {
+ "avx512-mlir-to-llvmir",
+ [](ModuleOp module, raw_ostream &output) {
llvm::LLVMContext llvmContext;
auto llvmModule = translateLLVMAVX512ModuleToLLVMIR(
module, llvmContext, "LLVMDialectModule");
llvmModule->print(output, nullptr);
return success();
+ },
+ [](DialectRegistry ®istry) {
+ registry.insert<LLVM::LLVMAVX512Dialect, LLVM::LLVMDialect>();
});
}
} // namespace mlir
//===----------------------------------------------------------------------===//
TranslateFromMLIRRegistration::TranslateFromMLIRRegistration(
- StringRef name, const TranslateFromMLIRFunction &function) {
- registerTranslation(name, [function](llvm::SourceMgr &sourceMgr,
- raw_ostream &output,
- MLIRContext *context) {
+ StringRef name, const TranslateFromMLIRFunction &function,
+ std::function<void(DialectRegistry &)> dialectRegistration) {
+ registerTranslation(name, [function, dialectRegistration](
+ llvm::SourceMgr &sourceMgr, raw_ostream &output,
+ MLIRContext *context) {
+ dialectRegistration(context->getDialectRegistry());
auto module = OwningModuleRef(parseSourceFile(sourceMgr, context));
if (!module)
return failure();
// Processes the memory buffer with a new MLIRContext.
auto processBuffer = [&](std::unique_ptr<llvm::MemoryBuffer> ownedBuffer,
raw_ostream &os) {
- MLIRContext context;
+ MLIRContext context(false);
context.printOpOnDiagnostic(!verifyDiagnostics);
llvm::SourceMgr sourceMgr;
sourceMgr.AddNewSourceBuffer(std::move(ownedBuffer), llvm::SMLoc());
int main(int argc, char **argv) {
registerAllTranslations();
registerTestTranslations();
- // TODO: remove the global dialect registry
- registerAllDialects();
return failed(mlirTranslateMain(argc, argv, "MLIR Translation Testing Tool"));
}