X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=testprograms%2Fdead_block_example.c;h=41d118df64e9ee28be7b0240b5c4ce015f184766;hb=e569ea0a211514dcb0d96207d2600dd0fb18e23b;hp=ad6c8ccc2d146b893fd8b407a2c4d34f251ddd89;hpb=925f67568de1f99930a2daf5de59f2e34cd62307;p=libfirm diff --git a/testprograms/dead_block_example.c b/testprograms/dead_block_example.c index ad6c8ccc2..41d118df6 100644 --- a/testprograms/dead_block_example.c +++ b/testprograms/dead_block_example.c @@ -45,8 +45,9 @@ int main(int argc, char **argv) { 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 */ + type *prim_t_int; entity *ent; /* represents this method as entity of owner */ ir_node *c1, *c2, *cond, *f, *t, *endBlock, *Block1, *jmp, *Block2, *deadBlock, *x; @@ -54,6 +55,11 @@ int main(int argc, char **argv) /* init library */ init_firm (); + set_opt_cse(0); /* there is a bug: first and start block are cse!! @@@ */ + + /*** 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. @@ -63,81 +69,81 @@ int main(int argc, char **argv) #define CLASSNAME "DEAD_BLOCK" #define METHODNAME "main" #define NRARGS 0 -#define NRES 0 - printf("creating an IR graph: %s...\n", CLASSNAME); +#define NRES 1 + printf("\nCreating an IR graph: %s...\n", CLASSNAME); owner = new_type_class (id_from_str (CLASSNAME, strlen(CLASSNAME))); proc_main = new_type_method(id_from_str(METHODNAME, strlen(METHODNAME)), NRARGS, NRES); - ent = new_entity ((type *)owner, + 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 1 irg = new_ir_graph (ent, NUM_OF_LOCAL_VARS); - /* two make a condition */ + /* to make a condition */ c1 = new_Const (mode_i, tarval_from_long (mode_i, 1)); c2 = new_Const (mode_i, tarval_from_long (mode_i, 2)); + set_value(0, c2); cond = new_Cond(new_Proj(new_Cmp(c1, c2), 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)); /* 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); jmp = new_Jmp(); add_in_edge(endBlock, jmp); /* Block 2 */ - Block2 = new_Block(); + Block2 = new_immBlock(); add_in_edge(Block2, f); mature_block(Block2); - set_value(0, c2); jmp = new_Jmp(); add_in_edge(endBlock, jmp); /* dead Block */ - deadBlock = new_Block(); + deadBlock = new_immBlock(); mature_block(deadBlock); jmp = new_Jmp(); add_in_edge(endBlock, jmp); + /* finish end block */ switch_block(endBlock); { ir_node *in[1]; in[0] = get_value(0, mode_i); + get_store(); x = new_Return (get_store(), 1, in); } - mature_block (irg->current_block); + mature_block (get_irg_current_block(irg)); - add_in_edge (irg->end_block, x); - mature_block (irg->end_block); + 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("\nDone building the graph.\n"); + printf("Optimizing ...\n"); local_optimize_graph (irg); - printf("\nDone local optimization.\n"); - set_opt_constant_folding (1); - set_optimize(0); - set_opt_cse(1); dead_node_elimination (irg); - printf("Dumping the graph and a control flow graph.\n"); + /* verify the graph */ + irg_vrfy(irg); + + printf("Dumping the graph and a control flow graph.\n"); dump_ir_block_graph (irg); dump_cfg (irg); - - printf("use xvcg to view these graphs:\n"); - printf("/ben/goetz/bin/xvcg GRAPHNAME\n"); + printf("Use xvcg to view these graphs:\n"); + printf("/ben/goetz/bin/xvcg GRAPHNAME\n\n"); return (0); }