2025-04-13 18:34:41 +01:00
|
|
|
#include <mie/arg.h>
|
|
|
|
|
#include <mie/block.h>
|
|
|
|
|
#include <mie/builder.h>
|
|
|
|
|
#include <mie/convert.h>
|
2025-04-17 22:02:10 +01:00
|
|
|
#include <mie/ctx.h>
|
2025-04-13 18:34:41 +01:00
|
|
|
#include <mie/func.h>
|
|
|
|
|
#include <mie/module.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
|
{
|
|
|
|
|
struct mie_ctx *ctx = mie_ctx_create();
|
|
|
|
|
struct mie_module *mod = mie_module_create();
|
|
|
|
|
struct mie_builder *builder = mie_builder_create(ctx, NULL);
|
|
|
|
|
struct mie_func *func = mie_func_create(
|
|
|
|
|
"test", MIE_FUNC_STATIC, mie_ctx_get_type(ctx, MIE_TYPE_VOID),
|
|
|
|
|
NULL, 0);
|
|
|
|
|
|
|
|
|
|
struct mie_type *i32 = mie_ctx_get_int_type(ctx, 32);
|
|
|
|
|
|
|
|
|
|
struct mie_block *local_vars = mie_func_create_block(func, NULL);
|
|
|
|
|
mie_builder_set_insert_point(builder, local_vars);
|
|
|
|
|
struct mie_value *a_ptr = mie_builder_alloca(builder, i32, "a");
|
|
|
|
|
struct mie_value *b_ptr = mie_builder_alloca(builder, i32, "b");
|
|
|
|
|
struct mie_value *c_ptr = mie_builder_alloca(builder, i32, "c");
|
|
|
|
|
|
|
|
|
|
struct mie_block *entry = mie_func_create_block(func, NULL);
|
|
|
|
|
|
|
|
|
|
mie_builder_br(builder, entry);
|
|
|
|
|
mie_builder_set_insert_point(builder, entry);
|
|
|
|
|
|
|
|
|
|
mie_builder_store(builder, mie_ctx_get_int(ctx, 1, 32), a_ptr);
|
|
|
|
|
mie_builder_store(builder, mie_ctx_get_int(ctx, 2, 32), b_ptr);
|
|
|
|
|
|
|
|
|
|
struct mie_value *a = mie_builder_load(builder, i32, a_ptr, NULL);
|
|
|
|
|
struct mie_value *b = mie_builder_load(builder, i32, b_ptr, NULL);
|
|
|
|
|
|
|
|
|
|
struct mie_value *c = mie_builder_add(builder, a, b, NULL);
|
|
|
|
|
|
|
|
|
|
mie_builder_store(builder, c, c_ptr);
|
|
|
|
|
|
|
|
|
|
mie_builder_ret(builder, NULL);
|
|
|
|
|
#if 0
|
|
|
|
|
struct mie_value *a = mie_ctx_get_int(ctx, 1, 32);
|
|
|
|
|
struct mie_value *b = mie_ctx_get_int(ctx, 2, 32);
|
|
|
|
|
struct mie_value *c = mie_ctx_get_int(ctx, 3, 32);
|
|
|
|
|
struct mie_value *d = mie_ctx_get_int(ctx, 4, 32);
|
|
|
|
|
struct mie_value *add1 = mie_builder_add(builder, a, b, "addtmp");
|
|
|
|
|
struct mie_value *add2 = mie_builder_add(builder, c, d, "addtmp");
|
|
|
|
|
struct mie_value *add3 = mie_builder_add(builder, add1, add2, "addtmp");
|
|
|
|
|
struct mie_value *ret = mie_builder_ret(builder, add3);
|
|
|
|
|
#endif
|
|
|
|
|
mie_func_insert_block(func, local_vars, NULL);
|
|
|
|
|
mie_func_insert_block(func, entry, NULL);
|
|
|
|
|
|
|
|
|
|
mie_module_add_function(mod, func);
|
|
|
|
|
|
|
|
|
|
struct mie_ir_converter *converter
|
|
|
|
|
= mie_ir_converter_create(MIE_IR_MEM, MIE_IR_TEXT);
|
|
|
|
|
|
|
|
|
|
mie_ir_converter_set_src_value(converter, MIE_VALUE(mod));
|
|
|
|
|
mie_ir_converter_set_dest_file(converter, stdout);
|
|
|
|
|
|
|
|
|
|
mie_ir_converter_process(converter);
|
|
|
|
|
|
|
|
|
|
mie_ir_converter_destroy(converter);
|
|
|
|
|
|
|
|
|
|
mie_value_destroy(MIE_VALUE(mod));
|
|
|
|
|
|
2025-04-13 19:25:41 +01:00
|
|
|
mie_builder_destroy(builder);
|
|
|
|
|
mie_ctx_destroy(ctx);
|
|
|
|
|
|
2025-04-13 18:34:41 +01:00
|
|
|
return 0;
|
|
|
|
|
}
|