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"
41 static constexpr unsigned kMaxInputs = 16;
42 SmallVector<DelayType, kMaxInputs> cachedDelays;
44 DummyPattern(mlir::MLIRContext *ctx)
48 const Cut &cut)
const override {
51 1.0, ArrayRef<DelayType>(cachedDelays).take_front(cut.
getInputSize()));
54 FailureOr<Operation *>
rewrite(mlir::OpBuilder &builder,
56 const Cut &cut)
const override {
63struct TestPriorityCutsPass
64 :
public impl::TestPriorityCutsBase<TestPriorityCutsPass> {
65 using TestPriorityCutsBase<TestPriorityCutsPass>::TestPriorityCutsBase;
67 void runOnOperation()
override {
68 auto hwModule = getOperation();
70 LLVM_DEBUG(llvm::dbgs() <<
"Running TestPriorityCuts on module: "
71 << hwModule.getName() <<
"\n");
81 SmallVector<std::unique_ptr<CutRewritePattern>, 4>
patterns;
82 patterns.push_back(std::make_unique<DummyPattern>(hwModule->getContext()));
86 llvm::outs() <<
"Enumerating cuts for module: " << hwModule.getModuleName()
89 if (failed(rewriter.
run(hwModule))) {
assert(baseType &&"element must be base type")
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.
unsigned getInputSize() const
Get the number of inputs to this cut.
@ 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 FailureOr< Operation * > rewrite(mlir::OpBuilder &builder, CutEnumerator &enumerator, const Cut &cut) const =0
Return a new operation that replaces the matched cut.
virtual std::optional< MatchResult > match(CutEnumerator &enumerator, const Cut &cut) const =0
Check if a cut matches this pattern and compute area/delay metrics.
virtual unsigned getNumOutputs() const =0
Get the number of outputs this pattern produces.
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.
Result of matching a cut against a pattern.