X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=testprograms%2Fdead_block_example.c;h=e7513b8b4114017d5ff6c1e88710db018bc18e3f;hb=8e8fbe5556cfeeb18427f44dda1a66fa98939e1c;hp=6f329fb75a7bc76dc0c5f2fac11e972eb07a975d;hpb=c201fe69b5fcb5a8430afafe2e15946cab4e45c4;p=libfirm diff --git a/testprograms/dead_block_example.c b/testprograms/dead_block_example.c index 6f329fb75..e7513b8b4 100644 --- a/testprograms/dead_block_example.c +++ b/testprograms/dead_block_example.c @@ -1,13 +1,15 @@ /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe -** All rights reserved. -** -** Authors: Christian Schaefer, Goetz Lindenmaier -** -** testprogram. +* All rights reserved. +* +* Authors: Christian Schaefer, Goetz Lindenmaier +* +* testprogram. */ # include +# include +# include "irvrfy.h" # include "irdump.h" # include "firm.h" @@ -16,37 +18,38 @@ */ /** -*** This file constructs a control flow of following shape: -*** -*** -*** firstBlock -*** / \ -*** / \ -*** |/_ _\| -*** Block1 Block2 deadBlock -*** \ | / -*** \ | / -*** _\| \ / |/_ -*** nextBlock -*** -*** -*** This is a program as, e.g., -*** -*** if () then -*** { Jmp label1; } // happens anyways -*** else -*** { Jmp label1; } // happens anyways -*** label1: -*** return(); -*** Jmp label1; -*** +* This file constructs a control flow of following shape: +* +* +* firstBlock +* / \ +* / \ +* |/_ _\| +* Block1 Block2 deadBlock +* \ | / +* \ | / +* _\| \ / |/_ +* nextBlock +* +* +* This is a program as, e.g., +* +* if () then +* { Jmp label1; } // happens anyways +* else +* { Jmp label1; } // happens anyways +* label1: +* return(); +* Jmp label1; +* **/ 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,7 +57,8 @@ 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_Is); /* 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 @@ -65,23 +69,24 @@ int main(int argc, char **argv) #define CLASSNAME "DEAD_BLOCK" #define METHODNAME "main" #define NRARGS 0 -#define NRES 0 +#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); + get_entity_ld_name(ent); /* To enforce name mangling for vcg graph name */ #define NUM_OF_LOCAL_VARS 1 irg = new_ir_graph (ent, NUM_OF_LOCAL_VARS); /* 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)); + c1 = new_Const (mode_Is, tarval_from_long (mode_Is, 1)); + c2 = new_Const (mode_Is, tarval_from_long (mode_Is, 2)); set_value(0, c2); cond = new_Cond(new_Proj(new_Cmp(c1, c2), mode_b, Eq)); @@ -90,24 +95,24 @@ int main(int argc, char **argv) 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); 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); @@ -116,7 +121,7 @@ int main(int argc, char **argv) switch_block(endBlock); { ir_node *in[1]; - in[0] = get_value(0, mode_i); + in[0] = get_value(0, mode_Is); get_store(); x = new_Return (get_store(), 1, in); } @@ -125,6 +130,8 @@ int main(int argc, char **argv) add_in_edge (get_irg_end_block(irg), x); mature_block (get_irg_end_block(irg)); + finalize_cons (irg); + printf("Optimizing ...\n"); local_optimize_graph (irg); dead_node_elimination (irg);