17 #include "mlir/Transforms/GreedyPatternRewriteDriver.h"
24 using namespace circt;
29 struct AddOperatorLibraryPass
30 :
public IbisAddOperatorLibraryBase<AddOperatorLibraryPass> {
31 void runOnOperation()
override;
36 template <
typename TOp>
37 void addOperator(ImplicitLocOpBuilder &b,
int latency) {
38 b.create<ssp::OperatorTypeOp>(
39 b.getStringAttr(TOp::getOperationName()),
40 b.getArrayAttr({b.getAttr<ssp::LatencyAttr>(latency)}));
45 void AddOperatorLibraryPass::runOnOperation() {
46 auto b = ImplicitLocOpBuilder::atBlockBegin(getOperation().getLoc(),
47 getOperation().getBody());
48 auto opLib = b.create<ssp::OperatorLibraryOp>();
50 b.setInsertionPointToStart(opLib.getBodyBlock());
55 addOperator<comb::AddOp>(b, 1);
56 addOperator<comb::SubOp>(b, 1);
57 addOperator<comb::MulOp>(b, 2);
58 addOperator<comb::ModSOp>(b, 2);
59 addOperator<comb::ModUOp>(b, 2);
62 addOperator<comb::AndOp>(b, 0);
63 addOperator<comb::OrOp>(b, 0);
64 addOperator<comb::XorOp>(b, 0);
67 addOperator<comb::ICmpOp>(b, 1);
70 addOperator<comb::ShlOp>(b, 0);
71 addOperator<comb::ShrUOp>(b, 0);
72 addOperator<comb::ShrSOp>(b, 1);
76 return std::make_unique<AddOperatorLibraryPass>();
static constexpr const char * kIbisOperatorLibName
std::unique_ptr< mlir::Pass > createAddOperatorLibraryPass()
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.