mie: ir: rewrite: add pattern and rewriter interface
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user