Skip to content

Commit

Permalink
[Arc] Add the DummyAnalysisTester pass
Browse files Browse the repository at this point in the history
  • Loading branch information
elhewaty committed Aug 5, 2024
1 parent 4ab27b1 commit 08fead7
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/circt/Dialect/Arc/ArcPasses.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ createAddTapsPass(const AddTapsOptions &options = {});
std::unique_ptr<mlir::Pass> createAllocateStatePass();
std::unique_ptr<mlir::Pass> createArcCanonicalizerPass();
std::unique_ptr<mlir::Pass> createDedupPass();
std::unique_ptr<mlir::Pass> createDummyAnalysisTesterPass();
std::unique_ptr<mlir::Pass> createFindInitialVectorsPass();
std::unique_ptr<mlir::Pass> createGroupResetsAndEnablesPass();
std::unique_ptr<mlir::Pass>
Expand Down
18 changes: 18 additions & 0 deletions include/circt/Dialect/Arc/ArcPasses.td
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,24 @@ def Dedup : Pass<"arc-dedup", "mlir::ModuleOp"> {
];
}

def DummyAnalysisTester : Pass<"arc-dummy-analysis-tester", "mlir::ModuleOp"> {
let summary = "A dymmy pass to test analysis passes";
let constructor = "circt::arc::createDummyAnalysisTesterPass()";
let dependentDialects = ["arc::ArcDialect"];
let statistics = [
Statistic<"moduleCost", "Operation(s)",
"Number of operations in the module">,
Statistic<"packingCost", "Pack operations(s)",
"Number of scalar to vector packking in the module">,
Statistic<"shufflingCost", "Shuffle operation(s)",
"Number of shuffles done to set up the VectorizeOps">,
Statistic<"vectoroizeOpsBodyCost", "VectorizeOps Body Cost",
"Number of operations inside the body of the VectorizeOps">,
Statistic<"allVectorizeOpsCost", "All VectorizeOps Cost",
"Total Cost of all VectorizeOps in the module">
];
}

def FindInitialVectors : Pass<"arc-find-initial-vectors", "mlir::ModuleOp"> {
let summary = "Find initial groups of vectorizable ops";
let constructor = "circt::arc::createFindInitialVectorsPass()";
Expand Down
1 change: 1 addition & 0 deletions lib/Dialect/Arc/Transforms/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ add_circt_dialect_library(CIRCTArcTransforms
AllocateState.cpp
ArcCanonicalizer.cpp
Dedup.cpp
DummyAnalysisTester.cpp
FindInitialVectors.cpp
GroupResetsAndEnables.cpp
InferMemories.cpp
Expand Down
73 changes: 73 additions & 0 deletions lib/Dialect/Arc/Transforms/DummyAnalysisTester.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
//===- DummyAnalysisTester.cpp --------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This is a dummy pass to test the analysis passes it doesn't do any thing. It
// just walks over the ops to compute some statistics, you can add any
// statistics you need to compute.
//
//===----------------------------------------------------------------------===//

#include "circt/Dialect/Arc/ArcCostModel.h"
#include "circt/Dialect/Arc/ArcPasses.h"
#include "circt/Dialect/HW/HWOps.h"
#include "mlir/IR/MLIRContext.h"
#include "mlir/Pass/Pass.h"

#define DEBUG_TYPE "arc-dummy-analysis-tester"

namespace circt {
namespace arc {
#define GEN_PASS_DEF_DUMMYANALYSISTESTER
#include "circt/Dialect/Arc/ArcPasses.h.inc"
} // namespace arc
} // namespace circt

using namespace circt;
using namespace arc;

namespace {
struct DummyAnalysisTesterPass
: public arc::impl::DummyAnalysisTesterBase<DummyAnalysisTesterPass> {
void runOnOperation() override;

// You can add any statistics you need to compute here.
struct StatisticVars {
size_t moduleCost{0};
size_t packingCost{0};
size_t shufflingCost{0};
size_t vectoroizeOpsBodyCost{0};
size_t allVectorizeOpsCost{0};
};

StatisticVars statVars;
};
} // namespace


void DummyAnalysisTesterPass::runOnOperation() {
for (auto moduleOp : getOperation().getOps<hw::HWModuleOp>()) {
ArcCostModel arcCostModel;
moduleOp.walk([&](Operation *op) {
statVars.moduleCost += arcCostModel.getCost(op);
});
statVars.packingCost += arcCostModel.getPackingCost();
statVars.shufflingCost += arcCostModel.getShufflingCost();
statVars.vectoroizeOpsBodyCost += arcCostModel.getVectorizeOpsBodyCost();
statVars.allVectorizeOpsCost += arcCostModel.getAllVectorizeOpsCost();
}

moduleCost = statVars.moduleCost;
packingCost = statVars.packingCost;
shufflingCost = statVars.shufflingCost;
vectoroizeOpsBodyCost = statVars.vectoroizeOpsBodyCost;
allVectorizeOpsCost = statVars.allVectorizeOpsCost;
}

std::unique_ptr<Pass> arc::createDummyAnalysisTesterPass() {
return std::make_unique<DummyAnalysisTesterPass>();
}

0 comments on commit 08fead7

Please sign in to comment.