11#include "mlir/Dialect/Func/IR/FuncOps.h"
12#include "mlir/Dialect/SCF/IR/SCF.h"
16#define GEN_PASS_DEF_WRAPPROCEDURALOPSPASS
17#include "circt/Dialect/LLHD/Transforms/LLHDPasses.h.inc"
26struct WrapProceduralOpsPass
27 :
public llhd::impl::WrapProceduralOpsPassBase<WrapProceduralOpsPass> {
28 void runOnOperation()
override;
32void WrapProceduralOpsPass::runOnOperation() {
33 for (
auto &op :
llvm::make_early_inc_range(getOperation().getOps())) {
34 if (!isa<scf::SCFDialect>(op.getDialect()) && !isa<func::CallOp>(op))
36 auto builder = OpBuilder(&op);
37 auto wrapperOp = llhd::CombinationalOp::create(builder, op.getLoc(),
39 op.replaceAllUsesWith(wrapperOp);
40 builder.createBlock(&wrapperOp.getBody());
41 auto yieldOp = llhd::YieldOp::create(builder, op.getLoc(), op.getResults());
42 op.moveBefore(yieldOp);
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.