diff --git a/include/circt-c/Conversion.h b/include/circt-c/Conversion.h index 5482050a3332..2cf3a6b10abf 100644 --- a/include/circt-c/Conversion.h +++ b/include/circt-c/Conversion.h @@ -7,6 +7,7 @@ #include "mlir-c/Support.h" +#include "circt/Conversion/Conversion.capi.h.inc" #include "mlir/Conversion/Passes.capi.h.inc" #endif // CIRCT_C_CONVERSION_H diff --git a/include/circt-c/Transforms.h b/include/circt-c/Transforms.h new file mode 100644 index 000000000000..6c32a99f896b --- /dev/null +++ b/include/circt-c/Transforms.h @@ -0,0 +1,12 @@ +//===-- circt-c/Transform.h - C API for dialect transforms --------*- C -*-===// +// +//===----------------------------------------------------------------------===// + +#ifndef CIRCT_C_TRANSFORMS_H +#define CIRCT_C_TRANSFORMS_H + +#include "mlir-c/Support.h" + +#include "circt/Transforms/Transforms.capi.h.inc" + +#endif // CIRCT_C_TRANSFORMS_H diff --git a/include/circt/Conversion/CMakeLists.txt b/include/circt/Conversion/CMakeLists.txt index bc227db34cb6..135c37699b13 100644 --- a/include/circt/Conversion/CMakeLists.txt +++ b/include/circt/Conversion/CMakeLists.txt @@ -1,7 +1,7 @@ set(LLVM_TARGET_DEFINITIONS Passes.td) -mlir_tablegen(Passes.h.inc -gen-pass-decls -name Conversion) -mlir_tablegen(Conversion.capi.h.inc -gen-pass-capi-header --prefix Conversion) -mlir_tablegen(Conversion.capi.cpp.inc -gen-pass-capi-impl --prefix Conversion) +mlir_tablegen(Passes.h.inc -gen-pass-decls -name CIRCTConversion) +mlir_tablegen(Conversion.capi.h.inc -gen-pass-capi-header --prefix CIRCTConversion) +mlir_tablegen(Conversion.capi.cpp.inc -gen-pass-capi-impl --prefix CIRCTConversion) add_public_tablegen_target(CIRCTConversionPassIncGen) add_circt_doc(Passes CIRCTConversionPasses -gen-pass-doc) diff --git a/include/circt/InitAllPasses.h b/include/circt/InitAllPasses.h index 9f3c1d7f695e..7659f1a1c4d9 100644 --- a/include/circt/InitAllPasses.h +++ b/include/circt/InitAllPasses.h @@ -47,10 +47,10 @@ namespace circt { inline void registerAllPasses() { // Conversion Passes - registerConversionPasses(); + registerCIRCTConversionPasses(); // Transformation passes - registerTransformsPasses(); + registerCIRCTTransformsPasses(); // LEC transformation passes registerLECTransformsPasses(); diff --git a/include/circt/Transforms/CMakeLists.txt b/include/circt/Transforms/CMakeLists.txt index cbc53223211b..bc2a0f2695d2 100644 --- a/include/circt/Transforms/CMakeLists.txt +++ b/include/circt/Transforms/CMakeLists.txt @@ -1,8 +1,8 @@ set(LLVM_TARGET_DEFINITIONS Passes.td) -mlir_tablegen(Passes.h.inc -gen-pass-decls -name Transforms) -mlir_tablegen(Transforms.capi.h.inc -gen-pass-capi-header --prefix Transforms) -mlir_tablegen(Transforms.capi.cpp.inc -gen-pass-capi-impl --prefix Transforms) +mlir_tablegen(Passes.h.inc -gen-pass-decls -name CIRCTTransforms) +mlir_tablegen(Transforms.capi.h.inc -gen-pass-capi-header --prefix CIRCTTransforms) +mlir_tablegen(Transforms.capi.cpp.inc -gen-pass-capi-impl --prefix CIRCTTransforms) add_public_tablegen_target(CIRCTTransformsPassIncGen) add_mlir_doc(Passes CIRCTGeneralPasses ./ -gen-pass-doc) diff --git a/lib/Bindings/Python/CIRCTModule.cpp b/lib/Bindings/Python/CIRCTModule.cpp index 9dcefd19034a..aa091bdf5ee7 100644 --- a/lib/Bindings/Python/CIRCTModule.cpp +++ b/lib/Bindings/Python/CIRCTModule.cpp @@ -23,6 +23,7 @@ #include "circt-c/Dialect/MSFT.h" #include "circt-c/Dialect/OM.h" #include "circt-c/Dialect/RTG.h" +#include "circt-c/Transforms.h" #ifdef CIRCT_INCLUDE_TESTS #include "circt-c/Dialect/RTGTest.h" #endif @@ -53,8 +54,9 @@ static void registerPasses() { registerHWArithPasses(); registerHWPasses(); registerHandshakePasses(); - mlirRegisterConversionPasses(); - mlirRegisterTransformsPasses(); + mlirRegisterCIRCTConversionPasses(); + mlirRegisterCIRCTTransformsPasses(); + mlirRegisterTransformsCSE(); } PYBIND11_MODULE(_circt, m) { diff --git a/lib/Bindings/Python/CMakeLists.txt b/lib/Bindings/Python/CMakeLists.txt index bd1c7404ed4e..54e3a4743223 100644 --- a/lib/Bindings/Python/CMakeLists.txt +++ b/lib/Bindings/Python/CMakeLists.txt @@ -51,6 +51,9 @@ set(PYTHON_BINDINGS_LINK_LIBS CIRCTCAPISMT CIRCTCAPISV CIRCTCAPIVerif + CIRCTCAPITransforms + # needed for mlirFrozenRewritePatternSetDestroy + # but not the actual passes MLIRCAPITransforms ) diff --git a/lib/CAPI/CMakeLists.txt b/lib/CAPI/CMakeLists.txt index d9ca6a0fe83b..70753aa3a8fd 100644 --- a/lib/CAPI/CMakeLists.txt +++ b/lib/CAPI/CMakeLists.txt @@ -4,3 +4,4 @@ add_subdirectory(ExportVerilog) add_subdirectory(Dialect) add_subdirectory(Firtool) add_subdirectory(RtgTool) +add_subdirectory(Transforms) diff --git a/lib/CAPI/Transforms/CMakeLists.txt b/lib/CAPI/Transforms/CMakeLists.txt new file mode 100644 index 000000000000..c487eed1c2b2 --- /dev/null +++ b/lib/CAPI/Transforms/CMakeLists.txt @@ -0,0 +1,6 @@ +add_circt_public_c_api_library(CIRCTCAPITransforms + Transforms.cpp + + LINK_LIBS PUBLIC + CIRCTTransforms +) diff --git a/lib/CAPI/Transforms/Transforms.cpp b/lib/CAPI/Transforms/Transforms.cpp new file mode 100644 index 000000000000..00c24d6e0247 --- /dev/null +++ b/lib/CAPI/Transforms/Transforms.cpp @@ -0,0 +1,24 @@ +//===- Transforms.cpp - C API for Transforms 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 "circt-c/Transforms.h" +#include "circt/Transforms/Passes.h" +#include "mlir/CAPI/Pass.h" +#include "mlir/Pass/Pass.h" + +using namespace circt; + +#ifdef __cplusplus +extern "C" { +#endif + +#include "circt/Transforms/Transforms.capi.cpp.inc" + +#ifdef __cplusplus +} +#endif