[HWArithToHW] Expose conversion patterns (#3840)

This commit is contained in:
7FM 2022-09-08 18:45:21 +02:00 committed by GitHub
parent a9f0da9b98
commit 44793691b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 5 deletions

View File

@ -14,6 +14,7 @@
#ifndef CIRCT_CONVERSION_HWARITHTOHW_HWARITHTOHW_H #ifndef CIRCT_CONVERSION_HWARITHTOHW_HWARITHTOHW_H
#define CIRCT_CONVERSION_HWARITHTOHW_HWARITHTOHW_H #define CIRCT_CONVERSION_HWARITHTOHW_HWARITHTOHW_H
#include "circt/Support/LLVM.h"
#include <memory> #include <memory>
namespace mlir { namespace mlir {
@ -21,6 +22,9 @@ class Pass;
} // namespace mlir } // namespace mlir
namespace circt { namespace circt {
/// Get the HWArith to HW conversion patterns.
void populateHWArithToHWConversionPatterns(RewritePatternSet &patterns);
std::unique_ptr<mlir::Pass> createHWArithToHWPass(); std::unique_ptr<mlir::Pass> createHWArithToHWPass();
} // namespace circt } // namespace circt

View File

@ -407,6 +407,14 @@ static void addSignatureConversion(ConversionTarget &target,
// Pass driver // Pass driver
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
void circt::populateHWArithToHWConversionPatterns(RewritePatternSet &patterns) {
patterns.add<ConstantOpLowering, CastOpLowering, ICmpOpLowering,
BinaryOpLowering<AddOp, comb::AddOp>,
BinaryOpLowering<SubOp, comb::SubOp>,
BinaryOpLowering<MulOp, comb::MulOp>, DivOpLowering>(
patterns.getContext());
}
namespace { namespace {
class HWArithToHWPass : public HWArithToHWBase<HWArithToHWPass> { class HWArithToHWPass : public HWArithToHWBase<HWArithToHWPass> {
@ -433,11 +441,7 @@ public:
hw::StructExplodeOp, hw::StructExtractOp, hw::StructInjectOp, hw::StructExplodeOp, hw::StructExtractOp, hw::StructInjectOp,
hw::UnionCreateOp, hw::UnionExtractOp>(target, patterns, typeConverter); hw::UnionCreateOp, hw::UnionExtractOp>(target, patterns, typeConverter);
patterns.add<ConstantOpLowering, CastOpLowering, ICmpOpLowering, populateHWArithToHWConversionPatterns(patterns);
BinaryOpLowering<AddOp, comb::AddOp>,
BinaryOpLowering<SubOp, comb::SubOp>,
BinaryOpLowering<MulOp, comb::MulOp>, DivOpLowering>(
patterns.getContext());
if (failed(applyPartialConversion(module, target, std::move(patterns)))) if (failed(applyPartialConversion(module, target, std::move(patterns))))
return signalPassFailure(); return signalPassFailure();