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 datapathOptions.lowerCompress =
false;
66 pm.addPass(createConvertDatapathToComb(datapathOptions));
68 datapathOptions.lowerCompress =
true;
71 pm.addPass(createConvertDatapathToComb(datapathOptions));
73 pm.addPass(createCSEPass());
76 circt::ConvertCombToSynthOptions convOptions;
80 convOptions.additionalLegalOps);
81 pm.addPass(circt::createConvertCombToSynth(convOptions));
83 pm.addPass(createCSEPass());
88 pm.addPass(comb::createBalanceMux(balanceOptions));
93 pm.addPass(createLowerVariadicPass<comb::XorOp>(
97 pm.addPass(circt::hw::createHWAggregateToComb());
98 pm.addPass(circt::createConvertCombToSynth());
99 pm.addPass(createCSEPass());
101 pm.addPass(createCSEPass());
110 pm.addPass(synth::createLowerWordToBits());
111 pm.addPass(createCSEPass());
114 pm.addPass(createStructuralHash());
116 pm.addPass(synth::createMaximumAndCover());
118 pm.addPass(createStructuralHash());
122 SOPBalancingOptions sopOptions;
126 sopOptions.maxCutInputSize = 4;
127 sopOptions.maxCutsPerRoot = 4;
128 pm.addPass(synth::createSOPBalancing(sopOptions));
129 pm.addPass(createStructuralHash());
133 FunctionalReductionOptions functionalReductionOptions;
134 functionalReductionOptions.conflictLimit =
136 pm.addPass(createFunctionalReduction(functionalReductionOptions));
140 synth::ABCRunnerOptions abcOptions;
141 abcOptions.abcPath = options.
abcPath;
142 abcOptions.abcCommands.assign(options.
abcCommands.begin(),
145 pm.addPass(synth::createABCRunner(abcOptions));
155 PassPipelineRegistration<CombLoweringPipelineOptions>(
156 "synth-comb-lowering-pipeline",
157 "The default pipeline for until Comb lowering",
159 PassPipelineRegistration<SynthOptimizationPipelineOptions>(
160 "synth-optimization-pipeline",
161 "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