forked from OSchip/llvm-project
[mlir][python] Add basic python support for GPU dialect and passes
Differential Revision: https://reviews.llvm.org/D101449
This commit is contained in:
parent
e7db8408d0
commit
b87219f77e
|
@ -0,0 +1,28 @@
|
||||||
|
//===-- mlir-c/Dialect/GPU.h - C API for GPU dialect -------------*- 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_C_DIALECT_GPU_H
|
||||||
|
#define MLIR_C_DIALECT_GPU_H
|
||||||
|
|
||||||
|
#include "mlir-c/Registration.h"
|
||||||
|
#include "mlir-c/Support.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(GPU, gpu);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "mlir/Dialect/GPU/Passes.capi.h.inc"
|
||||||
|
|
||||||
|
#endif // MLIR_C_DIALECT_GPU_H
|
|
@ -18,6 +18,8 @@ add_public_tablegen_target(MLIRParallelLoopMapperEnumsGen)
|
||||||
|
|
||||||
set(LLVM_TARGET_DEFINITIONS Passes.td)
|
set(LLVM_TARGET_DEFINITIONS Passes.td)
|
||||||
mlir_tablegen(Passes.h.inc -gen-pass-decls -name GPU)
|
mlir_tablegen(Passes.h.inc -gen-pass-decls -name GPU)
|
||||||
|
mlir_tablegen(Passes.capi.h.inc -gen-pass-capi-header --prefix GPU)
|
||||||
|
mlir_tablegen(Passes.capi.cpp.inc -gen-pass-capi-impl --prefix GPU)
|
||||||
add_public_tablegen_target(MLIRGPUPassIncGen)
|
add_public_tablegen_target(MLIRGPUPassIncGen)
|
||||||
|
|
||||||
add_mlir_doc(Passes GPUPasses ./ -gen-pass-doc)
|
add_mlir_doc(Passes GPUPasses ./ -gen-pass-doc)
|
||||||
|
|
|
@ -41,6 +41,11 @@ add_mlir_dialect_python_bindings(MLIRBindingsPythonBuiltinOps
|
||||||
DIALECT_NAME builtin)
|
DIALECT_NAME builtin)
|
||||||
add_dependencies(MLIRBindingsPythonSources MLIRBindingsPythonBuiltinOps)
|
add_dependencies(MLIRBindingsPythonSources MLIRBindingsPythonBuiltinOps)
|
||||||
|
|
||||||
|
add_mlir_dialect_python_bindings(MLIRBindingsPythonGPUOps
|
||||||
|
TD_FILE GPUOps.td
|
||||||
|
DIALECT_NAME gpu)
|
||||||
|
add_dependencies(MLIRBindingsPythonSources MLIRBindingsPythonGPUOps)
|
||||||
|
|
||||||
add_mlir_dialect_python_bindings(MLIRBindingsPythonLinalgOps
|
add_mlir_dialect_python_bindings(MLIRBindingsPythonLinalgOps
|
||||||
TD_FILE LinalgOps.td
|
TD_FILE LinalgOps.td
|
||||||
DIALECT_NAME linalg
|
DIALECT_NAME linalg
|
||||||
|
@ -133,6 +138,14 @@ add_mlir_python_extension(MLIRAsyncPassesBindingsPythonExtension _mlirAsyncPasse
|
||||||
)
|
)
|
||||||
add_dependencies(MLIRBindingsPythonExtension MLIRAsyncPassesBindingsPythonExtension)
|
add_dependencies(MLIRBindingsPythonExtension MLIRAsyncPassesBindingsPythonExtension)
|
||||||
|
|
||||||
|
add_mlir_python_extension(MLIRGPUPassesBindingsPythonExtension _mlirGPUPasses
|
||||||
|
INSTALL_DIR
|
||||||
|
python
|
||||||
|
SOURCES
|
||||||
|
GPUPasses.cpp
|
||||||
|
)
|
||||||
|
add_dependencies(MLIRBindingsPythonExtension MLIRGPUPassesBindingsPythonExtension)
|
||||||
|
|
||||||
add_mlir_python_extension(MLIRLinalgPassesBindingsPythonExtension _mlirLinalgPasses
|
add_mlir_python_extension(MLIRLinalgPassesBindingsPythonExtension _mlirLinalgPasses
|
||||||
INSTALL_DIR
|
INSTALL_DIR
|
||||||
python
|
python
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
//===-- GPUOps.td - Entry point GPU_dialect bindings ------*- tablegen -*-===//
|
||||||
|
//
|
||||||
|
// 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 PYTHON_BINDINGS_GPU_OPS
|
||||||
|
#define PYTHON_BINDINGS_GPU_OPS
|
||||||
|
|
||||||
|
include "mlir/Bindings/Python/Attributes.td"
|
||||||
|
include "mlir/Dialect/GPU/GPUOps.td"
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,22 @@
|
||||||
|
//===- GPUPasses.cpp - Pybind module for the GPU passes ------------------===//
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
//===---------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#include "mlir-c/Dialect/GPU.h"
|
||||||
|
|
||||||
|
#include <pybind11/pybind11.h>
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Module initialization.
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
PYBIND11_MODULE(_mlirGPUPasses, m) {
|
||||||
|
m.doc() = "MLIR GPU Dialect Passes";
|
||||||
|
|
||||||
|
// Register all GPU passes on load.
|
||||||
|
mlirRegisterGPUPasses();
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
# 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
|
||||||
|
|
||||||
|
from .._gpu_ops_gen import *
|
|
@ -0,0 +1,6 @@
|
||||||
|
# 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
|
||||||
|
|
||||||
|
from ...._cext_loader import _load_extension
|
||||||
|
_cextGPUPasses = _load_extension("_mlirGPUPasses")
|
|
@ -2,6 +2,8 @@
|
||||||
set(LLVM_OPTIONAL_SOURCES
|
set(LLVM_OPTIONAL_SOURCES
|
||||||
Async.cpp
|
Async.cpp
|
||||||
AsyncPasses.cpp
|
AsyncPasses.cpp
|
||||||
|
GPU.cpp
|
||||||
|
GPUPasses.cpp
|
||||||
Linalg.cpp
|
Linalg.cpp
|
||||||
LinalgPasses.cpp
|
LinalgPasses.cpp
|
||||||
SCF.cpp
|
SCF.cpp
|
||||||
|
@ -24,6 +26,19 @@ add_mlir_public_c_api_library(MLIRCAPIAsync
|
||||||
MLIRPass
|
MLIRPass
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_mlir_public_c_api_library(MLIRCAPIGPU
|
||||||
|
GPU.cpp
|
||||||
|
GPUPasses.cpp
|
||||||
|
|
||||||
|
DEPENDS
|
||||||
|
MLIRGPUPassIncGen
|
||||||
|
|
||||||
|
LINK_LIBS PUBLIC
|
||||||
|
MLIRCAPIIR
|
||||||
|
MLIRGPU
|
||||||
|
MLIRPass
|
||||||
|
)
|
||||||
|
|
||||||
add_mlir_public_c_api_library(MLIRCAPILinalg
|
add_mlir_public_c_api_library(MLIRCAPILinalg
|
||||||
Linalg.cpp
|
Linalg.cpp
|
||||||
LinalgPasses.cpp
|
LinalgPasses.cpp
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
//===- GPUc.cpp - C Interface for GPU dialect ----------------------------===//
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#include "mlir-c/Dialect/GPU.h"
|
||||||
|
#include "mlir/CAPI/Registration.h"
|
||||||
|
#include "mlir/Dialect/GPU/GPUDialect.h"
|
||||||
|
|
||||||
|
MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(GPU, gpu, mlir::gpu::GPUDialect)
|
|
@ -0,0 +1,26 @@
|
||||||
|
//===- GPUPasses.cpp - C API for GPU Dialect Passes ----------------------===//
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#include "mlir/CAPI/Pass.h"
|
||||||
|
#include "mlir/Dialect/GPU/Passes.h"
|
||||||
|
#include "mlir/Pass/Pass.h"
|
||||||
|
|
||||||
|
// Must include the declarations as they carry important visibility attributes.
|
||||||
|
#include "mlir/Dialect/GPU/Passes.capi.h.inc"
|
||||||
|
|
||||||
|
using namespace mlir;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "mlir/Dialect/GPU/Passes.capi.cpp.inc"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1,19 @@
|
||||||
|
# RUN: %PYTHON %s | FileCheck %s
|
||||||
|
|
||||||
|
from mlir.ir import *
|
||||||
|
import mlir.dialects.gpu
|
||||||
|
import mlir.dialects.gpu.passes
|
||||||
|
from mlir.passmanager import *
|
||||||
|
|
||||||
|
def run(f):
|
||||||
|
print("\nTEST:", f.__name__)
|
||||||
|
f()
|
||||||
|
|
||||||
|
def testGPUPass():
|
||||||
|
with Context() as context:
|
||||||
|
PassManager.parse('gpu-kernel-outlining')
|
||||||
|
print('SUCCESS')
|
||||||
|
|
||||||
|
# CHECK-LABEL: testGPUPass
|
||||||
|
# CHECK: SUCCESS
|
||||||
|
run(testGPUPass)
|
Loading…
Reference in New Issue