rewrite: add functions to add new args to ops
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
struct mie_op;
|
struct mie_op;
|
||||||
struct mie_ctx;
|
struct mie_ctx;
|
||||||
|
struct mie_type;
|
||||||
struct mie_region;
|
struct mie_region;
|
||||||
struct mie_register;
|
struct mie_register;
|
||||||
struct mie_op_successor;
|
struct mie_op_successor;
|
||||||
@@ -41,6 +42,9 @@ MIE_API struct mie_block *mie_rewriter_split_block(
|
|||||||
const char *name);
|
const char *name);
|
||||||
MIE_API struct mie_block *mie_rewriter_create_block(
|
MIE_API struct mie_block *mie_rewriter_create_block(
|
||||||
struct mie_rewriter *rw, struct mie_block *insert_before, const char *name);
|
struct mie_rewriter *rw, struct mie_block *insert_before, const char *name);
|
||||||
|
MIE_API struct mie_register *mie_rewriter_add_block_parameter(
|
||||||
|
struct mie_rewriter *rw, struct mie_block *block, const char *name,
|
||||||
|
const struct mie_type *type);
|
||||||
|
|
||||||
MIE_API enum mie_status mie_rewriter_move_block_to_start(
|
MIE_API enum mie_status mie_rewriter_move_block_to_start(
|
||||||
struct mie_rewriter *rw, struct mie_block *block,
|
struct mie_rewriter *rw, struct mie_block *block,
|
||||||
@@ -91,6 +95,11 @@ MIE_API struct mie_op *mie_rewriter_replace_op(
|
|||||||
MIE_API struct mie_op_successor *mie_rewriter_add_op_successor(
|
MIE_API struct mie_op_successor *mie_rewriter_add_op_successor(
|
||||||
struct mie_rewriter *rw, struct mie_op *op, struct mie_block *dest,
|
struct mie_rewriter *rw, struct mie_op *op, struct mie_block *dest,
|
||||||
struct mie_register **args, size_t nr_args);
|
struct mie_register **args, size_t nr_args);
|
||||||
|
MIE_API struct mie_op_arg *mie_rewriter_add_op_successor_arg(
|
||||||
|
struct mie_rewriter *rw, struct mie_op *op, struct mie_op_successor *s,
|
||||||
|
struct mie_register *reg);
|
||||||
|
MIE_API struct mie_op_arg *mie_rewriter_add_op_arg(
|
||||||
|
struct mie_rewriter *rw, struct mie_op *op, struct mie_register *reg);
|
||||||
MIE_API enum mie_status mie_rewriter_erase_op(
|
MIE_API enum mie_status mie_rewriter_erase_op(
|
||||||
struct mie_rewriter *rw, struct mie_op *op);
|
struct mie_rewriter *rw, struct mie_op *op);
|
||||||
MIE_API enum mie_status mie_rewriter_move_op_args_to_successor(
|
MIE_API enum mie_status mie_rewriter_move_op_args_to_successor(
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ struct mie_block *mie_rewriter_set_insertion_block(
|
|||||||
struct mie_rewriter *rw, struct mie_block *block)
|
struct mie_rewriter *rw, struct mie_block *block)
|
||||||
{
|
{
|
||||||
rw->r_insert_block = block;
|
rw->r_insert_block = block;
|
||||||
|
rw->r_insert_point = NULL;
|
||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,7 +110,28 @@ struct mie_block *mie_rewriter_split_block(
|
|||||||
struct mie_block *mie_rewriter_create_block(
|
struct mie_block *mie_rewriter_create_block(
|
||||||
struct mie_rewriter *rw, struct mie_block *insert_before, const char *name)
|
struct mie_rewriter *rw, struct mie_block *insert_before, const char *name)
|
||||||
{
|
{
|
||||||
return NULL;
|
struct mie_region *parent = insert_before->b_parent;
|
||||||
|
struct mie_block *block
|
||||||
|
= mie_region_add_block_before(parent, insert_before);
|
||||||
|
mie_rewriter_put_name(rw, &block->b_name, name);
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct mie_register *mie_rewriter_add_block_parameter(
|
||||||
|
struct mie_rewriter *rw, struct mie_block *block, const char *name,
|
||||||
|
const struct mie_type *type)
|
||||||
|
{
|
||||||
|
struct mie_register *reg = mie_block_add_param(block);
|
||||||
|
|
||||||
|
if (mie_rewriter_put_name(rw, ®->reg_name, name) != MIE_SUCCESS) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
reg->reg_flags = MIE_REGISTER_F_VIRTUAL | MIE_REGISTER_F_BLOCK_PARAM;
|
||||||
|
reg->reg_block = block;
|
||||||
|
reg->reg_type = type;
|
||||||
|
|
||||||
|
return reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum mie_status mie_rewriter_move_block_to_start(
|
enum mie_status mie_rewriter_move_block_to_start(
|
||||||
@@ -410,6 +432,31 @@ struct mie_op *mie_rewriter_replace_op(
|
|||||||
return op;
|
return op;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct mie_op_arg *mie_rewriter_add_op_arg(
|
||||||
|
struct mie_rewriter *rw, struct mie_op *op, struct mie_register *value)
|
||||||
|
{
|
||||||
|
struct mie_op_arg *arg = mie_op_add_arg(op);
|
||||||
|
arg->arg_flags = MIE_OP_F_ARG_RESOLVED;
|
||||||
|
arg->arg_value.u_reg = value;
|
||||||
|
arg->arg_value.u_user = op;
|
||||||
|
b_queue_push_back(&value->reg_use, &arg->arg_value.u_entry);
|
||||||
|
|
||||||
|
return arg;
|
||||||
|
}
|
||||||
|
|
||||||
|
MIE_API struct mie_op_arg *mie_rewriter_add_op_successor_arg(
|
||||||
|
struct mie_rewriter *rw, struct mie_op *op, struct mie_op_successor *s,
|
||||||
|
struct mie_register *value)
|
||||||
|
{
|
||||||
|
struct mie_op_arg *arg = mie_vector_emplace_back(s->s_args, NULL);
|
||||||
|
arg->arg_flags = MIE_OP_F_ARG_RESOLVED;
|
||||||
|
arg->arg_value.u_reg = value;
|
||||||
|
arg->arg_value.u_user = op;
|
||||||
|
b_queue_push_back(&value->reg_use, &arg->arg_value.u_entry);
|
||||||
|
|
||||||
|
return arg;
|
||||||
|
}
|
||||||
|
|
||||||
struct mie_op_successor *mie_rewriter_add_op_successor(
|
struct mie_op_successor *mie_rewriter_add_op_successor(
|
||||||
struct mie_rewriter *rw, struct mie_op *op, struct mie_block *dest,
|
struct mie_rewriter *rw, struct mie_op *op, struct mie_block *dest,
|
||||||
struct mie_register **args, size_t nr_args)
|
struct mie_register **args, size_t nr_args)
|
||||||
|
|||||||
Reference in New Issue
Block a user