From 9500860fb6e192bce09da18c813926d1c6d2ea4d Mon Sep 17 00:00:00 2001 From: Hanchen Ye Date: Fri, 18 Mar 2022 11:16:54 -0500 Subject: [PATCH] [RaiseImplicitCopy] Start of this pass --- include/scalehls/Transforms/Passes.h | 1 + include/scalehls/Transforms/Passes.td | 10 +++++++++ lib/Transforms/CMakeLists.txt | 1 + lib/Transforms/Memory/RaiseImplicitCopy.cpp | 24 +++++++++++++++++++++ 4 files changed, 36 insertions(+) create mode 100644 lib/Transforms/Memory/RaiseImplicitCopy.cpp diff --git a/include/scalehls/Transforms/Passes.h b/include/scalehls/Transforms/Passes.h index bff01ce..67bc3e7 100644 --- a/include/scalehls/Transforms/Passes.h +++ b/include/scalehls/Transforms/Passes.h @@ -69,6 +69,7 @@ std::unique_ptr createCreateMemrefSubviewPass(); std::unique_ptr createPromoteBufferPass(); std::unique_ptr createAffineStoreForwardPass(); std::unique_ptr createSimplifyMemrefAccessPass(); +std::unique_ptr createRaiseImplicitCopyPass(); std::unique_ptr createReduceInitialIntervalPass(); /// Directive optimization passes. diff --git a/include/scalehls/Transforms/Passes.td b/include/scalehls/Transforms/Passes.td index 0c82c60..74d731d 100644 --- a/include/scalehls/Transforms/Passes.td +++ b/include/scalehls/Transforms/Passes.td @@ -381,6 +381,16 @@ def SimplifyMemrefAccess : Pass<"scalehls-simplify-memref-access", "FuncOp"> { let constructor = "mlir::scalehls::createSimplifyMemrefAccessPass()"; } +def RaiseImplicitCopy : Pass<"scalehls-raise-implicit-copy", "FuncOp"> { + let summary = "Raise copy in affine loops to memref.copy"; + let description = [{ + This raise-implicit-copy pass will detect implicit copy in affine loops and + raise to memref.copy in order to eliminate redundant copies. + }]; + + let constructor = "mlir::scalehls::createRaiseImplicitCopyPass()"; +} + def ReduceInitialInterval : Pass<"scalehls-reduce-initial-interval", "FuncOp"> { let summary = "Try to reduce the intiail interval"; let description = [{ diff --git a/lib/Transforms/CMakeLists.txt b/lib/Transforms/CMakeLists.txt index 6abfb7f..baa8621 100644 --- a/lib/Transforms/CMakeLists.txt +++ b/lib/Transforms/CMakeLists.txt @@ -20,6 +20,7 @@ add_mlir_library(MLIRScaleHLSTransforms Memory/AffineStoreForward.cpp Memory/CreateMemrefSubview.cpp Memory/PromoteBuffer.cpp + Memory/RaiseImplicitCopy.cpp Memory/ReduceInitialInterval.cpp Memory/SimplifyMemrefAccess.cpp CreateRuntimeMain.cpp diff --git a/lib/Transforms/Memory/RaiseImplicitCopy.cpp b/lib/Transforms/Memory/RaiseImplicitCopy.cpp new file mode 100644 index 0000000..7d3097b --- /dev/null +++ b/lib/Transforms/Memory/RaiseImplicitCopy.cpp @@ -0,0 +1,24 @@ +//===----------------------------------------------------------------------===// +// +// Copyright 2020-2021 The ScaleHLS Authors. +// +//===----------------------------------------------------------------------===// + +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/LoopUtils.h" +#include "mlir/Dialect/Affine/Utils.h" +#include "scalehls/Transforms/Passes.h" +#include "scalehls/Transforms/Utils.h" + +using namespace mlir; +using namespace scalehls; + +namespace { +struct RaiseImplicitCopy : public RaiseImplicitCopyBase { + void runOnOperation() override {} +}; +} // namespace + +std::unique_ptr scalehls::createRaiseImplicitCopyPass() { + return std::make_unique(); +}