X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=testprograms%2Fdead_block_example.c;h=1809a4440f5d3b5000206ebf5e42d6245272d492;hb=a4c85aab2676bbb3138f042ed5bc27a6df8b1903;hp=a5ad8b6e0c99032e12dc9a89791dfaea5b3da46c;hpb=fb4e09c319ad22eb4623c289236a1511572756e2;p=libfirm diff --git a/testprograms/dead_block_example.c b/testprograms/dead_block_example.c index a5ad8b6e0..1809a4440 100644 --- a/testprograms/dead_block_example.c +++ b/testprograms/dead_block_example.c @@ -46,15 +46,16 @@ 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; /* typeinformation for the method main */ + type_method *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, *Block2, *deadBlock, *x; - /* init library */ init_firm (); + set_opt_cse(0); /* there is a bug: first and start block are cse!! @@@ */ + /* 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. @@ -65,7 +66,7 @@ int main(int argc, char **argv) #define METHODNAME "main" #define NRARGS 0 #define NRES 0 - printf("creating an IR graph: %s...\n", CLASSNAME); + 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)), @@ -78,67 +79,64 @@ int main(int argc, char **argv) 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); - - add_in_edge (irg->end_block, x); - mature_block (irg->end_block); + mature_block (get_irg_current_block(irg)); - /* verify the graph */ - vrfy_graph(irg); + add_in_edge (get_irg_end_block(irg), x); + mature_block (get_irg_end_block(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); }