Skip to content

Instantly share code, notes, and snippets.

@antonijn
Created January 13, 2016 23:32
Show Gist options
  • Save antonijn/a06817838d2384de767a to your computer and use it in GitHub Desktop.
Save antonijn/a06817838d2384de767a to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <item/ast.h>
#include <item/io.h>
int main(int argc, char **argv)
{
item_mod *mod = item_create_mod();
item_type *i32 = item_e2b(item_get_int(mod, 32));
item_fun *fun = item_create_fun(mod, i32, "main", L_GLOBAL);
item_block *cond = item_create_block(fun);
item_block *inc = item_create_block(fun);
item_block *ex = item_create_block(fun);
item_block *entry = item_fun_get_entry(fun);
item_lex_progress(entry, cond);
item_lex_progress(cond, inc);
item_lex_progress(inc, ex);
item_node *jmp = item_create_node(entry, NK_JMP, item_e2b(cond));
item_push_back_node(entry, jmp);
item_node *phi = item_create_node(cond, NK_PHI, i32);
item_push_back_node(cond, phi);
item_lit *ten = item_create_lit(i32);
item_lit_set_int(ten, 10);
item_node *cmp = item_create_node(cond, NK_CMPL, item_e2b(phi), item_e2b(ten));
item_push_back_node(cond, cmp);
item_node *cjmp = item_create_node(cond, NK_CJMP, item_e2b(cmp), item_e2b(inc), item_e2b(ex));
item_push_back_node(cond, cjmp);
item_lit *one = item_create_lit(i32);
item_lit_set_int(one, 1);
item_node *add = item_create_node(inc, NK_ADD, item_e2b(phi), item_e2b(one));
item_push_back_node(inc, add);
item_push_back_node(inc, item_create_node(inc, NK_JMP, item_e2b(cond)));
item_lit *zero = item_create_lit(i32);
item_lit_set_int(zero, 0);
item_phi_add(phi, entry, item_e2b(zero));
item_phi_add(phi, inc, item_e2b(add));
item_push_back_node(ex, item_create_node(ex, NK_RET, item_e2b(zero)));
item_write_graph(fun, stdout);
item_destroy_mod(mod);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment