[Arc] Make pass constructors accept options struct; NFC

Instead of passing pass options as separate constructor function
arguments, use the `*Options` struct produced by TableGen.
This commit is contained in:
Fabian Schuiki 2023-11-30 10:23:26 -08:00
parent c9d03095d0
commit 6281f978e7
4 changed files with 23 additions and 31 deletions

View File

@ -26,15 +26,13 @@ namespace arc {
#include "circt/Dialect/Arc/ArcPasses.h.inc"
std::unique_ptr<mlir::Pass>
createAddTapsPass(std::optional<bool> tapPorts = {},
std::optional<bool> tapWires = {},
std::optional<bool> tapNamedValues = {});
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> createGroupResetsAndEnablesPass();
std::unique_ptr<mlir::Pass>
createInferMemoriesPass(std::optional<bool> tapPorts = {});
createInferMemoriesPass(const InferMemoriesOptions &options = {});
std::unique_ptr<mlir::Pass> createInferStatePropertiesPass();
std::unique_ptr<mlir::Pass> createInlineArcsPass();
std::unique_ptr<mlir::Pass> createInlineModulesPass();

View File

@ -25,6 +25,8 @@ using namespace hw;
namespace {
struct AddTapsPass : public arc::impl::AddTapsBase<AddTapsPass> {
using AddTapsBase::AddTapsBase;
void runOnOperation() override {
getOperation().walk([&](Operation *op) {
TypeSwitch<Operation *>(op)
@ -95,23 +97,9 @@ struct AddTapsPass : public arc::impl::AddTapsBase<AddTapsPass> {
value = builder.createOrFold<seq::FromClockOp>(loc, value);
builder.create<arc::TapOp>(loc, value, name);
}
using AddTapsBase::tapNamedValues;
using AddTapsBase::tapPorts;
using AddTapsBase::tapWires;
};
} // namespace
std::unique_ptr<Pass>
arc::createAddTapsPass(std::optional<bool> tapPorts,
std::optional<bool> tapWires,
std::optional<bool> tapNamedValues) {
auto pass = std::make_unique<AddTapsPass>();
if (tapPorts)
pass->tapPorts = *tapPorts;
if (tapWires)
pass->tapWires = *tapWires;
if (tapNamedValues)
pass->tapNamedValues = *tapNamedValues;
return pass;
std::unique_ptr<Pass> arc::createAddTapsPass(const AddTapsOptions &options) {
return std::make_unique<AddTapsPass>(options);
}

View File

@ -32,13 +32,13 @@ using namespace arc;
namespace {
struct InferMemoriesPass
: public arc::impl::InferMemoriesBase<InferMemoriesPass> {
using InferMemoriesBase::InferMemoriesBase;
void runOnOperation() override;
SmallVector<Operation *> opsToDelete;
SmallPtrSet<StringAttr, 2> schemaNames;
DenseMap<StringAttr, DictionaryAttr> memoryParams;
using InferMemoriesBase::tapPorts;
};
} // namespace
@ -329,9 +329,6 @@ void InferMemoriesPass::runOnOperation() {
}
std::unique_ptr<Pass>
arc::createInferMemoriesPass(std::optional<bool> tapPorts) {
auto pass = std::make_unique<InferMemoriesPass>();
if (tapPorts)
pass->tapPorts = *tapPorts;
return pass;
arc::createInferMemoriesPass(const InferMemoriesOptions &options) {
return std::make_unique<InferMemoriesPass>(options);
}

View File

@ -181,7 +181,7 @@ static void populatePipeline(PassManager &pm) {
if (verbosePassExecutions)
pm.addInstrumentation(
std::make_unique<VerbosePassInstrumentation<mlir::ModuleOp>>(
"fiarcilatorrtool"));
"arcilator"));
// Pre-process the input such that it no longer contains any SV dialect ops
// and external modules that are relevant to the arc transformation are
@ -189,10 +189,19 @@ static void populatePipeline(PassManager &pm) {
if (untilReached(UntilPreprocessing))
return;
pm.addPass(createLowerFirMemPass());
pm.addPass(
arc::createAddTapsPass(observePorts, observeWires, observeNamedValues));
{
arc::AddTapsOptions opts;
opts.tapPorts = observePorts;
opts.tapWires = observeWires;
opts.tapNamedValues = observeNamedValues;
pm.addPass(arc::createAddTapsPass(opts));
}
pm.addPass(arc::createStripSVPass());
pm.addPass(arc::createInferMemoriesPass(observePorts));
{
arc::InferMemoriesOptions opts;
opts.tapPorts = observePorts;
pm.addPass(arc::createInferMemoriesPass(opts));
}
pm.addPass(createCSEPass());
pm.addPass(arc::createArcCanonicalizerPass());