[FIRRTL][LowerIntrinsics] Add stat and preserve if no changes. (#6911)

This commit is contained in:
Will Dietz 2024-05-08 17:05:00 -05:00 committed by GitHub
parent c18a7c4646
commit 54ace0c344
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 24 additions and 7 deletions

View File

@ -236,8 +236,8 @@ public:
(addConverter<T>(args), ...);
}
/// Lowers all intrinsics in a module.
LogicalResult lower(FModuleOp mod, bool allowUnknownIntrinsics = false);
/// Lowers all intrinsics in a module. Returns number converted or failure.
FailureOr<size_t> lower(FModuleOp mod, bool allowUnknownIntrinsics = false);
private:
template <typename T>

View File

@ -711,6 +711,9 @@ def LowerIntrinsics : Pass<"firrtl-lower-intrinsics", "firrtl::FModuleOp"> {
This pass lowers generic intrinsic ops to their implementation or op.
}];
let constructor = "circt::firrtl::createLowerIntrinsicsPass()";
let statistics = [
Statistic<"numConverted", "num-converted", "Number of intrinsic operations lowered">,
];
}
def LowerOpenAggs : Pass<"firrtl-lower-open-aggs", "firrtl::CircuitOp"> {

View File

@ -96,8 +96,10 @@ public:
IntrinsicOpConversion(MLIRContext *context,
const ConversionMapTy &conversions,
size_t &numConversions,
bool allowUnknownIntrinsics = false)
: OpConversionPattern(context), conversions(conversions),
numConversions(numConversions),
allowUnknownIntrinsics(allowUnknownIntrinsics) {}
LogicalResult
@ -115,11 +117,13 @@ public:
if (conv.check(GenericIntrinsic(op)))
return failure();
conv.convert(GenericIntrinsic(op), adaptor, rewriter);
++numConversions;
return success();
}
private:
const ConversionMapTy &conversions;
size_t &numConversions;
const bool allowUnknownIntrinsics;
};
} // namespace
@ -128,7 +132,7 @@ private:
// IntrinsicLowerings
//===----------------------------------------------------------------------===//
LogicalResult IntrinsicLowerings::lower(FModuleOp mod,
FailureOr<size_t> IntrinsicLowerings::lower(FModuleOp mod,
bool allowUnknownIntrinsics) {
ConversionTarget target(*context);
@ -143,10 +147,14 @@ LogicalResult IntrinsicLowerings::lower(FModuleOp mod,
target.addIllegalOp<GenericIntrinsicOp>();
RewritePatternSet patterns(context);
patterns.add<IntrinsicOpConversion>(context, conversions,
size_t count = 0;
patterns.add<IntrinsicOpConversion>(context, conversions, count,
allowUnknownIntrinsics);
return mlir::applyPartialConversion(mod, target, std::move(patterns));
if (failed(mlir::applyPartialConversion(mod, target, std::move(patterns))))
return failure();
return count;
}
//===----------------------------------------------------------------------===//

View File

@ -43,8 +43,14 @@ LogicalResult LowerIntrinsicsPass::initialize(MLIRContext *context) {
// This is the main entrypoint for the lowering pass.
void LowerIntrinsicsPass::runOnOperation() {
if (failed(lowering->lower(getOperation())))
auto result = lowering->lower(getOperation());
if (failed(result))
return signalPassFailure();
numConverted += *result;
if (*result == 0)
markAllAnalysesPreserved();
}
/// This is the pass constructor.