[SplitFunction] start of split-function pass
This commit is contained in:
parent
cbadc8f831
commit
b01d469bf3
|
@ -15,12 +15,18 @@ class Pass;
|
|||
namespace mlir {
|
||||
namespace scalehls {
|
||||
|
||||
/// Pragma optimization passes.
|
||||
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> createPartialAffineLoopTilePass();
|
||||
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();
|
||||
|
||||
|
|
|
@ -7,6 +7,10 @@
|
|||
|
||||
include "mlir/Pass/PassBase.td"
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Pragma Optimization Passes
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
def PragmaDSE : Pass<"pragma-dse", "ModuleOp"> {
|
||||
let summary = "Optimize pragma configuration of each optimizable region";
|
||||
let description = [{
|
||||
|
@ -21,7 +25,7 @@ def PragmaDSE : Pass<"pragma-dse", "ModuleOp"> {
|
|||
}
|
||||
|
||||
def ArrayPartition : Pass<"array-partition", "ModuleOp"> {
|
||||
let summary = "Insert pipeline pragma";
|
||||
let summary = "Apply optimized array partition optimization";
|
||||
let description = [{
|
||||
This array-partition pass will automatically search for the best 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"> {
|
||||
let summary = "Try to perfect a nested loop";
|
||||
let description = [{
|
||||
|
@ -89,4 +97,19 @@ def RemoveVarLoopBound : Pass<"remove-var-loop-bound", "ModuleOp"> {
|
|||
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
|
||||
|
|
|
@ -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