@@ -49,9 +49,9 @@ LogicalResult firtool::populatePreprocessTransforms(mlir::PassManager &pm,
4949 pm.nest <firrtl::CircuitOp>().nest <firrtl::FModuleOp>().addPass (
5050 firrtl::createLowerIntrinsics ());
5151
52- if (opt.shouldInferDomains ())
53- pm.nest <firrtl::CircuitOp>().addPass (firrtl::createInferDomains ());
54-
52+ if (auto mode = toInferDomainsPassMode ( opt.getDomainMode ())) {
53+ pm.nest <firrtl::CircuitOp>().addPass (firrtl::createInferDomains ({*mode} ));
54+ }
5555 return success ();
5656}
5757
@@ -761,10 +761,19 @@ struct FirtoolCmdOptions {
761761 llvm::cl::desc (" Emit bindfiles for private modules" ),
762762 llvm::cl::init (false )};
763763
764- llvm::cl::opt<bool > inferDomains{
765- " infer-domains" ,
766- llvm::cl::desc (" Enable domain inference and checking" ),
767- llvm::cl::init (false )};
764+ llvm::cl::opt<firtool::DomainMode> domainMode{
765+ " domain-mode" , llvm::cl::desc (" Enable domain inference and checking" ),
766+ llvm::cl::init (firtool::DomainMode::Disable),
767+ llvm::cl::values (
768+ clEnumValN (firtool::DomainMode::Disable, " disable" ,
769+ " Disable domain checking" ),
770+ clEnumValN (firtool::DomainMode::Infer, " infer" ,
771+ " Check domains with inference for private modules" ),
772+ clEnumValN (firtool::DomainMode::Check, " check" ,
773+ " Check domains without inference" ),
774+ clEnumValN (firtool::DomainMode::InferAll, " infer-all" ,
775+ " Check domains with inference for both public and private "
776+ " modules" ))};
768777
769778 // ===----------------------------------------------------------------------===
770779 // Lint options
@@ -817,7 +826,8 @@ circt::firtool::FirtoolOptions::FirtoolOptions()
817826 disableCSEinClasses(false ), selectDefaultInstanceChoice(false ),
818827 symbolicValueLowering(verif::SymbolicValueLowering::ExtModule),
819828 disableWireElimination(false ), lintStaticAsserts(true ),
820- lintXmrsInDesign(true ), emitAllBindFiles(false ), inferDomains(false ) {
829+ lintXmrsInDesign(true ), emitAllBindFiles(false ),
830+ domainMode(DomainMode::Disable) {
821831 if (!clOptions.isConstructed ())
822832 return ;
823833 outputFilename = clOptions->outputFilename ;
@@ -870,5 +880,5 @@ circt::firtool::FirtoolOptions::FirtoolOptions()
870880 lintStaticAsserts = clOptions->lintStaticAsserts ;
871881 lintXmrsInDesign = clOptions->lintXmrsInDesign ;
872882 emitAllBindFiles = clOptions->emitAllBindFiles ;
873- inferDomains = clOptions->inferDomains ;
883+ domainMode = clOptions->domainMode ;
874884}
0 commit comments