[FIRRTL][LowerIntmodules] Add stats, preserve if nothing changed. (#6910)

This commit is contained in:
Will Dietz 2024-04-10 10:06:58 -05:00 committed by GitHub
parent 3d890feb2c
commit b649dd6d79
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 0 deletions

View File

@ -695,6 +695,10 @@ def LowerIntmodules : Pass<"firrtl-lower-intmodules", "firrtl::CircuitOp"> {
Option<"fixupEICGWrapper", "fixup-eicg-wrapper", "bool", "false",
"Lower `EICG_wrapper` modules into clock gate intrinsics">,
];
let statistics = [
Statistic<"numInstances", "num-instances", "Number of intmodules instances lowered">,
Statistic<"numIntmodules", "num-intmodules", "Number of intmodules lowered">,
];
}
def LowerIntrinsics : Pass<"firrtl-lower-intrinsics", "firrtl::FModuleOp"> {

View File

@ -50,10 +50,13 @@ static LogicalResult checkInstForAnnotations(FInstanceLike inst,
void LowerIntmodulesPass::runOnOperation() {
auto &ig = getAnalysis<InstanceGraph>();
bool changed = false;
// Convert to int ops.
for (auto op :
llvm::make_early_inc_range(getOperation().getOps<FIntModuleOp>())) {
auto *node = ig.lookup(op);
changed = true;
if (failed(checkModForAnnotations(op, op.getIntrinsic())))
return signalPassFailure();
@ -125,10 +128,12 @@ void LowerIntmodulesPass::runOnOperation() {
// Remove instance from IR and instance graph.
use->erase();
inst.erase();
++numInstances;
}
// Remove intmodule from IR and instance graph.
ig.erase(node);
op.erase();
++numIntmodules;
}
// Special handling for magic EICG wrapper extmodule. Deprecate and remove.
@ -142,6 +147,7 @@ void LowerIntmodulesPass::runOnOperation() {
return signalPassFailure();
auto *node = ig.lookup(op);
changed = true;
for (auto *use : llvm::make_early_inc_range(node->uses())) {
auto inst = use->getInstance<InstanceOp>();
if (failed(checkInstForAnnotations(inst, eicgName)))
@ -173,6 +179,9 @@ void LowerIntmodulesPass::runOnOperation() {
}
markAnalysesPreserved<InstanceGraph>();
if (!changed)
markAllAnalysesPreserved();
}
/// This is the pass constructor.