diff --git a/include/gc/Dialect/CMakeLists.txt b/include/gc/Dialect/CMakeLists.txt index db17a6f99..c2fe46c4d 100644 --- a/include/gc/Dialect/CMakeLists.txt +++ b/include/gc/Dialect/CMakeLists.txt @@ -2,3 +2,4 @@ add_subdirectory(CPURuntime) add_subdirectory(OneDNNGraph) add_subdirectory(Microkernel) add_subdirectory(Linalgx) +add_subdirectory(LLVMIR) diff --git a/include/gc/Dialect/LLVMIR/CMakeLists.txt b/include/gc/Dialect/LLVMIR/CMakeLists.txt new file mode 100644 index 000000000..e2ef3f9fb --- /dev/null +++ b/include/gc/Dialect/LLVMIR/CMakeLists.txt @@ -0,0 +1,8 @@ +add_mlir_dialect(XeVMOps xevm) +add_mlir_doc(XeVMOps XeVMDialect Dialects/ -gen-dialect-doc -dialect=xevm) +set(LLVM_TARGET_DEFINITIONS XeVMOps.td) +mlir_tablegen(XeVMOpsEnums.h.inc -gen-enum-decls) +mlir_tablegen(XeVMOpsEnums.cpp.inc -gen-enum-defs) +mlir_tablegen(XeVMOpsAttributes.h.inc -gen-attrdef-decls -attrdefs-dialect=xevm) +mlir_tablegen(XeVMOpsAttributes.cpp.inc -gen-attrdef-defs -attrdefs-dialect=xevm) +add_public_tablegen_target(MLIRXeVMConversionsIncGen) diff --git a/include/gc/Dialect/LLVMIR/XeVMDialect.h b/include/gc/Dialect/LLVMIR/XeVMDialect.h new file mode 100644 index 000000000..43d5ca741 --- /dev/null +++ b/include/gc/Dialect/LLVMIR/XeVMDialect.h @@ -0,0 +1,25 @@ +//===-- XeVMDialect.h - MLIR XeVM target definitions ------------*- C++ -*-===// +// +// This file is licensed 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_DIALECT_LLVMIR_XEVMDIALECT_H_ +#define MLIR_DIALECT_LLVMIR_XEVMDIALECT_H_ + +#include "mlir/Bytecode/BytecodeOpInterface.h" +#include "mlir/Dialect/LLVMIR/LLVMDialect.h" +#include "mlir/IR/Dialect.h" +#include "mlir/IR/OpDefinition.h" + +#define GET_ATTRDEF_CLASSES +#include "gc/Dialect/LLVMIR/XeVMOpsAttributes.h.inc" + +#define GET_OP_CLASSES +#include "gc/Dialect/LLVMIR/XeVMOps.h.inc" + +#include "gc/Dialect/LLVMIR/XeVMOpsDialect.h.inc" + +#endif /* MLIR_DIALECT_LLVMIR_XEVMDIALECT_H_ */ diff --git a/include/gc/Dialect/LLVMIR/XeVMOps.td b/include/gc/Dialect/LLVMIR/XeVMOps.td new file mode 100644 index 000000000..e8210bc4e --- /dev/null +++ b/include/gc/Dialect/LLVMIR/XeVMOps.td @@ -0,0 +1,29 @@ +//===-- XeVMOps.td - XeVM dialect definition ---------------*- tablegen -*-===// +// +// This file is licensed 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 XEVMIR_OPS +#define XEVMIR_OPS + +include "mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td" +include "mlir/Dialect/LLVMIR/LLVMOpBase.td" +include "mlir/Interfaces/SideEffectInterfaces.td" + +def XeVM_Dialect : Dialect { + let name = "xevm"; + let cppNamespace = "::mlir::xevm"; + let dependentDialects = ["LLVM::LLVMDialect"]; + let useDefaultAttributePrinterParser = 1; +} + +class XeVM_Attr traits = []> + : AttrDef { + let mnemonic = attrMnemonic; +} + +def XeVM_TargettAttr : XeVM_Attr<"XeVMTarget", "target"> {} + +#endif // XEVMIR_OPS diff --git a/lib/gc/Dialect/CMakeLists.txt b/lib/gc/Dialect/CMakeLists.txt index fe07dda0d..3d1dea1ab 100644 --- a/lib/gc/Dialect/CMakeLists.txt +++ b/lib/gc/Dialect/CMakeLists.txt @@ -2,3 +2,4 @@ add_subdirectory(CPURuntime) add_subdirectory(Linalgx) add_subdirectory(Microkernel) add_subdirectory(OneDNNGraph) +add_subdirectory(LLVMIR) diff --git a/lib/gc/Dialect/LLVMIR/CMakeLists.txt b/lib/gc/Dialect/LLVMIR/CMakeLists.txt new file mode 100644 index 000000000..002e119c0 --- /dev/null +++ b/lib/gc/Dialect/LLVMIR/CMakeLists.txt @@ -0,0 +1,20 @@ +gc_add_mlir_dialect_library(MLIRXeVMDialect + IR/XeVMDialect.cpp + + ADDITIONAL_HEADER_DIRS + ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/LLVMIR + ${PROJECT_SOURCE_DIR}/include/gc/Dialect/LLVMIR + + DEPENDS + MLIRXeVMConversionsIncGen + + LINK_COMPONENTS + AsmParser + Core + + LINK_LIBS PUBLIC + MLIRIR + MLIRLLVMDialect + MLIRSideEffectInterfaces + GcInterface +) diff --git a/lib/gc/Dialect/LLVMIR/IR/XeVMDialect.cpp b/lib/gc/Dialect/LLVMIR/IR/XeVMDialect.cpp new file mode 100644 index 000000000..c330dae9e --- /dev/null +++ b/lib/gc/Dialect/LLVMIR/IR/XeVMDialect.cpp @@ -0,0 +1,38 @@ +//===-- XeVMDialect.cpp - XeVM dialect registration -------------*- C++ -*-===// +// +// This file is licensed 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 +// +//===----------------------------------------------------------------------===// +#include "gc/Dialect/LLVMIR/XeVMDialect.h" + +#include "mlir/Dialect/GPU/IR/CompilationInterfaces.h" +#include "mlir/Dialect/LLVMIR/LLVMDialect.h" +#include "mlir/IR/DialectImplementation.h" +#include "llvm/ADT/TypeSwitch.h" + +using namespace mlir; +using namespace xevm; + +#include "gc/Dialect/LLVMIR/XeVMOpsDialect.cpp.inc" + +void XeVMDialect::initialize() { + // NOLINTBEGIN + addOperations< +#define GET_OP_LIST +#include "gc/Dialect/LLVMIR/XeVMOps.cpp.inc" + >(); + + addAttributes< +#define GET_ATTRDEF_LIST +#include "gc/Dialect/LLVMIR/XeVMOpsAttributes.cpp.inc" + >(); + // NOLINTEND +} + +#define GET_OP_CLASSES +#include "gc/Dialect/LLVMIR/XeVMOps.cpp.inc" + +#define GET_ATTRDEF_CLASSES +#include "gc/Dialect/LLVMIR/XeVMOpsAttributes.cpp.inc" diff --git a/src/gc-opt/gc-opt.cpp b/src/gc-opt/gc-opt.cpp index 8844ce22f..2d2a02884 100644 --- a/src/gc-opt/gc-opt.cpp +++ b/src/gc-opt/gc-opt.cpp @@ -18,6 +18,7 @@ */ #include "gc/Dialect/CPURuntime/Transforms/CPURuntimePasses.h" +#include "gc/Dialect/LLVMIR/XeVMDialect.h" #include "gc/Dialect/Linalgx/LinalgxDialect.h" #include "gc/Dialect/Microkernel/MicrokernelDialect.h" #ifdef GC_HAS_ONEDNN_DIALECT @@ -65,6 +66,7 @@ int main(int argc, char *argv[]) { registry.insert(); registry.insert(); registry.insert(); + registry.insert(); mlir::registerAllDialects(registry); #ifdef GC_USE_IMEX registry.insert<::imex::xetile::XeTileDialect, ::imex::gpux::GPUXDialect>();