13#include "mlir/Pass/Pass.h"
14#include "mlir/Transforms/DialectConversion.h"
15#include "llvm/ADT/TypeSwitch.h"
19#define GEN_PASS_DEF_LOWERSEQCOMPREGCE
20#include "circt/Dialect/Seq/SeqPasses.h.inc"
31struct CompRegCELowering
34 using OpConversionPattern::OpConversionPattern;
38 ConversionPatternRewriter &rewriter)
const final {
43 comb::MuxOp::create(rewriter, op.getLoc(), adaptor.getClockEnable(),
44 adaptor.getInput(), op.getResult());
48 rewriter, op.getLoc(), mux, adaptor.getClk(), op.getNameAttr(),
49 adaptor.getReset(), adaptor.getResetValue(), adaptor.getInitialValue(),
50 op.getInnerSymAttr());
52 rewriter.replaceOp(op, compreg);
57struct LowerSeqCompRegCEPass
58 :
public circt::seq::impl::LowerSeqCompRegCEBase<LowerSeqCompRegCEPass> {
59 void runOnOperation()
override;
64void LowerSeqCompRegCEPass::runOnOperation() {
65 MLIRContext &ctxt = getContext();
66 ConversionTarget target(ctxt);
70 target.addLegalDialect<seq::SeqDialect, hw::HWDialect, comb::CombDialect>();
72 patterns.add<CompRegCELowering>(&ctxt);
75 applyPartialConversion(getOperation(), target, std::move(
patterns))))
80 return std::make_unique<LowerSeqCompRegCEPass>();
create(cls, result_type, reset=None, reset_value=None, name=None, sym_name=None, **kwargs)
std::unique_ptr< mlir::Pass > createLowerSeqCompRegCEPass()
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.