Skip to content

Commit

Permalink
[mlir][python] Add basic python support for GPU dialect and passes
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D101449
  • Loading branch information
nicolasvasilache committed Apr 28, 2021
1 parent e7db840 commit b87219f
Show file tree
Hide file tree
Showing 11 changed files with 164 additions and 0 deletions.
28 changes: 28 additions & 0 deletions mlir/include/mlir-c/Dialect/GPU.h
Original file line number Diff line number Diff line change
@@ -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
2 changes: 2 additions & 0 deletions mlir/include/mlir/Dialect/GPU/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ add_public_tablegen_target(MLIRParallelLoopMapperEnumsGen)

set(LLVM_TARGET_DEFINITIONS Passes.td)
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_mlir_doc(Passes GPUPasses ./ -gen-pass-doc)
13 changes: 13 additions & 0 deletions mlir/lib/Bindings/Python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ add_mlir_dialect_python_bindings(MLIRBindingsPythonBuiltinOps
DIALECT_NAME builtin)
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
TD_FILE LinalgOps.td
DIALECT_NAME linalg
Expand Down Expand Up @@ -133,6 +138,14 @@ add_mlir_python_extension(MLIRAsyncPassesBindingsPythonExtension _mlirAsyncPasse
)
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
INSTALL_DIR
python
Expand Down
15 changes: 15 additions & 0 deletions mlir/lib/Bindings/Python/GPUOps.td
Original file line number Diff line number Diff line change
@@ -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
22 changes: 22 additions & 0 deletions mlir/lib/Bindings/Python/GPUPasses.cpp
Original file line number Diff line number Diff line change
@@ -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();
}
5 changes: 5 additions & 0 deletions mlir/lib/Bindings/Python/mlir/dialects/gpu/__init__.py
Original file line number Diff line number Diff line change
@@ -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 *
6 changes: 6 additions & 0 deletions mlir/lib/Bindings/Python/mlir/dialects/gpu/passes/__init__.py
Original file line number Diff line number Diff line change
@@ -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")
15 changes: 15 additions & 0 deletions mlir/lib/CAPI/Dialect/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
set(LLVM_OPTIONAL_SOURCES
Async.cpp
AsyncPasses.cpp
GPU.cpp
GPUPasses.cpp
Linalg.cpp
LinalgPasses.cpp
SCF.cpp
Expand All @@ -24,6 +26,19 @@ add_mlir_public_c_api_library(MLIRCAPIAsync
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
Linalg.cpp
LinalgPasses.cpp
Expand Down
13 changes: 13 additions & 0 deletions mlir/lib/CAPI/Dialect/GPU.cpp
Original file line number Diff line number Diff line change
@@ -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)
26 changes: 26 additions & 0 deletions mlir/lib/CAPI/Dialect/GPUPasses.cpp
Original file line number Diff line number Diff line change
@@ -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
19 changes: 19 additions & 0 deletions mlir/test/Bindings/Python/dialects/gpu.py
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit b87219f

Please sign in to comment.