#include #include #include #include #include #include #include #include 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( MIE_FUNC_STATIC, mie_ctx_get_type(ctx, MIE_TYPE_VOID)); 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, "test"); struct mie_ir_converter *converter = mie_ir_converter_create(ctx, 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)); mie_builder_destroy(builder); mie_ctx_destroy(ctx); return 0; }