mie: dialect: update Op emitter functions to use mie_emitter
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#include <mie/ctx.h>
|
||||
#include <mie/dialect/builtin.h>
|
||||
#include <mie/dialect/dialect.h>
|
||||
#include <mie/ir/builder.h>
|
||||
#include <mie/ir/emit.h>
|
||||
#include <mie/ir/op-definition.h>
|
||||
#include <mie/ir/op.h>
|
||||
#include <mie/macros.h>
|
||||
@@ -32,20 +32,18 @@ static enum mie_status parse(struct mie_parser *parser, struct mie_op *out)
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
struct mie_register *mie_arith_put_addi(
|
||||
struct mie_builder *builder, struct mie_register *left,
|
||||
struct mie_register *mie_arith_addi_put(
|
||||
struct mie_emitter *e, struct mie_register *left,
|
||||
struct mie_register *right, const char *name)
|
||||
{
|
||||
struct mie_register *args[] = {left, right};
|
||||
const size_t nr_args = sizeof args / sizeof args[0];
|
||||
|
||||
struct mie_op *op
|
||||
= mie_builder_put_op(builder, "arith", "addi", args, nr_args);
|
||||
struct mie_op *op = mie_emitter_put_op(e, "arith", "addi", args, nr_args);
|
||||
const struct mie_type *ty = left->reg_type;
|
||||
|
||||
struct mie_register *result = mie_op_add_result(op, ty);
|
||||
result->reg_block = mie_builder_get_current_block(builder);
|
||||
mie_builder_put_name(builder, &result->reg_name, name);
|
||||
mie_emitter_put_name(e, &result->reg_name, name);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include <mie/attribute/attribute.h>
|
||||
#include <mie/dialect/builtin.h>
|
||||
#include <mie/dialect/dialect.h>
|
||||
#include <mie/ir/builder.h>
|
||||
#include <mie/ir/emit.h>
|
||||
#include <mie/ir/op-definition.h>
|
||||
#include <mie/ir/op.h>
|
||||
#include <mie/macros.h>
|
||||
@@ -41,39 +41,35 @@ static enum mie_status parse(struct mie_parser *parser, struct mie_op *out)
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
struct mie_register *mie_arith_put_constant_i(
|
||||
struct mie_builder *builder, long long value, const char *name)
|
||||
struct mie_register *mie_arith_constant_i_put(
|
||||
struct mie_emitter *e, long long value, const char *name)
|
||||
{
|
||||
struct mie_op *op
|
||||
= mie_builder_put_op(builder, "arith", "constant", NULL, 0);
|
||||
struct mie_op *op = mie_emitter_put_op(e, "arith", "constant", NULL, 0);
|
||||
const struct mie_type *ty
|
||||
= mie_ctx_get_int_type(mie_builder_get_ctx(builder), 32);
|
||||
= mie_ctx_get_int_type(mie_emitter_get_ctx(e), 32);
|
||||
struct mie_register *result = mie_op_add_result(op, ty);
|
||||
|
||||
result->reg_block = mie_builder_get_current_block(builder);
|
||||
mie_builder_put_name(builder, &result->reg_name, name);
|
||||
mie_emitter_put_name(e, &result->reg_name, name);
|
||||
|
||||
struct mie_attribute *val
|
||||
= mie_ctx_get_int(mie_builder_get_ctx(builder), value, 32);
|
||||
= mie_ctx_get_int(mie_emitter_get_ctx(e), value, 32);
|
||||
mie_attribute_map_put(&op->op_attrib, "value", val, MIE_ATTRMAP_F_REPLACE);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
struct mie_register *mie_arith_put_constant_f(
|
||||
struct mie_builder *builder, long long value, const char *name)
|
||||
struct mie_register *mie_arith_constant_f_put(
|
||||
struct mie_emitter *e, long long value, const char *name)
|
||||
{
|
||||
struct mie_op *op
|
||||
= mie_builder_put_op(builder, "arith", "constant", NULL, 0);
|
||||
struct mie_op *op = mie_emitter_put_op(e, "arith", "constant", NULL, 0);
|
||||
const struct mie_type *ty
|
||||
= mie_ctx_get_int_type(mie_builder_get_ctx(builder), 32);
|
||||
= mie_ctx_get_int_type(mie_emitter_get_ctx(e), 32);
|
||||
struct mie_register *result = mie_op_add_result(op, ty);
|
||||
|
||||
result->reg_block = mie_builder_get_current_block(builder);
|
||||
mie_builder_put_name(builder, &result->reg_name, name);
|
||||
mie_emitter_put_name(e, &result->reg_name, name);
|
||||
|
||||
struct mie_attribute *val
|
||||
= mie_ctx_get_float(mie_builder_get_ctx(builder), value, 32);
|
||||
= mie_ctx_get_float(mie_emitter_get_ctx(e), value, 32);
|
||||
mie_attribute_map_put(&op->op_attrib, "value", val, MIE_ATTRMAP_F_REPLACE);
|
||||
|
||||
return result;
|
||||
|
||||
@@ -9,12 +9,11 @@
|
||||
static enum mie_status print(struct mie_printer *out, const struct mie_op *op)
|
||||
{
|
||||
b_stream_write_char(out->p_stream, ' ');
|
||||
if (MIE_VECTOR_COUNT(op->op_regions) == 0) {
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
struct mie_region *region = &op->op_regions.items[0];
|
||||
mie_printer_print_region(out, region, 0);
|
||||
struct mie_region *region = mie_op_get_first_region(op);
|
||||
if (region) {
|
||||
mie_printer_print_region(out, region, 0);
|
||||
}
|
||||
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <mie/dialect/dialect.h>
|
||||
#include <mie/ir/emit.h>
|
||||
#include <mie/ir/op-definition.h>
|
||||
#include <mie/ir/op.h>
|
||||
#include <mie/macros.h>
|
||||
@@ -33,6 +34,23 @@ static enum mie_status parse(struct mie_parser *parser, struct mie_op *out)
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
struct mie_op *mie_cf_br_cond_put(
|
||||
struct mie_emitter *e, struct mie_register *cond,
|
||||
struct mie_block *true_block, struct mie_register **true_args,
|
||||
size_t nr_true_args, struct mie_block *false_block,
|
||||
struct mie_register **false_args, size_t nr_false_args)
|
||||
{
|
||||
struct mie_op *op = mie_emitter_put_op(e, "cf", "br-cond", &cond, 1);
|
||||
if (!op) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mie_op_add_successor(op, true_block, true_args, nr_true_args);
|
||||
mie_op_add_successor(op, false_block, false_args, nr_false_args);
|
||||
|
||||
return op;
|
||||
}
|
||||
|
||||
MIE_OP_DEFINITION_BEGIN(mie_cf_br_cond, "br-cond")
|
||||
MIE_OP_DEFINITION_PRINT(print);
|
||||
MIE_OP_DEFINITION_PARSE(parse);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <mie/dialect/dialect.h>
|
||||
#include <mie/ir/block.h>
|
||||
#include <mie/ir/emit.h>
|
||||
#include <mie/ir/op-definition.h>
|
||||
#include <mie/ir/op.h>
|
||||
#include <mie/macros.h>
|
||||
@@ -20,6 +21,21 @@ static enum mie_status parse(struct mie_parser *parser, struct mie_op *out)
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
struct mie_op *mie_cf_br_put(
|
||||
struct mie_emitter *e, struct mie_block *dest,
|
||||
struct mie_register **dest_args, size_t nr_dest_args)
|
||||
{
|
||||
struct mie_op *op = mie_emitter_put_op(e, "cf", "br", NULL, 0);
|
||||
if (!op) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct mie_op_successor *s
|
||||
= mie_op_add_successor(op, dest, dest_args, nr_dest_args);
|
||||
|
||||
return op;
|
||||
}
|
||||
|
||||
MIE_OP_DEFINITION_BEGIN(mie_cf_br, "br")
|
||||
MIE_OP_DEFINITION_PRINT(print);
|
||||
MIE_OP_DEFINITION_PARSE(parse);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include <mie/interface/interface-definition.h>
|
||||
#include <mie/interface/interface.h>
|
||||
#include <mie/ir/block.h>
|
||||
#include <mie/ir/builder.h>
|
||||
#include <mie/ir/emit.h>
|
||||
#include <mie/ir/op-definition.h>
|
||||
#include <mie/ir/op.h>
|
||||
#include <mie/ir/region.h>
|
||||
@@ -28,8 +28,8 @@ static enum mie_status print(struct mie_printer *printer, const struct mie_op *o
|
||||
|
||||
b_stream_write_fmt(printer->p_stream, NULL, " @%s(", sym_name_cstr);
|
||||
|
||||
const struct mie_region *code = &op->op_regions.items[0];
|
||||
const struct mie_block *entry = &code->r_blocks.items[0];
|
||||
const struct mie_region *code = mie_op_get_first_region(op);
|
||||
const struct mie_block *entry = mie_region_get_first_block(code);
|
||||
|
||||
for (size_t i = 0; i < MIE_VECTOR_COUNT(entry->b_params); i++) {
|
||||
if (i > 0) {
|
||||
@@ -74,10 +74,9 @@ static enum mie_status parse(struct mie_parser *parser, struct mie_op *out)
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
struct mie_op *mie_func_put_func(
|
||||
struct mie_builder *builder, const char *name,
|
||||
struct mie_func_parameter *params, size_t nr_params,
|
||||
const struct mie_type **ret_types, size_t nr_ret_types)
|
||||
struct mie_op *mie_func_func_put(
|
||||
struct mie_emitter *e, const char *name, struct mie_func_parameter *params,
|
||||
size_t nr_params, const struct mie_type **ret_types, size_t nr_ret_types)
|
||||
{
|
||||
const struct mie_type **param_types
|
||||
= calloc(nr_params, sizeof *param_types);
|
||||
@@ -90,7 +89,7 @@ struct mie_op *mie_func_put_func(
|
||||
}
|
||||
|
||||
const struct mie_type *func_type = mie_ctx_get_function_type(
|
||||
mie_builder_get_ctx(builder), param_types, nr_params, ret_types,
|
||||
mie_emitter_get_ctx(e), param_types, nr_params, ret_types,
|
||||
nr_ret_types);
|
||||
free(param_types);
|
||||
|
||||
@@ -98,7 +97,7 @@ struct mie_op *mie_func_put_func(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct mie_op *op = mie_builder_put_op(builder, "func", "func", NULL, 0);
|
||||
struct mie_op *op = mie_emitter_put_op(e, "func", "func", NULL, 0);
|
||||
|
||||
struct mie_region *region = mie_op_add_region(op);
|
||||
struct mie_block *entry = mie_region_add_block(region);
|
||||
@@ -114,9 +113,9 @@ struct mie_op *mie_func_put_func(
|
||||
}
|
||||
|
||||
struct mie_attribute *sym_name
|
||||
= mie_ctx_get_string(mie_builder_get_ctx(builder), name);
|
||||
= mie_ctx_get_string(mie_emitter_get_ctx(e), name);
|
||||
struct mie_attribute *function_type
|
||||
= mie_type_attr_create(mie_builder_get_ctx(builder), func_type);
|
||||
= mie_type_attr_create(mie_emitter_get_ctx(e), func_type);
|
||||
|
||||
mie_attribute_map_put(
|
||||
&op->op_attrib, "sym_name", sym_name, MIE_ATTRMAP_F_REPLACE);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#include <mie/dialect/dialect.h>
|
||||
#include <mie/ir/builder.h>
|
||||
#include <mie/ir/emit.h>
|
||||
#include <mie/ir/op-definition.h>
|
||||
#include <mie/ir/op.h>
|
||||
#include <mie/ir/region.h>
|
||||
@@ -33,11 +33,14 @@ static enum mie_status print(struct mie_printer *printer, const struct mie_op *o
|
||||
|
||||
b_stream_write_char(printer->p_stream, ' ');
|
||||
|
||||
mie_printer_print_region(printer, &op->op_regions.items[0], 0);
|
||||
struct mie_region *if_region = mie_op_get_first_region(op);
|
||||
struct mie_region *else_region = mie_op_get_next_region(op, if_region);
|
||||
|
||||
if (MIE_VECTOR_COUNT(op->op_regions) > 1) {
|
||||
mie_printer_print_region(printer, if_region, 0);
|
||||
|
||||
if (else_region) {
|
||||
b_stream_write_string(printer->p_stream, " else ", NULL);
|
||||
mie_printer_print_region(printer, &op->op_regions.items[1], 0);
|
||||
mie_printer_print_region(printer, else_region, 0);
|
||||
}
|
||||
|
||||
return MIE_SUCCESS;
|
||||
@@ -48,19 +51,19 @@ static enum mie_status parse(struct mie_parser *parser, struct mie_op *out)
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
struct mie_op *mie_scf_put_if(
|
||||
struct mie_builder *builder, struct mie_register *cond,
|
||||
struct mie_op *mie_scf_if_put(
|
||||
struct mie_emitter *e, struct mie_register *cond,
|
||||
const struct mie_type *result_type, struct mie_region **out_true,
|
||||
struct mie_region **out_false, const char *name)
|
||||
{
|
||||
struct mie_op *op = mie_builder_put_op(builder, "scf", "if", &cond, 1);
|
||||
struct mie_op *op = mie_emitter_put_op(e, "scf", "if", &cond, 1);
|
||||
if (!op) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (result_type) {
|
||||
struct mie_register *result = mie_op_add_result(op, result_type);
|
||||
mie_builder_put_name(builder, &result->reg_name, name);
|
||||
mie_emitter_put_name(e, &result->reg_name, name);
|
||||
}
|
||||
|
||||
struct mie_region *r_true = mie_op_add_region(op);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#include <mie/dialect/dialect.h>
|
||||
#include <mie/ir/builder.h>
|
||||
#include <mie/ir/emit.h>
|
||||
#include <mie/ir/op-definition.h>
|
||||
#include <mie/ir/op.h>
|
||||
#include <mie/macros.h>
|
||||
@@ -35,10 +35,9 @@ static enum mie_status parse(struct mie_parser *parser, struct mie_op *out)
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
struct mie_op *mie_scf_put_yield(
|
||||
struct mie_builder *builder, struct mie_register *value)
|
||||
struct mie_op *mie_scf_yield_put(struct mie_emitter *e, struct mie_register *value)
|
||||
{
|
||||
return mie_builder_put_op(builder, "scf", "yield", &value, 1);
|
||||
return mie_emitter_put_op(e, "scf", "yield", &value, 1);
|
||||
}
|
||||
|
||||
MIE_OP_DEFINITION_BEGIN(mie_scf_yield, "yield")
|
||||
|
||||
@@ -8,19 +8,19 @@
|
||||
|
||||
struct mie_ctx;
|
||||
struct mie_dialect;
|
||||
struct mie_builder;
|
||||
struct mie_emitter;
|
||||
|
||||
MIE_API struct mie_dialect *mie_arith_dialect_create(struct mie_ctx *ctx);
|
||||
|
||||
MIE_API struct mie_register *mie_arith_put_constant_i(
|
||||
struct mie_builder *builder, long long value, const char *name);
|
||||
MIE_API struct mie_register *mie_arith_put_constant_f(
|
||||
struct mie_builder *builder, long long value, const char *name);
|
||||
MIE_API struct mie_register *mie_arith_put_addi(
|
||||
struct mie_builder *builder, struct mie_register *left,
|
||||
MIE_API struct mie_register *mie_arith_constant_i_put(
|
||||
struct mie_emitter *e, long long value, const char *name);
|
||||
MIE_API struct mie_register *mie_arith_constant_f_put(
|
||||
struct mie_emitter *e, long long value, const char *name);
|
||||
MIE_API struct mie_register *mie_arith_addi_put(
|
||||
struct mie_emitter *e, struct mie_register *left,
|
||||
struct mie_register *right, const char *name);
|
||||
MIE_API struct mie_register *mie_arith_put_addf(
|
||||
struct mie_builder *builder, struct mie_register *left,
|
||||
MIE_API struct mie_register *mie_arith_addf_put(
|
||||
struct mie_emitter *e, struct mie_register *left,
|
||||
struct mie_register *right, const char *name);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,10 +2,23 @@
|
||||
#define MIE_DIALECT_CF_H_
|
||||
|
||||
#include <mie/misc.h>
|
||||
#include <stddef.h>
|
||||
|
||||
struct mie_ctx;
|
||||
struct mie_block;
|
||||
struct mie_dialect;
|
||||
struct mie_emitter;
|
||||
struct mie_register;
|
||||
|
||||
MIE_API struct mie_dialect *mie_cf_dialect_create(struct mie_ctx *ctx);
|
||||
|
||||
MIE_API struct mie_op *mie_cf_br_put(
|
||||
struct mie_emitter *e, struct mie_block *dest,
|
||||
struct mie_register **dest_args, size_t nr_dest_args);
|
||||
MIE_API struct mie_op *mie_cf_br_cond_put(
|
||||
struct mie_emitter *e, struct mie_register *cond,
|
||||
struct mie_block *true_block, struct mie_register **true_args,
|
||||
size_t nr_true_args, struct mie_block *false_block,
|
||||
struct mie_register **false_args, size_t nr_false_args);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
struct mie_ctx;
|
||||
struct mie_type;
|
||||
struct mie_dialect;
|
||||
struct mie_emitter;
|
||||
struct mie_register;
|
||||
struct mie_builder;
|
||||
|
||||
struct mie_func_parameter {
|
||||
const char *param_name;
|
||||
@@ -18,9 +18,8 @@ struct mie_func_parameter {
|
||||
|
||||
MIE_API struct mie_dialect *mie_func_dialect_create(struct mie_ctx *ctx);
|
||||
|
||||
MIE_API struct mie_op *mie_func_put_func(
|
||||
struct mie_builder *builder, const char *name,
|
||||
struct mie_func_parameter *params, size_t nr_params,
|
||||
const struct mie_type **ret_types, size_t nr_ret_types);
|
||||
MIE_API struct mie_op *mie_func_func_put(
|
||||
struct mie_emitter *e, const char *name, struct mie_func_parameter *params,
|
||||
size_t nr_params, const struct mie_type **ret_types, size_t nr_ret_types);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -7,16 +7,16 @@ struct mie_ctx;
|
||||
struct mie_type;
|
||||
struct mie_region;
|
||||
struct mie_dialect;
|
||||
struct mie_builder;
|
||||
struct mie_emitter;
|
||||
struct mie_register;
|
||||
|
||||
MIE_API struct mie_dialect *mie_scf_dialect_create(struct mie_ctx *ctx);
|
||||
|
||||
MIE_API struct mie_op *mie_scf_put_if(
|
||||
struct mie_builder *builder, struct mie_register *cond,
|
||||
MIE_API struct mie_op *mie_scf_if_put(
|
||||
struct mie_emitter *e, struct mie_register *cond,
|
||||
const struct mie_type *result_type, struct mie_region **out_true,
|
||||
struct mie_region **out_false, const char *name);
|
||||
MIE_API struct mie_op *mie_scf_put_yield(
|
||||
struct mie_builder *builder, struct mie_register *value);
|
||||
MIE_API struct mie_op *mie_scf_yield_put(
|
||||
struct mie_emitter *e, struct mie_register *value);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user