16 #include "mlir/Dialect/Func/IR/FuncOps.h"
17 #include "mlir/IR/Visitors.h"
19 using namespace circt;
23 struct FunctionEliminationPass
24 :
public llhd::FunctionEliminationBase<FunctionEliminationPass> {
25 void runOnOperation()
override;
28 void FunctionEliminationPass::runOnOperation() {
29 ModuleOp module = getOperation();
31 WalkResult result = module.walk([](mlir::func::CallOp op) -> WalkResult {
32 if (isa<llhd::ProcOp>(op->getParentOp()) ||
33 isa<llhd::EntityOp>(op->getParentOp())) {
36 "Not all functions are inlined, there is at least "
37 "one function call left within a llhd.proc or llhd.entity.");
39 return WalkResult::advance();
42 if (result.wasInterrupted()) {
47 module.walk([](mlir::func::FuncOp op) { op.erase(); });
51 std::unique_ptr<OperationPass<ModuleOp>>
53 return std::make_unique<FunctionEliminationPass>();
std::unique_ptr< OperationPass< ModuleOp > > createFunctionEliminationPass()
This file defines an intermediate representation for circuits acting as an abstraction for constraint...