Files
ivy/test/mie-ir.c

74 lines
2.3 KiB
C
Raw Normal View History

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(
2025-04-22 15:22:28 +01:00
MIE_FUNC_STATIC, mie_ctx_get_type(ctx, MIE_TYPE_VOID));
2025-04-13 18:34:41 +01:00
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);
2025-04-22 15:22:28 +01:00
mie_module_add_function(mod, func, "test");
2025-04-13 18:34:41 +01:00
struct mie_ir_converter *converter
= mie_ir_converter_create(ctx, MIE_IR_MEM, MIE_IR_TEXT);
2025-04-13 18:34:41 +01:00
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));
mie_builder_destroy(builder);
mie_ctx_destroy(ctx);
2025-04-13 18:34:41 +01:00
return 0;
}