mirror of https://github.com/llvm/circt.git
[FIRRTL][LowerIntrinsics] Add stat and preserve if no changes. (#6911)
This commit is contained in:
parent
c18a7c4646
commit
54ace0c344
|
@ -236,8 +236,8 @@ public:
|
||||||
(addConverter<T>(args), ...);
|
(addConverter<T>(args), ...);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Lowers all intrinsics in a module.
|
/// Lowers all intrinsics in a module. Returns number converted or failure.
|
||||||
LogicalResult lower(FModuleOp mod, bool allowUnknownIntrinsics = false);
|
FailureOr<size_t> lower(FModuleOp mod, bool allowUnknownIntrinsics = false);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
|
@ -711,6 +711,9 @@ def LowerIntrinsics : Pass<"firrtl-lower-intrinsics", "firrtl::FModuleOp"> {
|
||||||
This pass lowers generic intrinsic ops to their implementation or op.
|
This pass lowers generic intrinsic ops to their implementation or op.
|
||||||
}];
|
}];
|
||||||
let constructor = "circt::firrtl::createLowerIntrinsicsPass()";
|
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"> {
|
def LowerOpenAggs : Pass<"firrtl-lower-open-aggs", "firrtl::CircuitOp"> {
|
||||||
|
|
|
@ -96,8 +96,10 @@ public:
|
||||||
|
|
||||||
IntrinsicOpConversion(MLIRContext *context,
|
IntrinsicOpConversion(MLIRContext *context,
|
||||||
const ConversionMapTy &conversions,
|
const ConversionMapTy &conversions,
|
||||||
|
size_t &numConversions,
|
||||||
bool allowUnknownIntrinsics = false)
|
bool allowUnknownIntrinsics = false)
|
||||||
: OpConversionPattern(context), conversions(conversions),
|
: OpConversionPattern(context), conversions(conversions),
|
||||||
|
numConversions(numConversions),
|
||||||
allowUnknownIntrinsics(allowUnknownIntrinsics) {}
|
allowUnknownIntrinsics(allowUnknownIntrinsics) {}
|
||||||
|
|
||||||
LogicalResult
|
LogicalResult
|
||||||
|
@ -115,11 +117,13 @@ public:
|
||||||
if (conv.check(GenericIntrinsic(op)))
|
if (conv.check(GenericIntrinsic(op)))
|
||||||
return failure();
|
return failure();
|
||||||
conv.convert(GenericIntrinsic(op), adaptor, rewriter);
|
conv.convert(GenericIntrinsic(op), adaptor, rewriter);
|
||||||
|
++numConversions;
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const ConversionMapTy &conversions;
|
const ConversionMapTy &conversions;
|
||||||
|
size_t &numConversions;
|
||||||
const bool allowUnknownIntrinsics;
|
const bool allowUnknownIntrinsics;
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
|
@ -128,8 +132,8 @@ private:
|
||||||
// IntrinsicLowerings
|
// IntrinsicLowerings
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
LogicalResult IntrinsicLowerings::lower(FModuleOp mod,
|
FailureOr<size_t> IntrinsicLowerings::lower(FModuleOp mod,
|
||||||
bool allowUnknownIntrinsics) {
|
bool allowUnknownIntrinsics) {
|
||||||
|
|
||||||
ConversionTarget target(*context);
|
ConversionTarget target(*context);
|
||||||
|
|
||||||
|
@ -143,10 +147,14 @@ LogicalResult IntrinsicLowerings::lower(FModuleOp mod,
|
||||||
target.addIllegalOp<GenericIntrinsicOp>();
|
target.addIllegalOp<GenericIntrinsicOp>();
|
||||||
|
|
||||||
RewritePatternSet patterns(context);
|
RewritePatternSet patterns(context);
|
||||||
patterns.add<IntrinsicOpConversion>(context, conversions,
|
size_t count = 0;
|
||||||
|
patterns.add<IntrinsicOpConversion>(context, conversions, count,
|
||||||
allowUnknownIntrinsics);
|
allowUnknownIntrinsics);
|
||||||
|
|
||||||
return mlir::applyPartialConversion(mod, target, std::move(patterns));
|
if (failed(mlir::applyPartialConversion(mod, target, std::move(patterns))))
|
||||||
|
return failure();
|
||||||
|
|
||||||
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
|
@ -43,8 +43,14 @@ LogicalResult LowerIntrinsicsPass::initialize(MLIRContext *context) {
|
||||||
|
|
||||||
// This is the main entrypoint for the lowering pass.
|
// This is the main entrypoint for the lowering pass.
|
||||||
void LowerIntrinsicsPass::runOnOperation() {
|
void LowerIntrinsicsPass::runOnOperation() {
|
||||||
if (failed(lowering->lower(getOperation())))
|
auto result = lowering->lower(getOperation());
|
||||||
|
if (failed(result))
|
||||||
return signalPassFailure();
|
return signalPassFailure();
|
||||||
|
|
||||||
|
numConverted += *result;
|
||||||
|
|
||||||
|
if (*result == 0)
|
||||||
|
markAllAnalysesPreserved();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This is the pass constructor.
|
/// This is the pass constructor.
|
||||||
|
|
Loading…
Reference in New Issue