X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=testprograms%2Fthree_cfpred_example.c;h=971b325868aed10aab40a57f7fe3ec798c57d56d;hb=5038e8ae037b627fe54281d5d522e62fe3ec175d;hp=80cf94f8cfa5a8121d454614d66105d07bb037c3;hpb=4433514e4b01cb3c566d24d671e689f02682f59f;p=libfirm diff --git a/testprograms/three_cfpred_example.c b/testprograms/three_cfpred_example.c index 80cf94f8c..971b32586 100644 --- a/testprograms/three_cfpred_example.c +++ b/testprograms/three_cfpred_example.c @@ -7,7 +7,9 @@ */ # include +# include +# include "irvrfy.h" # include "irdump.h" # include "firm.h" @@ -48,9 +50,10 @@ int main(int argc, char **argv) { + type *prim_t_int; ir_graph *irg; /* this variable contains the irgraph */ - type_class *owner; /* the class in which this method is defined */ - type_method *proc_main; /* type information for the method main */ + type *owner; /* the class in which this method is defined */ + type *proc_main; /* type information for the method main */ entity *ent; /* represents this method as entity of owner */ ir_node *c1, *c2, *cond, *f, *t, *endBlock, *Block1, *jmp, *scndCondBlock, *Block2, *Block3, *x; @@ -60,6 +63,9 @@ int main(int argc, char **argv) set_optimize(1); + /*** Make basic type information for primitive type int. ***/ + prim_t_int = new_type_primitive(id_from_str ("int", 3), mode_i); + /* FIRM was designed for oo languages where all methods belong to a class. * For imperative languages like C we view a file as a large class containing * all functions as methods in this file. @@ -73,10 +79,12 @@ int main(int argc, char **argv) owner = get_glob_type(); proc_main = new_type_method(id_from_str(METHODNAME, strlen(METHODNAME)), NRARGS, NRES); - /** @@@ setting of arg/res types misses **/ - ent = new_entity ((type *)owner, + set_method_param_type(proc_main, 0, prim_t_int); + set_method_res_type(proc_main, 0, prim_t_int); + + ent = new_entity (owner, id_from_str (METHODNAME, strlen(METHODNAME)), - (type *)proc_main); + proc_main); #define NUM_OF_LOCAL_VARS 2 @@ -91,13 +99,13 @@ int main(int argc, char **argv) set_value(0, new_Const (mode_i, tarval_from_long (mode_i, 6))); f = new_Proj(cond, mode_X, 0); t = new_Proj(cond, mode_X, 1); - mature_block(irg->current_block); + mature_block(get_irg_current_block(irg)); /* end block to add jmps */ - endBlock = new_Block(); + endBlock = new_immBlock(); /* Block 1 */ - Block1 = new_Block(); + Block1 = new_immBlock(); add_in_edge(Block1, t); mature_block(Block1); set_value(0, new_Const (mode_i, tarval_from_long (mode_i, 5))); @@ -105,24 +113,24 @@ int main(int argc, char **argv) add_in_edge(endBlock, jmp); /* scndCondBlock */ - scndCondBlock = new_Block(); + scndCondBlock = new_immBlock(); add_in_edge(scndCondBlock, f); mature_block(scndCondBlock); c1 = new_Const (mode_i, tarval_from_long (mode_i, 3)); cond = new_Cond(new_Proj(new_Cmp(c1, get_value(1, mode_i)), mode_b, Eq)); f = new_Proj(cond, mode_X, 0); t = new_Proj(cond, mode_X, 1); - mature_block(irg->current_block); + mature_block(get_irg_current_block(irg)); /* Block 2 */ - Block2 = new_Block(); + Block2 = new_immBlock(); add_in_edge(Block2, f); mature_block(Block2); jmp = new_Jmp(); add_in_edge(endBlock, jmp); /* Block 3 */ - Block3 = new_Block(); + Block3 = new_immBlock(); add_in_edge(Block3, t); mature_block(Block3); jmp = new_Jmp(); @@ -135,17 +143,18 @@ int main(int argc, char **argv) in[0] = get_value(0, mode_i); x = new_Return (get_store(), 1, in); } - mature_block (irg->current_block); + mature_block (get_irg_current_block(irg)); /* finish the Block with the end node */ - add_in_edge (irg->end_block, x); - mature_block (irg->end_block); - - printf("Optimizing ...\n"); - dead_node_elimination(irg); + add_in_edge (get_irg_end_block(irg), x); + mature_block (get_irg_end_block(irg)); /* verify the graph */ irg_vrfy(irg); + finalize_cons (irg); + + printf("Optimizing ...\n"); + dead_node_elimination(irg); printf("Dumping the graph and a control flow graph.\n"); dump_ir_block_graph (irg);