[SplitFunction] start of split-function pass
This commit is contained in:
parent
cbadc8f831
commit
b01d469bf3
|
@ -15,12 +15,18 @@ class Pass;
|
||||||
namespace mlir {
|
namespace mlir {
|
||||||
namespace scalehls {
|
namespace scalehls {
|
||||||
|
|
||||||
|
/// Pragma optimization passes.
|
||||||
std::unique_ptr<mlir::Pass> createPragmaDSEPass();
|
std::unique_ptr<mlir::Pass> createPragmaDSEPass();
|
||||||
|
std::unique_ptr<mlir::Pass> createInsertPipelinePragmaPass();
|
||||||
|
std::unique_ptr<mlir::Pass> createArrayPartitionPass();
|
||||||
|
|
||||||
|
/// Loop optimization passes.
|
||||||
std::unique_ptr<mlir::Pass> createAffineLoopPerfectionPass();
|
std::unique_ptr<mlir::Pass> createAffineLoopPerfectionPass();
|
||||||
std::unique_ptr<mlir::Pass> createPartialAffineLoopTilePass();
|
std::unique_ptr<mlir::Pass> createPartialAffineLoopTilePass();
|
||||||
std::unique_ptr<mlir::Pass> createRemoveVarLoopBoundPass();
|
std::unique_ptr<mlir::Pass> createRemoveVarLoopBoundPass();
|
||||||
std::unique_ptr<mlir::Pass> createInsertPipelinePragmaPass();
|
|
||||||
std::unique_ptr<mlir::Pass> createArrayPartitionPass();
|
/// Dataflow optimization passes.
|
||||||
|
std::unique_ptr<mlir::Pass> createSplitFunctionPass();
|
||||||
|
|
||||||
void registerTransformsPasses();
|
void registerTransformsPasses();
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,10 @@
|
||||||
|
|
||||||
include "mlir/Pass/PassBase.td"
|
include "mlir/Pass/PassBase.td"
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// Pragma Optimization Passes
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
def PragmaDSE : Pass<"pragma-dse", "ModuleOp"> {
|
def PragmaDSE : Pass<"pragma-dse", "ModuleOp"> {
|
||||||
let summary = "Optimize pragma configuration of each optimizable region";
|
let summary = "Optimize pragma configuration of each optimizable region";
|
||||||
let description = [{
|
let description = [{
|
||||||
|
@ -21,7 +25,7 @@ def PragmaDSE : Pass<"pragma-dse", "ModuleOp"> {
|
||||||
}
|
}
|
||||||
|
|
||||||
def ArrayPartition : Pass<"array-partition", "ModuleOp"> {
|
def ArrayPartition : Pass<"array-partition", "ModuleOp"> {
|
||||||
let summary = "Insert pipeline pragma";
|
let summary = "Apply optimized array partition optimization";
|
||||||
let description = [{
|
let description = [{
|
||||||
This array-partition pass will automatically search for the best array
|
This array-partition pass will automatically search for the best array
|
||||||
partition solution of each on-chip memory instance and insert array
|
partition solution of each on-chip memory instance and insert array
|
||||||
|
@ -46,6 +50,10 @@ def InsertPipelinePragma : Pass<"insert-pipeline-pragma", "ModuleOp"> {
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// Loop Optimization Passes
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
def AffineLoopPerfection : Pass<"affine-loop-perfection", "ModuleOp"> {
|
def AffineLoopPerfection : Pass<"affine-loop-perfection", "ModuleOp"> {
|
||||||
let summary = "Try to perfect a nested loop";
|
let summary = "Try to perfect a nested loop";
|
||||||
let description = [{
|
let description = [{
|
||||||
|
@ -89,4 +97,19 @@ def RemoveVarLoopBound : Pass<"remove-var-loop-bound", "ModuleOp"> {
|
||||||
let constructor = "mlir::scalehls::createRemoveVarLoopBoundPass()";
|
let constructor = "mlir::scalehls::createRemoveVarLoopBoundPass()";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// Dataflow Optimization Passes
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
def SplitFunction : Pass<"split-function", "ModuleOp"> {
|
||||||
|
let summary = "Split function for enabling dataflow";
|
||||||
|
let description = [{
|
||||||
|
This split-function pass should be applied in HLSKernel level. This pass
|
||||||
|
will split each HLSKernel operation into a separate function for applying
|
||||||
|
dataflow pragma to the top function.
|
||||||
|
}];
|
||||||
|
|
||||||
|
let constructor = "mlir::scalehls::createSplitFunctionPass()";
|
||||||
|
}
|
||||||
|
|
||||||
#endif // SCALEHLS_TRANSFORMS_PASSES_TD
|
#endif // SCALEHLS_TRANSFORMS_PASSES_TD
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
//===------------------------------------------------------------*- C++ -*-===//
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#include "Transforms/Passes.h"
|
||||||
|
#include "mlir/Dialect/Affine/IR/AffineOps.h"
|
||||||
|
#include "mlir/Dialect/Affine/Passes.h"
|
||||||
|
#include "mlir/IR/Builders.h"
|
||||||
|
#include "mlir/Transforms/LoopUtils.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace mlir;
|
||||||
|
using namespace scalehls;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
struct SplitFunction : public SplitFunctionBase<SplitFunction> {
|
||||||
|
void runOnOperation() override;
|
||||||
|
};
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
void SplitFunction::runOnOperation() { return; }
|
||||||
|
|
||||||
|
std::unique_ptr<mlir::Pass> scalehls::createSplitFunctionPass() {
|
||||||
|
return std::make_unique<SplitFunction>();
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
// RUN: scalehls-opt -split-function %s | FileCheck %s
|
||||||
|
|
||||||
|
// CHECK-LABEL: func @test_for
|
||||||
|
func @test_for() {
|
||||||
|
return
|
||||||
|
}
|
Loading…
Reference in New Issue