18 #include "mlir/IR/BuiltinTypes.h"
19 #include "mlir/IR/OperationSupport.h"
20 #include "mlir/Transforms/DialectConversion.h"
21 #include "mlir/Transforms/GreedyPatternRewriteDriver.h"
23 using namespace circt;
24 using namespace calyx;
29 struct GroupInvariantCodeMotionPass
30 :
public GroupInvariantCodeMotionBase<GroupInvariantCodeMotionPass> {
31 void runOnOperation()
override {
32 auto wires = getOperation().getWiresOp();
33 for (
auto groupOp : wires.getOps<GroupOp>()) {
34 for (
auto &op : llvm::make_early_inc_range(groupOp.getOps())) {
35 if (isa<GroupDoneOp, AssignOp, GroupGoOp>(op))
37 op.moveBefore(wires.getBodyBlock(), wires.getBodyBlock()->begin());
46 return std::make_unique<GroupInvariantCodeMotionPass>();
std::unique_ptr< mlir::Pass > createGroupInvariantCodeMotionPass()
This file defines an intermediate representation for circuits acting as an abstraction for constraint...