mie: add ir builder test
This commit is contained in:
70
test/mie-ir.c
Normal file
70
test/mie-ir.c
Normal file
@@ -0,0 +1,70 @@
|
||||
#include <mie/arg.h>
|
||||
#include <mie/block.h>
|
||||
#include <mie/builder.h>
|
||||
#include <mie/convert.h>
|
||||
#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));
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user