15 #include "mlir/Transforms/DialectConversion.h"
16 #include "llvm/ADT/TypeSwitch.h"
18 using namespace circt;
25 using OpConversionPattern::OpConversionPattern;
28 matchAndRewrite(seq::ShiftRegOp op, OpAdaptor adaptor,
29 ConversionPatternRewriter &rewriter)
const final {
30 Value in = adaptor.getInput();
31 auto baseName = op.getName();
32 for (
size_t i = 0; i < op.getNumElements(); ++i) {
34 if (baseName.has_value())
35 name = rewriter.getStringAttr(baseName.value() +
"_sh" + Twine(i + 1));
37 op.getLoc(), in, adaptor.getClk(), adaptor.getClockEnable(),
38 adaptor.getReset(), adaptor.getResetValue(), name,
39 op.getPowerOnValue());
42 op.replaceAllUsesWith(in);
48 #define GEN_PASS_DEF_LOWERSEQSHIFTREG
49 #include "circt/Dialect/Seq/SeqPasses.h.inc"
51 struct LowerSeqShiftRegPass
52 :
public impl::LowerSeqShiftRegBase<LowerSeqShiftRegPass> {
53 void runOnOperation()
override;
58 void LowerSeqShiftRegPass::runOnOperation() {
59 MLIRContext &
ctxt = getContext();
60 ConversionTarget target(
ctxt);
62 target.addIllegalOp<seq::ShiftRegOp>();
63 target.addLegalDialect<seq::SeqDialect>();
68 applyPartialConversion(getOperation(), target, std::move(
patterns))))
73 return std::make_unique<LowerSeqShiftRegPass>();
std::unique_ptr< mlir::Pass > createLowerSeqShiftRegPass()
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.