[SplitFunction] start of split-function pass

This commit is contained in:
Hanchen Ye 2020-12-09 13:04:51 -06:00
parent cbadc8f831
commit b01d469bf3
4 changed files with 63 additions and 3 deletions

View File

@ -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();

View File

@ -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

View File

@ -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>();
}

View File

@ -0,0 +1,6 @@
// RUN: scalehls-opt -split-function %s | FileCheck %s
// CHECK-LABEL: func @test_for
func @test_for() {
return
}