mie: ir: rewrite: add pattern and rewriter interface

This commit is contained in:
2026-01-23 23:21:42 +00:00
parent 29984307aa
commit ac7860b6bd

View File

@@ -1,6 +1,60 @@
#ifndef MIE_IR_REWRITE_H_
#define MIE_IR_REWRITE_H_
#include <mie/misc.h>
#include <mie/status.h>
#include <stddef.h>
struct mie_op;
struct mie_ctx;
struct mie_rewriter;
struct mie_register;
#define MIE_REWRITE_RESULT(result, status) \
((struct mie_rewrite_result) {.r_result = (result), .r_status = (status)})
enum mie_match_result {
MIE_NO_MATCH_FOUND = 0,
MIE_MATCH_FOUND,
};
struct mie_rewrite_result {
enum {
MIE_REWRITE_SUCCESS = 0,
MIE_REWRITE_IGNORE,
MIE_REWRITE_FAILURE,
} r_result;
enum mie_status r_status;
};
struct mie_rewrite_pattern {
struct {
const char *t_dialect_name, *t_op_name;
const struct mie_op_definition *t_op;
} p_root;
enum mie_match_result (*p_match)(const struct mie_op *);
struct mie_rewrite_result (*p_rewrite)(
struct mie_op *, struct mie_rewriter *);
};
MIE_API struct mie_rewriter *mie_rewriter_create(struct mie_ctx *ctx);
MIE_API struct mie_block *mie_rewriter_get_insertion_block(
struct mie_rewriter *rewriter);
MIE_API struct mie_op *mie_rewriter_get_insertion_point(
struct mie_rewriter *rewriter);
MIE_API struct mie_block *mie_rewriter_split_block(
struct mie_rewriter *rewriter, struct mie_block *block,
struct mie_op *before);
MIE_API struct mie_block *mie_rewriter_create_block(
struct mie_rewriter *rewriter, struct mie_block *insert_before);
MIE_API struct mie_op *mie_rewriter_put_op(
struct mie_rewriter *rewriter, const char *dialect, const char *op,
struct mie_register **args, size_t nr_args);
MIE_API enum mie_status mie_rewriter_erase_op(
struct mie_rewriter *rewriter, struct mie_op *op);
#endif