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());
60 pm.addPass(createCSEPass());
62 pm.addPass(datapath::createDatapathReduceDelay());
63 circt::ConvertDatapathToCombOptions datapathOptions;
65 datapathOptions.lowerCompress =
false;
67 pm.addPass(createConvertDatapathToComb(datapathOptions));
69 datapathOptions.lowerCompress =
true;
72 pm.addPass(createConvertDatapathToComb(datapathOptions));
74 pm.addPass(createCSEPass());
77 circt::ConvertCombToSynthOptions convOptions;
81 convOptions.additionalLegalOps);
82 pm.addPass(circt::createConvertCombToSynth(convOptions));
84 pm.addPass(createCSEPass());
89 pm.addPass(comb::createBalanceMux(balanceOptions));
94 pm.addPass(createLowerVariadicPass<comb::XorOp>(
98 pm.addPass(circt::hw::createHWAggregateToComb());
99 pm.addPass(circt::createConvertCombToSynth());
100 pm.addPass(createCSEPass());
102 pm.addPass(createCSEPass());
111 pm.addPass(synth::createLowerWordToBits());
112 pm.addPass(createCSEPass());
115 pm.addPass(createStructuralHash());
117 pm.addPass(synth::createMaximumAndCover());
119 pm.addPass(createStructuralHash());
123 SOPBalancingOptions sopOptions;
127 sopOptions.maxCutInputSize = 4;
128 sopOptions.maxCutsPerRoot = 4;
129 pm.addPass(synth::createSOPBalancing(sopOptions));
130 pm.addPass(createStructuralHash());
134 FunctionalReductionOptions functionalReductionOptions;
135 functionalReductionOptions.conflictLimit =
137 pm.addPass(createFunctionalReduction(functionalReductionOptions));
141 synth::ABCRunnerOptions abcOptions;
142 abcOptions.abcPath = options.
abcPath;
143 abcOptions.abcCommands.assign(options.
abcCommands.begin(),
146 pm.addPass(synth::createABCRunner(abcOptions));
156 PassPipelineRegistration<CombLoweringPipelineOptions>(
157 "synth-comb-lowering-pipeline",
158 "The default pipeline for until Comb lowering",
160 PassPipelineRegistration<SynthOptimizationPipelineOptions>(
161 "synth-optimization-pipeline",
162 "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