Skip to content

Commit 9334511

Browse files
kumasentoivanradanov
authored andcommitted
[AnnotateScop] new pass annotates scop.ignored
1 parent d426f49 commit 9334511

File tree

9 files changed

+106
-1
lines changed

9 files changed

+106
-1
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
add_subdirectory(Transforms)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
set(LLVM_TARGET_DEFINITIONS Passes.td)
2+
mlir_tablegen(Passes.h.inc -gen-pass-decls -name Transforms)
3+
add_public_tablegen_target(PolymerTransformsIncGen)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//===- Passes.h - Include Tblgen pass defs ------------C++-===//
2+
#ifndef POLYMER_TRANSFORMS_PASSES_H
3+
#define POLYMER_TRANSFORMS_PASSES_H
4+
5+
#include "mlir/Pass/Pass.h"
6+
7+
namespace polymer {
8+
9+
std::unique_ptr<mlir::OperationPass<mlir::FuncOp>> createAnnotateScopPass();
10+
11+
/// Generate the code for registering passes.
12+
#define GEN_PASS_REGISTRATION
13+
#include "polymer/Transforms/Passes.h.inc"
14+
15+
} // namespace polymer
16+
17+
#endif
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#ifndef POLYMER_TRANSFORMS_PASSES
2+
#define POLYMER_TRANSFORMS_PASSES
3+
4+
include "mlir/Pass/PassBase.td"
5+
include "mlir/Rewrite/PassUtil.td"
6+
7+
def AnnotateScop : FunctionPass<"annotate-scop"> {
8+
let summary = "Annotate scop.ignore to unselected functions.";
9+
let constructor = "polymer::createAnnotateScopPass()";
10+
11+
let options = [
12+
ListOption<
13+
"includedFunctions",
14+
"functions",
15+
"std::string",
16+
"A list of functions to be included.",
17+
"llvm::cl::ZeroOrMore, llvm::cl::MiscFlags::CommaSeparated">
18+
];
19+
}
20+
21+
#endif
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//===- AnnotateScop.cc --------------------------------------*- C++ -*-===//
2+
3+
#include "PassDetail.h"
4+
5+
#include "mlir/Dialect/Affine/IR/AffineOps.h"
6+
#include "mlir/Dialect/MemRef/IR/MemRef.h"
7+
#include "mlir/Dialect/SCF/SCF.h"
8+
#include "mlir/Transforms/LoopUtils.h"
9+
#include "mlir/Transforms/Passes.h"
10+
#include "mlir/Transforms/RegionUtils.h"
11+
#include "llvm/Support/Debug.h"
12+
13+
using namespace mlir;
14+
using namespace llvm;
15+
using namespace polymer;
16+
17+
namespace {
18+
struct AnnotateScop : public polymer::AnnotateScopBase<AnnotateScop> {
19+
void runOnFunction() override {
20+
FuncOp f = getOperation();
21+
OpBuilder b(f.getContext());
22+
23+
for (auto &name : includedFunctions)
24+
if (name == f.getName())
25+
return;
26+
27+
f->setAttr("scop.ignored", b.getUnitAttr());
28+
} // namespace
29+
};
30+
} // namespace
31+
32+
std::unique_ptr<OperationPass<FuncOp>> polymer::createAnnotateScopPass() {
33+
return std::make_unique<AnnotateScop>();
34+
}

tools/polymer/lib/Transforms/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ add_mlir_conversion_library(PolymerTransforms
66
LoopAnnotate.cc
77
LoopExtract.cc
88
FoldSCFIf.cc
9+
AnnotateScop.cc
910

1011
ADDITIONAL_HEADER_DIRS
1112
"${POLYMER_MAIN_INCLUDE_DIR}/polymer/Transforms"
1213

1314
DEPENDS
14-
${POLYMER_TRANSFORM_DEPENDS}
15+
PolymerTransformsIncGen
1516

1617
LINK_LIBS PUBLIC
1718
MLIRAffine
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//===- PassDetail.h - Transforms Pass class details -------------*- C++ -*-===//
2+
3+
#ifndef POLYMER_TRANSFORMS_PASSDETAIL_H_
4+
#define POLYMER_TRANSFORMS_PASSDETAIL_H_
5+
6+
#include "mlir/Pass/Pass.h"
7+
#include "polymer/Transforms/Passes.h"
8+
9+
namespace polymer {
10+
#define GEN_PASS_CLASSES
11+
#include "polymer/Transforms/Passes.h.inc"
12+
} // namespace polymer
13+
14+
#endif
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// RUN: polymer-opt %s -annotate-scop="functions=foo" | FileCheck %s
2+
3+
func @foo() {
4+
return
5+
}
6+
7+
func @bar() {
8+
return
9+
}
10+
11+
// CHECK: func @foo() {
12+
// CHECK: func @bar() attributes {scop.ignored} {

tools/polymer/tools/polymer-opt/polymer-opt.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "polymer/Transforms/FoldSCFIf.h"
1010
#include "polymer/Transforms/LoopAnnotate.h"
1111
#include "polymer/Transforms/LoopExtract.h"
12+
#include "polymer/Transforms/Passes.h"
1213
#include "polymer/Transforms/PlutoTransform.h"
1314
#include "polymer/Transforms/Reg2Mem.h"
1415
#include "polymer/Transforms/ScopStmtOpt.h"
@@ -61,6 +62,7 @@ int main(int argc, char *argv[]) {
6162
registerLoopAnnotatePasses();
6263
registerLoopExtractPasses();
6364
registerFoldSCFIfPass();
65+
registerAnnotateScopPass();
6466

6567
// Register any pass manager command line options.
6668
registerMLIRContextCLOptions();

0 commit comments

Comments
 (0)