26#include "mlir/Pass/PassManager.h"
27#include "mlir/Transforms/Passes.h"
28#include "llvm/ADT/SmallVector.h"
39template <
typename... AllowedOpTy>
40static void addOpName(SmallVectorImpl<std::string> &ops) {
41 (ops.push_back(AllowedOpTy::getOperationName().str()), ...);
43template <
typename... OpToLowerTy>
44static std::unique_ptr<Pass>
46 LowerVariadicOptions options;
47 addOpName<OpToLowerTy...>(options.opNames);
48 options.timingAware = timingAware;
49 options.reuseSubsets = reuseSubsets;
50 return createLowerVariadic(options);
57 pm.addPass(createLowerVariadicPass<comb::MulOp>(options.
timingAware));
58 pm.addPass(createConvertCombToDatapath());
61 pm.addPass(datapath::createDatapathReduceDelay());
62 circt::ConvertDatapathToCombOptions datapathOptions;
64 pm.addPass(createConvertDatapathToComb(datapathOptions));
66 pm.addPass(createCSEPass());
69 circt::ConvertCombToSynthOptions convOptions;
73 convOptions.additionalLegalOps);
74 pm.addPass(circt::createConvertCombToSynth(convOptions));
76 pm.addPass(createCSEPass());
81 pm.addPass(comb::createBalanceMux(balanceOptions));
86 pm.addPass(createLowerVariadicPass<comb::XorOp>(
90 pm.addPass(circt::hw::createHWAggregateToComb());
91 pm.addPass(circt::createConvertCombToSynth());
92 pm.addPass(createCSEPass());
94 pm.addPass(createCSEPass());
103 pm.addPass(synth::createLowerWordToBits());
104 pm.addPass(createCSEPass());
107 pm.addPass(createStructuralHash());
109 pm.addPass(synth::createMaximumAndCover());
111 pm.addPass(createStructuralHash());
115 SOPBalancingOptions sopOptions;
119 sopOptions.maxCutInputSize = 4;
120 sopOptions.maxCutsPerRoot = 4;
121 pm.addPass(synth::createSOPBalancing(sopOptions));
122 pm.addPass(createStructuralHash());
126 FunctionalReductionOptions functionalReductionOptions;
127 functionalReductionOptions.conflictLimit =
129 pm.addPass(createFunctionalReduction(functionalReductionOptions));
133 synth::ABCRunnerOptions abcOptions;
134 abcOptions.abcPath = options.
abcPath;
135 abcOptions.abcCommands.assign(options.
abcCommands.begin(),
138 pm.addPass(synth::createABCRunner(abcOptions));
148 PassPipelineRegistration<CombLoweringPipelineOptions>(
149 "synth-comb-lowering-pipeline",
150 "The default pipeline for until Comb lowering",
152 PassPipelineRegistration<SynthOptimizationPipelineOptions>(
153 "synth-optimization-pipeline",
154 "The default pipeline for AIG optimization pipeline",
static std::unique_ptr< Pass > createLowerVariadicPass(bool timingAware, bool reuseSubsets=false)
static void addOpName(SmallVectorImpl< std::string > &ops)
Helper function to populate additional legal ops for partial legalization.
@ OptimizationStrategyArea
Optimize for minimal area.
@ OptimizationStrategyTiming
Optimize for minimal critical path delay.
void buildSynthOptimizationPipeline(mlir::OpPassManager &pm, const SynthOptimizationPipelineOptions &options)
void buildCombLoweringPipeline(mlir::OpPassManager &pm, const CombLoweringPipelineOptions &options)
Populate the synthesis pipelines.
void registerSynthesisPipeline()
Register the synthesis pipelines.
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
bool hasIncrementalSATSolverBackend()
Return true when at least one incremental SAT backend is available.
std::unique_ptr< Pass > createSimpleCanonicalizerPass()
Create a simple canonicalizer pass.
Options for the aig lowering pipeline.
PassOptions::Option< bool > disableDatapath
PassOptions::Option< bool > timingAware
PassOptions::Option< OptimizationStrategy > synthesisStrategy
Options for the synth optimization pipeline.
PassOptions::Option< bool > timingAware
PassOptions::Option< bool > disableWordToBits
PassOptions::ListOption< std::string > abcCommands
PassOptions::Option< std::string > abcPath
PassOptions::Option< bool > disableFunctionalReduction
PassOptions::Option< int64_t > functionalReductionConflictLimit
PassOptions::Option< bool > disableSOPBalancing
PassOptions::Option< bool > ignoreAbcFailures