Make a real library for InitAll and extend it to conditionally initialize dependencies.

* Conditioned on the top level CMake option to enable IREE.
* There is still some warning flags and such that need triage, but it does build/work.
pull/1/head
Stella Laurenzo 2020-06-11 17:47:14 -07:00
parent a29ef9adc8
commit 19196f23e1
7 changed files with 121 additions and 57 deletions

View File

@ -52,7 +52,7 @@ add_definitions(${LLVM_DEFINITIONS})
# IREE configuration # IREE configuration
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
if(${NPCOMP_ENABLE_IREE}) if(NPCOMP_ENABLE_IREE)
add_compile_definitions(NPCOMP_ENABLE_IREE) add_compile_definitions(NPCOMP_ENABLE_IREE)
if(NPCOMP_IREE_SRCDIR) if(NPCOMP_IREE_SRCDIR)
message(STATUS "Depending on IREE source: ${NPCOMP_IREE_SRCDIR}") message(STATUS "Depending on IREE source: ${NPCOMP_IREE_SRCDIR}")
@ -63,6 +63,9 @@ if(${NPCOMP_ENABLE_IREE})
else() else()
find_package(IREE REQUIRED CONFIG) find_package(IREE REQUIRED CONFIG)
endif() endif()
message(STATUS "IREE INCLUDE DIRS: ${IREE_PUBLIC_INCLUDE_DIRS}")
include_directories("${IREE_PUBLIC_INCLUDE_DIRS}")
endif() endif()
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------

View File

@ -9,48 +9,12 @@
#ifndef NPCOMP_INITALL_H #ifndef NPCOMP_INITALL_H
#define NPCOMP_INITALL_H #define NPCOMP_INITALL_H
#include "npcomp/Dialect/Basicpy/IR/BasicpyDialect.h"
#include "npcomp/Dialect/Basicpy/Transforms/Passes.h"
#include "npcomp/Dialect/NpcompRt/IR/NpcompRtDialect.h"
#include "npcomp/Dialect/Numpy/IR/NumpyDialect.h"
#include "npcomp/Dialect/TCF/IR/TCFDialect.h"
#include "npcomp/Dialect/TCP/IR/TCPDialect.h"
#include "npcomp/Conversion/TCFToTCP/TCFToTCP.h"
#include "npcomp/Conversion/TCPToLinalg/TCPToLinalg.h"
#include "npcomp/E2E/E2E.h"
namespace mlir { namespace mlir {
namespace NPCOMP { namespace NPCOMP {
inline void registerAllDialects() { void registerAllDialects();
registerDialect<Basicpy::BasicpyDialect>(); void registerAllPasses();
registerDialect<Numpy::NumpyDialect>();
registerDialect<npcomp_rt::NpcompRtDialect>();
registerDialect<tcf::TCFDialect>();
registerDialect<tcp::TCPDialect>();
}
inline void registerAllPasses() {
using mlir::Pass; // The .inc files reference this unqualified.
#define GEN_PASS_REGISTRATION
#include "npcomp/E2E/Passes.h.inc"
// TODO: The following pipeline registration uses pass manager options,
// which causes vague linkage issues when co-mingled with code that
// uses RTTI.
mlir::PassPipelineRegistration<E2ELoweringPipelineOptions>(
"e2e-lowering-pipeline", "E2E lowering pipeline.",
mlir::NPCOMP::createE2ELoweringPipeline);
mlir::PassPipelineRegistration<>(
"lower-to-hybrid-tensor-memref-pipeline",
"Pipeline lowering to hybrid tensor/memref.",
mlir::NPCOMP::createLowerToHybridTensorMemRefPipeline);
#define GEN_PASS_REGISTRATION
#include "npcomp/Conversion/Passes.h.inc"
#define GEN_PASS_REGISTRATION
#include "npcomp/Dialect/Basicpy/Transforms/Passes.h.inc"
}
} // namespace NPCOMP } // namespace NPCOMP
} // namespace mlir } // namespace mlir

View File

@ -1,3 +1,37 @@
add_subdirectory(Conversion) add_subdirectory(Conversion)
add_subdirectory(Dialect) add_subdirectory(Dialect)
add_subdirectory(E2E) add_subdirectory(E2E)
################################################################################
# Setup the initialization target.
# This includes conditional dependencies based on whether features are enabled.
################################################################################
set(ALL_DEPENDS)
if(NPCOMP_ENABLE_IREE)
list(APPEND ALL_DEPENDS
iree_tools_init_compiler_modules
iree_tools_init_iree_passes_and_dialects
iree_tools_init_mlir_passes_and_dialects
iree_tools_init_targets
iree_tools_init_xla_dialects
)
endif()
add_mlir_library(NPCOMPInitAll
InitAll.cpp
LINK_LIBS
PRIVATE
# Local depends
NPCOMPE2E
NPCOMPTCP
NPCOMPTCF
NPCOMPNpcompRt
NPCOMPBasicpyDialect
NPCOMPBasicpyPasses
NPCOMPNumpyDialect
${ALL_DEPENDS}
)

77
lib/InitAll.cpp 100644
View File

@ -0,0 +1,77 @@
//===----------------------------------------------------------------------===//
//
// 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 "npcomp/InitAll.h"
#include "npcomp/Dialect/Basicpy/IR/BasicpyDialect.h"
#include "npcomp/Dialect/Basicpy/Transforms/Passes.h"
#include "npcomp/Dialect/NpcompRt/IR/NpcompRtDialect.h"
#include "npcomp/Dialect/Numpy/IR/NumpyDialect.h"
#include "npcomp/Dialect/TCF/IR/TCFDialect.h"
#include "npcomp/Dialect/TCP/IR/TCPDialect.h"
#include "npcomp/Conversion/TCFToTCP/TCFToTCP.h"
#include "npcomp/Conversion/TCPToLinalg/TCPToLinalg.h"
#include "npcomp/E2E/E2E.h"
#ifdef NPCOMP_ENABLE_IREE
#include "iree/tools/init_compiler_modules.h"
#include "iree/tools/init_iree_dialects.h"
#include "iree/tools/init_iree_passes.h"
#include "iree/tools/init_mlir_dialects.h"
#include "iree/tools/init_mlir_passes.h"
#include "iree/tools/init_targets.h"
#include "iree/tools/init_xla_dialects.h"
#endif // NPCOMP_ENABLE_IREE
static void registerDependencyDialects() {
#ifdef NPCOMP_ENABLE_IREE
// TODO: We should probably be registering the MLIR dialects regardless
// of building with IREE, but we have to do it with IREE, and the
// dependencies are coming from there and wouldn't be great to duplicate.
// See iree/tools:init_mlir_passes_and_dialects
mlir::registerMlirDialects();
mlir::registerXLADialects();
mlir::iree_compiler::registerIreeDialects();
mlir::iree_compiler::registerIreeCompilerModuleDialects();
#endif // NPCOMP_ENABLE_IREE
}
static void registerDependencyPasses() {
}
void mlir::NPCOMP::registerAllDialects() {
registerDialect<Basicpy::BasicpyDialect>();
registerDialect<Numpy::NumpyDialect>();
registerDialect<npcomp_rt::NpcompRtDialect>();
registerDialect<tcf::TCFDialect>();
registerDialect<tcp::TCPDialect>();
registerDependencyDialects();
}
void mlir::NPCOMP::registerAllPasses() {
using mlir::Pass; // The .inc files reference this unqualified.
#define GEN_PASS_REGISTRATION
#include "npcomp/E2E/Passes.h.inc"
// TODO: The following pipeline registration uses pass manager options,
// which causes vague linkage issues when co-mingled with code that
// uses RTTI.
mlir::PassPipelineRegistration<E2ELoweringPipelineOptions>(
"e2e-lowering-pipeline", "E2E lowering pipeline.",
mlir::NPCOMP::createE2ELoweringPipeline);
mlir::PassPipelineRegistration<>(
"lower-to-hybrid-tensor-memref-pipeline",
"Pipeline lowering to hybrid tensor/memref.",
mlir::NPCOMP::createLowerToHybridTensorMemRefPipeline);
#define GEN_PASS_REGISTRATION
#include "npcomp/Conversion/Passes.h.inc"
#define GEN_PASS_REGISTRATION
#include "npcomp/Dialect/Basicpy/Transforms/Passes.h.inc"
registerDependencyPasses();
}

View File

@ -71,15 +71,7 @@ target_link_libraries(${extension_target}
${conversion_libs} ${conversion_libs}
pybind11::module pybind11::module
# Local depends NPCOMPInitAll
# Note: These need to also match tools/npcomp-opt/CMakeLists.txt
NPCOMPE2E
NPCOMPTCP
NPCOMPTCF
NPCOMPNpcompRt
NPCOMPBasicpyDialect
NPCOMPBasicpyPasses
NPCOMPNumpyDialect
# Core dialects # Core dialects
MLIRSCF MLIRSCF

View File

@ -4,13 +4,7 @@ set(LIBS
${dialect_libs} ${dialect_libs}
${conversion_libs} ${conversion_libs}
MLIROptLib MLIROptLib
# Note: the following must also match python_native/CMakeLists.txt NPCOMPInitAll
NPCOMPE2E
NPCOMPTCP
NPCOMPTCF
NPCOMPNpcompRt
NPCOMPNumpyDialect
NPCOMPBasicpyDialect
) )
add_llvm_executable(npcomp-opt npcomp-opt.cpp) add_llvm_executable(npcomp-opt npcomp-opt.cpp)

View File

@ -22,5 +22,5 @@ target_link_libraries(npcomp-run-mlir PRIVATE
MLIRParser MLIRParser
MLIRTargetLLVMIR MLIRTargetLLVMIR
MLIRSupport MLIRSupport
NPCOMPE2E NPCOMPInitAll
) )