From f296884500db0a23dea58af72622c797bd4572a0 Mon Sep 17 00:00:00 2001 From: Petr Kurapov Date: Mon, 21 Oct 2024 05:45:33 -0700 Subject: [PATCH 1/2] [GPU] Add XeVM dialect declaration --- include/gc/Dialect/CMakeLists.txt | 1 + include/gc/Dialect/LLVMIR/CMakeLists.txt | 8 ++++++ include/gc/Dialect/LLVMIR/XeVMDialect.h | 25 ++++++++++++++++ include/gc/Dialect/LLVMIR/XeVMOps.td | 29 +++++++++++++++++++ lib/gc/Dialect/CMakeLists.txt | 1 + lib/gc/Dialect/LLVMIR/CMakeLists.txt | 20 +++++++++++++ lib/gc/Dialect/LLVMIR/IR/XeVMDialect.cpp | 36 ++++++++++++++++++++++++ src/gc-opt/gc-opt.cpp | 2 ++ 8 files changed, 122 insertions(+) create mode 100644 include/gc/Dialect/LLVMIR/CMakeLists.txt create mode 100644 include/gc/Dialect/LLVMIR/XeVMDialect.h create mode 100644 include/gc/Dialect/LLVMIR/XeVMOps.td create mode 100644 lib/gc/Dialect/LLVMIR/CMakeLists.txt create mode 100644 lib/gc/Dialect/LLVMIR/IR/XeVMDialect.cpp 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..2484fc5ec --- /dev/null +++ b/lib/gc/Dialect/LLVMIR/IR/XeVMDialect.cpp @@ -0,0 +1,36 @@ +//===-- 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() { + addOperations< +#define GET_OP_LIST +#include "gc/Dialect/LLVMIR/XeVMOps.cpp.inc" + >(); + + addAttributes< +#define GET_ATTRDEF_LIST +#include "gc/Dialect/LLVMIR/XeVMOpsAttributes.cpp.inc" + >(); +} + +#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>(); From 03a473e7a2f5a166f23144bfb752ec3a2bd7fa39 Mon Sep 17 00:00:00 2001 From: Petr Kurapov Date: Mon, 21 Oct 2024 05:56:31 -0700 Subject: [PATCH 2/2] don't lint cpp includes --- lib/gc/Dialect/LLVMIR/IR/XeVMDialect.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/gc/Dialect/LLVMIR/IR/XeVMDialect.cpp b/lib/gc/Dialect/LLVMIR/IR/XeVMDialect.cpp index 2484fc5ec..c330dae9e 100644 --- a/lib/gc/Dialect/LLVMIR/IR/XeVMDialect.cpp +++ b/lib/gc/Dialect/LLVMIR/IR/XeVMDialect.cpp @@ -18,6 +18,7 @@ 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" @@ -27,6 +28,7 @@ void XeVMDialect::initialize() { #define GET_ATTRDEF_LIST #include "gc/Dialect/LLVMIR/XeVMOpsAttributes.cpp.inc" >(); + // NOLINTEND } #define GET_OP_CLASSES