15#include <mlir/CAPI/IR.h>
16#include <mlir/CAPI/Support.h>
17#include <mlir/CAPI/Wrap.h>
18#include <mlir/IR/Builders.h>
26class ListenerT :
public OpBuilder::Listener {
29 : opInsertedCb(op), blockInsertedCb(block), userData(data) {}
31 void notifyOperationInserted(Operation *op)
final { opInsertedCb(wrap(op), userData); }
33 void notifyBlockCreated(Block *block)
final { blockInsertedCb(wrap(block), userData); }
38 void *userData =
nullptr;
48 return MlirOpBuilder {.ptr =
new OpBuilderT(unwrap(ctx))};
52 auto *l =
reinterpret_cast<ListenerT *
>(listener.ptr);
53 return MlirOpBuilder {.ptr =
new OpBuilderT(unwrap(ctx), l)};
57 delete reinterpret_cast<OpBuilderT *
>(builder.ptr);
61 return wrap(unwrap(builder)->getContext());
65 unwrap(builder)->setInsertionPointToStart(unwrap(block));
69 auto it = unwrap(builder)->getInsertionPoint();
70 auto *blk = unwrap(builder)->getInsertionBlock();
72 return MlirOperation {
nullptr};
75 return wrap(it != blk->end() ? &*it :
nullptr);
80 return wrap(unwrap(builder)->getInsertionBlock());
90 return MlirOpBuilderListener {.ptr =
new ListenerT(opCb, blockCb, userData)};
94 delete reinterpret_cast<ListenerT *
>(listener.ptr);
void mlirOpBuilderDestroy(MlirOpBuilder builder)
Destroys the given builder.
MlirOpBuilder mlirOpBuilderCreate(MlirContext ctx)
MlirOpBuilder mlirOpBuilderCreateWithListener(MlirContext ctx, MlirOpBuilderListener listener)
void mlirOpBuilderSetInsertionPointToStart(MlirOpBuilder builder, MlirBlock block)
Sets the insertion point to the beginning of the given block.
MlirOperation mlirOpBuilderGetInsertionPoint(MlirOpBuilder builder)
Returns the current insertion point in the builder.
void mlirOpBuilderListenerDestroy(MlirOpBuilderListener listener)
Destroys the given listener.
MlirBlock mlirOpBuilderGetInsertionBlock(MlirOpBuilder builder)
Returns the current insertion block in the builder.
MlirOpBuilderListener mlirOpBuilderListenerCreate(MlirNotifyOperationInserted opCb, MlirNotifyBlockInserted blockCb, void *userData)
Creates a new mlir::OpBuilder::Listener.
MlirContext mlirOpBuilderGetContext(MlirOpBuilder builder)
Returns the context.
void(* MlirNotifyOperationInserted)(MlirOperation, void *)
void(* MlirNotifyBlockInserted)(MlirBlock, void *)