16 #include "mlir/IR/Builders.h"
18 using namespace circt;
25 struct HWStubExternalModulesPass
26 :
public sv::HWStubExternalModulesBase<HWStubExternalModulesPass> {
27 void runOnOperation()
override;
31 void HWStubExternalModulesPass::runOnOperation() {
32 auto topModule = getOperation().getBody();
33 OpBuilder
builder(topModule->getParentOp()->getContext());
34 builder.setInsertionPointToEnd(topModule);
36 for (
auto &op : llvm::make_early_inc_range(*topModule))
37 if (
auto module = dyn_cast<hw::HWModuleExternOp>(op)) {
38 hw::ModulePortInfo ports(module.getPortList());
39 auto nameAttr = module.getNameAttr();
41 module.getLoc(), nameAttr, ports, module.getParameters());
42 auto outputOp = newModule.getBodyBlock()->getTerminator();
43 OpBuilder innerBuilder(outputOp);
46 for (
auto &p : ports.getOutputs()) {
48 innerBuilder.create<sv::ConstantXOp>(outputOp->getLoc(), p.
type));
58 return std::make_unique<HWStubExternalModulesPass>();
llvm::SmallVector< StringAttr > outputs
std::unique_ptr< mlir::Pass > createHWStubExternalModulesPass()
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.