mie: ir: builder: add mie_emitter support

This commit is contained in:
2026-01-25 14:53:24 +00:00
parent 7d30e8f3ff
commit bf8c966c03
2 changed files with 10 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
#ifndef MIE_IR_BUILDER_H_ #ifndef MIE_IR_BUILDER_H_
#define MIE_IR_BUILDER_H_ #define MIE_IR_BUILDER_H_
#include <mie/ir/emit.h>
#include <mie/misc.h> #include <mie/misc.h>
#include <stddef.h> #include <stddef.h>
@@ -30,9 +31,9 @@ MIE_API void mie_builder_step_into_block(
MIE_API void mie_builder_step_out(struct mie_builder *builder); MIE_API void mie_builder_step_out(struct mie_builder *builder);
MIE_API struct mie_op *mie_builder_put_op( MIE_API struct mie_op *mie_builder_put_op(
struct mie_builder *, const char *dialect, const char *op, struct mie_builder *builder, const char *dialect, const char *op,
struct mie_register **args, size_t nr_args); struct mie_register **args, size_t nr_args);
MIE_API enum mie_status mie_builder_put_name( MIE_API enum mie_status mie_builder_put_name(
struct mie_builder *, struct mie_name *name, const char *hint); struct mie_builder *builder, struct mie_name *name, const char *hint);
#endif #endif

View File

@@ -1,6 +1,7 @@
#include <mie/ctx.h> #include <mie/ctx.h>
#include <mie/ir/block.h> #include <mie/ir/block.h>
#include <mie/ir/builder.h> #include <mie/ir/builder.h>
#include <mie/ir/emit.h>
#include <mie/ir/op-definition.h> #include <mie/ir/op-definition.h>
#include <mie/ir/op.h> #include <mie/ir/op.h>
#include <mie/ir/region.h> #include <mie/ir/region.h>
@@ -13,6 +14,7 @@ struct builder_scope {
}; };
struct mie_builder { struct mie_builder {
struct mie_emitter b_base;
struct mie_ctx *b_ctx; struct mie_ctx *b_ctx;
b_queue b_scope_stack; b_queue b_scope_stack;
struct mie_op *b_root; struct mie_op *b_root;
@@ -28,6 +30,11 @@ struct mie_builder *mie_builder_create(struct mie_ctx *ctx, struct mie_op *root)
memset(out, 0x0, sizeof *out); memset(out, 0x0, sizeof *out);
out->b_base.e_get_ctx = (mie_emit_get_ctx)mie_builder_get_ctx;
out->b_base.e_put_op = (mie_emit_put_op)mie_builder_put_op;
out->b_base.e_put_name = (mie_emit_put_name)mie_builder_put_name;
out->b_base.e_put_block = NULL;
out->b_ctx = ctx; out->b_ctx = ctx;
out->b_root = root; out->b_root = root;