diff --git a/include/circt/Dialect/HW/HWOps.h b/include/circt/Dialect/HW/HWOps.h index a99f13d24e..1f4a559fe6 100644 --- a/include/circt/Dialect/HW/HWOps.h +++ b/include/circt/Dialect/HW/HWOps.h @@ -52,9 +52,6 @@ void modifyModulePorts(Operation *op, // Helpers for working with modules. -/// Return true if this is an hw.module, external module, generated module etc. -bool isAnyModule(Operation *module); - /// Return true if isAnyModule or instance. bool isAnyModuleOrInstance(Operation *module); diff --git a/include/circt/Dialect/HW/InstanceImplementation.h b/include/circt/Dialect/HW/InstanceImplementation.h index 63105318f9..9aa24d6d3b 100644 --- a/include/circt/Dialect/HW/InstanceImplementation.h +++ b/include/circt/Dialect/HW/InstanceImplementation.h @@ -35,8 +35,7 @@ Operation *getReferencedModule(const HWSymbolCache *cache, Operation *instanceOp, mlir::FlatSymbolRefAttr moduleName); -/// Verify that the instance refers to a valid HW module as determined by the -/// 'hw::isAnyModule' function. +/// Verify that the instance refers to a valid HW module. LogicalResult verifyReferencedModule(Operation *instanceOp, SymbolTableCollection &symbolTable, mlir::FlatSymbolRefAttr moduleName, diff --git a/include/circt/Dialect/SV/SVStatements.td b/include/circt/Dialect/SV/SVStatements.td index 8d237c39f4..c269e1e046 100644 --- a/include/circt/Dialect/SV/SVStatements.td +++ b/include/circt/Dialect/SV/SVStatements.td @@ -13,20 +13,6 @@ include "mlir/IR/EnumAttr.td" include "mlir/IR/OpAsmInterface.td" -/// Ensure symbol is one of the hw module.* types -def isModuleSymbol : AttrConstraint< - CPred< - "hw::isAnyModule(::mlir::SymbolTable::lookupNearestSymbolFrom(" - "&$_op, $_self.cast<::mlir::FlatSymbolRefAttr>().getValue()))" - >, "is module like">; - -/// Ensure symbol is one of the sv macro.* types -def isMacroSymbol : AttrConstraint< - CPred< - "sv::isAnyMacro(::mlir::SymbolTable::lookupNearestSymbolFrom(" - "&$_op, $_self.cast<::mlir::FlatSymbolRefAttr>().getValue()))" - >, "is macro like">; - //===----------------------------------------------------------------------===// // Control flow like-operations //===----------------------------------------------------------------------===// diff --git a/lib/Dialect/HW/HWOps.cpp b/lib/Dialect/HW/HWOps.cpp index e865a68d43..ae24b3e42a 100644 --- a/lib/Dialect/HW/HWOps.cpp +++ b/lib/Dialect/HW/HWOps.cpp @@ -498,14 +498,9 @@ OpFoldResult ParamValueOp::fold(FoldAdaptor adaptor) { // HWModuleOp //===----------------------------------------------------------------------===/ -/// Return true if this is an hw.module, external module, generated module etc. -bool hw::isAnyModule(Operation *module) { - return isa(module); -} - /// Return true if isAnyModule or instance. bool hw::isAnyModuleOrInstance(Operation *moduleOrInstance) { - return isAnyModule(moduleOrInstance) || isa(moduleOrInstance); + return isa(moduleOrInstance); } /// Return the signature for a module as a function type from the module itself @@ -523,8 +518,6 @@ FunctionType hw::getModuleType(Operation *moduleOrInstance) { if (auto mod = dyn_cast(moduleOrInstance)) return mod.getHWModuleType().getFuncType(); - assert(isAnyModule(moduleOrInstance) && - "must be called on instance or module"); return cast(moduleOrInstance) .getFunctionType() .cast(); @@ -1096,7 +1089,7 @@ void HWModuleOp::print(OpAsmPrinter &p) { } static LogicalResult verifyModuleCommon(HWModuleLike module) { - assert(isAnyModule(module) && + assert(isa(module) && "verifier hook should only be called on modules"); auto moduleType = module.getHWModuleType(); diff --git a/lib/Dialect/HW/InstanceImplementation.cpp b/lib/Dialect/HW/InstanceImplementation.cpp index 75ca77b6ae..3927d44058 100644 --- a/lib/Dialect/HW/InstanceImplementation.cpp +++ b/lib/Dialect/HW/InstanceImplementation.cpp @@ -34,7 +34,7 @@ LogicalResult instance_like_impl::verifyReferencedModule( << moduleName.getValue() << "'"; // It must be some sort of module. - if (!hw::isAnyModule(module)) + if (!isa(module)) return instanceOp->emitError("symbol reference '") << moduleName.getValue() << "' isn't a module"; diff --git a/lib/Dialect/MSFT/MSFTOps.cpp b/lib/Dialect/MSFT/MSFTOps.cpp index e08c6ef0f2..80a1790551 100644 --- a/lib/Dialect/MSFT/MSFTOps.cpp +++ b/lib/Dialect/MSFT/MSFTOps.cpp @@ -390,8 +390,7 @@ LogicalResult InstanceOp::verifySymbolUses(SymbolTableCollection &symbolTable) { << getModuleName() << "'"; // It must be some sort of module. - if (!hw::isAnyModule(module) && - !isa(module)) + if (!isa(module)) return emitError("symbol reference '") << getModuleName() << "' isn't a module"; return success(); diff --git a/lib/Dialect/MSFT/Transforms/MSFTPartition.cpp b/lib/Dialect/MSFT/Transforms/MSFTPartition.cpp index 06f9eb19ef..4ded0d70e9 100644 --- a/lib/Dialect/MSFT/Transforms/MSFTPartition.cpp +++ b/lib/Dialect/MSFT/Transforms/MSFTPartition.cpp @@ -305,7 +305,7 @@ static StringRef getOperandName(OpOperand &oper, const SymbolCache &syms, if (auto inst = dyn_cast(op)) { Operation *modOp = syms.getDefinition(inst.getModuleNameAttr()); if (modOp) { // If modOp isn't in the cache, it's probably a new module; - assert(isAnyModule(modOp) && "Instance must point to a module"); + assert(isa(modOp) && "Instance must point to a module"); auto mod = cast(modOp); return mod.getInputName(oper.getOperandNumber()); } diff --git a/lib/Dialect/MSFT/Transforms/MSFTToHW.cpp b/lib/Dialect/MSFT/Transforms/MSFTToHW.cpp index 8755bffd7c..80d753bf7a 100644 --- a/lib/Dialect/MSFT/Transforms/MSFTToHW.cpp +++ b/lib/Dialect/MSFT/Transforms/MSFTToHW.cpp @@ -53,7 +53,7 @@ InstanceOpLowering::matchAndRewrite(InstanceOp msftInst, OpAdaptor adaptor, if (!referencedModule) return rewriter.notifyMatchFailure(msftInst, "Could not find referenced module"); - if (!hw::isAnyModule(referencedModule)) + if (!isa(referencedModule)) return rewriter.notifyMatchFailure( msftInst, "Referenced module was not an HW module"); diff --git a/lib/Dialect/MSFT/Transforms/PassCommon.cpp b/lib/Dialect/MSFT/Transforms/PassCommon.cpp index e5843838e2..03b98ce79d 100644 --- a/lib/Dialect/MSFT/Transforms/PassCommon.cpp +++ b/lib/Dialect/MSFT/Transforms/PassCommon.cpp @@ -14,11 +14,6 @@ using namespace mlir; using namespace circt; using namespace msft; -bool circt::msft::isAnyModule(Operation *module) { - return isa(module) || - hw::isAnyModule(module); -} - SmallVector circt::msft::makeSequentialRange(unsigned size) { SmallVector seq; for (size_t i = 0; i < size; ++i) @@ -32,7 +27,7 @@ StringRef circt::msft::getValueName(Value v, const SymbolCache &syms, if (auto inst = dyn_cast_or_null(defOp)) { Operation *modOp = syms.getDefinition(inst.getModuleNameAttr()); if (modOp) { // If modOp isn't in the cache, it's probably a new module; - assert(isAnyModule(modOp) && "Instance must point to a module"); + assert(isa(modOp) && "Instance must point to a module"); OpResult instResult = v.cast(); auto mod = cast(modOp); buff.clear(); @@ -73,7 +68,7 @@ void PassCommon::getAndSortModules(ModuleOp topMod, LogicalResult PassCommon::verifyInstances(mlir::ModuleOp mod) { WalkResult r = mod.walk([&](InstanceOp inst) { Operation *modOp = topLevelSyms.getDefinition(inst.getModuleNameAttr()); - if (!isAnyModule(modOp)) + if (!isa(modOp)) return WalkResult::interrupt(); hw::ModulePortInfo ports = cast(modOp).getPortList(); diff --git a/lib/Dialect/MSFT/Transforms/PassDetails.h b/lib/Dialect/MSFT/Transforms/PassDetails.h index 5d1060176d..0898433600 100644 --- a/lib/Dialect/MSFT/Transforms/PassDetails.h +++ b/lib/Dialect/MSFT/Transforms/PassDetails.h @@ -26,9 +26,6 @@ namespace circt { namespace msft { -/// TODO: Migrate these to some sort of OpInterface shared with hw. -bool isAnyModule(Operation *module); - /// Utility for creating {0, 1, 2, ..., size}. SmallVector makeSequentialRange(unsigned size);