16#include "llvm/ADT/STLExtras.h"
17#include "llvm/Support/Debug.h"
18#include "llvm/Support/raw_ostream.h"
23#define GEN_PASS_DEF_TESTPRIORITYCUTS
24#include "circt/Dialect/Synth/Transforms/SynthPasses.h.inc"
31#define DEBUG_TYPE "synth-test-priority-cuts"
42 bool match(
const Cut &cut)
const override {
return true; }
43 FailureOr<Operation *>
rewrite(mlir::OpBuilder &builder,
44 Cut &cut)
const override {
50 double getArea()
const override {
return 1; }
56struct TestPriorityCutsPass
57 :
public impl::TestPriorityCutsBase<TestPriorityCutsPass> {
58 using TestPriorityCutsBase<TestPriorityCutsPass>::TestPriorityCutsBase;
60 void runOnOperation()
override {
61 auto hwModule = getOperation();
63 LLVM_DEBUG(llvm::dbgs() <<
"Running TestPriorityCuts on module: "
64 << hwModule.getName() <<
"\n");
74 SmallVector<std::unique_ptr<CutRewritePattern>, 4>
patterns;
75 patterns.push_back(std::make_unique<DummyPattern>(hwModule->getContext()));
79 llvm::outs() <<
"Enumerating cuts for module: " << hwModule.getModuleName()
82 if (failed(rewriter.
run(hwModule))) {
Cut enumeration engine for combinational logic networks.
Manages a collection of rewriting patterns for combinational logic optimization.
Main cut-based rewriting algorithm for combinational logic optimization.
LogicalResult run(Operation *topOp)
Execute the complete cut-based rewriting algorithm.
Represents a cut in the combinational logic network.
@ OptimizationStrategyTiming
Optimize for minimal critical path delay.
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
Base class for cut rewriting patterns used in combinational logic optimization.
virtual DelayType getDelay(unsigned inputIndex, unsigned outputIndex) const =0
Get the delay between specific input and output.
virtual FailureOr< Operation * > rewrite(mlir::OpBuilder &builder, Cut &cut) const =0
Return a new operation that replaces the matched cut.
virtual double getArea() const =0
Get the area cost of this pattern.
virtual unsigned getNumOutputs() const =0
Get the number of outputs this pattern produces.
virtual bool match(const Cut &cut) const =0
Check if a cut matches this pattern.
Configuration options for the cut-based rewriting algorithm.
unsigned maxCutInputSize
Maximum number of inputs allowed for any cut.
unsigned maxCutSizePerRoot
Maximum number of cuts to maintain per logic node.
OptimizationStrategy strategy
Optimization strategy (area vs. timing).
bool testPriorityCuts
Run priority cuts enumeration and dump the cut sets.