Program Listing for File ConvertToEmitHLS.cpp
↰ Return to documentation for file (lib/Conversion/ConvertToEmitHLS/ConvertToEmitHLS.cpp)
#include "laksa-mlir/Conversion/ConvertToEmitHLS/ConvertToEmitHLS.h"
#include "laksa-mlir/Conversion/ConvertToDFG/ConvertToDFG.h"
#include "laksa-mlir/Conversion/Passes.h"
#include "laksa-mlir/Dialect/DFG/Transforms/Passes.h"
#include "laksa-mlir/Dialect/EmitHLS/Transforms/Passes.h"
#include "laksa-mlir/Dialect/Linalg/Transforms/Passes.h"
#include "mlir/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.h"
#include "mlir/Pass/PassManager.h"
#include "mlir/Pass/PassRegistry.h"
#include <mlir/Dialect/Bufferization/Transforms/Passes.h>
#include <mlir/Transforms/Passes.h>
using namespace mlir;
namespace {
struct ConvertToEmitHLSPipelineOptions
: public PassPipelineOptions<ConvertToEmitHLSPipelineOptions> {
Option<int64_t> availableBRAM{
*this,
"available-bram",
llvm::cl::desc("Total Number of BRAM on the hardware"),
llvm::cl::init(288)};
Option<int64_t> availableDSP{
*this,
"available-dsp",
llvm::cl::desc("Total Number of DSP on the hardware"),
llvm::cl::init(1248)};
};
} // namespace
void mlir::laksa::addConvertToEmitHLSPasses(
OpPassManager &pm,
int64_t availableBRAM,
int64_t availableDSP)
{
addConvertToDFGPasses(pm);
pm.addPass(dfg::createDFGOperatorToProcessPass());
pm.addPass(bufferization::createOneShotBufferizePass());
pm.addPass(createCanonicalizerPass());
pm.addPass(createCSEPass());
pm.addPass(linalg::createLinalgMapToGenericPass());
pm.addPass(createConvertLinalgToLAKSALoopsPass());
pm.addPass(createCanonicalizerPass());
pm.addPass(createCSEPass());
pm.addPass(dfg::createDFGIONormalizationPass());
pm.addPass(createConvertMemRefPadToLAKSALoopsPass());
pm.addPass(createConvertAffineToEmitHLSPass());
pm.addPass(createConvertArithToEmitHLSPass());
pm.addPass(dfg::createDFGCollapseUnitDimsPass());
pm.addPass(createCanonicalizerPass());
pm.addPass(createCSEPass());
pm.addPass(createConvertDFGToEmitHLSPass());
pm.addPass(createReconcileUnrealizedCastsPass());
pm.addPass(createCanonicalizerPass());
pm.addPass(createCSEPass());
pm.addPass(emithls::createEmitHLSFuseOperatorPass());
pm.addPass(emithls::createEmitHLSResolveHelpersPass());
pm.addPass(emithls::createEmitHLSLoopFusionPass());
pm.addPass(emithls::createEmitHLSFuseOperatorPass());
pm.addPass(emithls::createEmitHLSFoldExpressionPass());
pm.addPass(emithls::createEmitHLSAddIOFunctionsPass());
pm.addPass(createCanonicalizerPass());
pm.addPass(createCSEPass());
pm.addPass(
emithls::createEmitHLSPragmaDSEPass(availableBRAM, availableDSP));
pm.addPass(emithls::createEmitHLSPragmaInsertionPass());
pm.addPass(emithls::createEmitHLSInsertIncludesPass());
pm.addPass(createCanonicalizerPass());
pm.addPass(createCSEPass());
}
void mlir::laksa::registerConvertToEmitHLSPipelines()
{
PassPipelineRegistration<ConvertToEmitHLSPipelineOptions>(
"convert-to-emithls",
"Convert everything to emithls dialect",
[](OpPassManager &pm, const ConvertToEmitHLSPipelineOptions &options) {
addConvertToEmitHLSPasses(
pm,
options.availableBRAM,
options.availableDSP);
});
}