19 #include "mlir/Transforms/Passes.h"
20 #include "llvm/Support/FileSystem.h"
21 #include "llvm/Support/Path.h"
24 using namespace circt;
43 StringRef inputFilename) {
48 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
52 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
53 mlir::createCSEPass());
55 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
60 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
66 pm.nest<firrtl::CircuitOp>().addPass(
88 "option -dedup is deprecated since firtool 1.57.0, has no "
89 "effect (deduplication is always enabled), and will be removed "
104 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
112 auto &modulePM = pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>();
125 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
132 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
138 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
167 pm.addNestedPass<firrtl::CircuitOp>(
172 ? llvm::sys::path::parent_path(inputFilename)
174 pm.nest<firrtl::CircuitOp>().addPass(
179 pm.addNestedPass<firrtl::CircuitOp>(mlir::createSymbolDCEPass());
188 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
190 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
196 pm.nest<firrtl::CircuitOp>().addPass(
200 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
205 pm.nest<firrtl::CircuitOp>().nest<firrtl::FModuleOp>().addPass(
235 auto &modulePM = pm.nest<hw::HWModuleOp>();
236 modulePM.addPass(mlir::createCSEPass());
256 FirtoolOptions::RandomKind::Reg),
268 auto &modulePM = pm.nest<hw::HWModuleOp>();
269 modulePM.addPass(mlir::createCSEPass());
271 modulePM.addPass(mlir::createCSEPass());
296 if (
auto fileLoc = loc.dyn_cast<FileLineColLoc>())
297 return fileLoc.getFilename().getValue().endswith(
".fir");
303 [](mlir::Location loc) {
return true; }));
318 llvm::raw_ostream &os) {
328 llvm::StringRef directory) {
static std::unique_ptr< Pass > createSimpleCanonicalizerPass()
std::unique_ptr< mlir::Pass > createDedupPass()
Direction get(bool isOutput)
Returns an output direction if isOutput is true, otherwise returns an input direction.
@ All
Preserve all aggregate values.
std::unique_ptr< mlir::Pass > createInferReadWritePass()
std::unique_ptr< mlir::Pass > createCheckCombLoopsPass()
std::unique_ptr< mlir::Pass > createFinalizeIRPass()
std::unique_ptr< mlir::Pass > createLowerFIRRTLTypesPass(PreserveAggregate::PreserveMode mode=PreserveAggregate::None, PreserveAggregate::PreserveMode memoryMode=PreserveAggregate::None)
This is the pass constructor.
std::unique_ptr< mlir::Pass > createResolveTracesPass(mlir::StringRef outputAnnotationFilename="")
std::unique_ptr< mlir::Pass > createEmitOMIRPass(mlir::StringRef outputFilename="")
std::unique_ptr< mlir::Pass > createResolvePathsPass()
std::unique_ptr< mlir::Pass > createVBToBVPass()
std::unique_ptr< mlir::Pass > createIMConstPropPass()
std::unique_ptr< mlir::Pass > createBlackBoxReaderPass(std::optional< mlir::StringRef > inputPrefix={})
std::unique_ptr< mlir::Pass > createCreateSiFiveMetadataPass(bool replSeqMem=false, mlir::StringRef replSeqMemFile="")
std::unique_ptr< mlir::Pass > createInlinerPass()
std::unique_ptr< mlir::Pass > createVectorizationPass()
std::unique_ptr< mlir::Pass > createLowerMemoryPass()
std::unique_ptr< mlir::Pass > createDropNamesPass(PreserveValues::PreserveMode mode=PreserveValues::None)
std::unique_ptr< mlir::Pass > createIMDeadCodeElimPass()
std::unique_ptr< mlir::Pass > createExtractInstancesPass()
std::unique_ptr< mlir::Pass > createHoistPassthroughPass(bool hoistHWDrivers=true)
This is the pass constructor.
std::unique_ptr< mlir::Pass > createLowerCHIRRTLPass()
std::unique_ptr< mlir::Pass > createInnerSymbolDCEPass()
std::unique_ptr< mlir::Pass > createExpandWhensPass()
std::unique_ptr< mlir::Pass > createLowerXMRPass()
std::unique_ptr< mlir::Pass > createLowerIntrinsicsPass()
This is the pass constructor.
std::unique_ptr< mlir::Pass > createInferWidthsPass()
std::unique_ptr< mlir::Pass > createMemToRegOfVecPass(bool replSeqMem=false, bool ignoreReadEnable=false)
std::unique_ptr< mlir::Pass > createLowerOpenAggsPass()
This is the pass constructor.
std::unique_ptr< mlir::Pass > createLowerGroupsPass()
std::unique_ptr< mlir::Pass > createGrandCentralPass(bool instantiateCompanionOnly=false)
std::unique_ptr< mlir::Pass > createDropConstPass()
std::unique_ptr< mlir::Pass > createSFCCompatPass()
std::unique_ptr< mlir::Pass > createWireDFTPass()
std::unique_ptr< mlir::Pass > createPrefixModulesPass()
std::unique_ptr< mlir::Pass > createInjectDUTHierarchyPass()
std::unique_ptr< mlir::Pass > createRandomizeRegisterInitPass()
std::unique_ptr< mlir::Pass > createLowerClassesPass()
std::unique_ptr< mlir::Pass > createAddSeqMemPortsPass()
std::unique_ptr< mlir::Pass > createLowerFIRRTLAnnotationsPass(bool ignoreUnhandledAnnotations=false, bool ignoreClasslessAnnotations=false, bool noRefTypePorts=false)
This is the pass constructor.
std::unique_ptr< mlir::Pass > createRegisterOptimizerPass()
std::unique_ptr< mlir::Pass > createLowerMatchesPass()
std::unique_ptr< mlir::Pass > createMergeConnectionsPass(bool enableAggressiveMerging=false)
std::unique_ptr< mlir::Pass > createInferResetsPass()
std::unique_ptr< mlir::Pass > createFlattenMemoryPass()
std::unique_ptr< mlir::Pass > createVerifyInnerRefNamespacePass()
std::unique_ptr< mlir::Pass > createFreezePathsPass()
std::unique_ptr< mlir::Pass > createExternalizeClockGatePass(const ExternalizeClockGateOptions &options={})
std::unique_ptr< mlir::Pass > createSVExtractTestCodePass(bool disableInstanceExtraction=false, bool disableRegisterExtraction=false, bool disableModuleInlining=false)
std::unique_ptr< mlir::Pass > createHWLegalizeModulesPass()
std::unique_ptr< mlir::Pass > createHWExportModuleHierarchyPass(std::optional< std::string > directory={})
std::unique_ptr< mlir::Pass > createHWMemSimImplPass(bool replSeqMem=false, bool ignoreReadEnable=false, bool addMuxPragmas=false, bool disableMemRandomization=false, bool disableRegRandomization=false, bool addVivadoRAMAddressConflictSynthesisBugWorkaround=false)
std::unique_ptr< mlir::Pass > createPrettifyVerilogPass()
std::unique_ptr< mlir::Pass > createHWCleanupPass(bool mergeAlwaysBlocks=true)
This file defines an intermediate representation for circuits acting as an abstraction for constraint...
std::unique_ptr< mlir::Pass > createExportSplitChiselInterfacePass(mlir::StringRef outputDirectory="./")
std::unique_ptr< mlir::Pass > createExportChiselInterfacePass(llvm::raw_ostream &os)
std::unique_ptr< mlir::Pass > createExportSplitVerilogPass(llvm::StringRef directory="./")
std::unique_ptr< OperationPass< hw::HWModuleOp > > createLowerVerifToSVPass()
Create the Verif to SV conversion pass.
std::unique_ptr< mlir::Pass > createLowerSeqToSVPass(const LowerSeqToSVOptions &options={})
std::unique_ptr< mlir::Pass > createExportVerilogPass(llvm::raw_ostream &os)
std::unique_ptr< mlir::Pass > createStripDebugInfoWithPredPass(const std::function< bool(mlir::Location)> &pred)
Creates a pass to strip debug information from a function.
std::unique_ptr< mlir::Pass > createLowerFIRRTLToHWPass(bool enableAnnotationWarning=false, bool emitChiselAssertsAsSVA=false, bool disableMemRandomization=false, bool disableRegRandomization=false)
This is the pass constructor.
LogicalResult populatePrepareForExportVerilog(mlir::PassManager &pm, const firtool::FirtoolOptions &opt)