X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=testprograms%2Farray-stack_example.c;h=edeeb67fc461e259454e0582367336e7837161ab;hb=4e0e64f9b07de6beae2fe3c9d606a2f0ef52af89;hp=f23d0801775e8d4eeec2de695df232d2e9a351e7;hpb=efbeaff549fcc6015da255ed4d453a95937ff0fd;p=libfirm diff --git a/testprograms/array-stack_example.c b/testprograms/array-stack_example.c index f23d08017..edeeb67fc 100644 --- a/testprograms/array-stack_example.c +++ b/testprograms/array-stack_example.c @@ -36,22 +36,22 @@ int main(void) { /* describes the general structure of a C-file */ - type_class *owner; /* the class standing for everything in this file */ - type_method *proc_main; /* Typeinformation for method main. */ + type *owner; /* the class standing for everything in this file */ + type *proc_main; /* Typeinformation for method main. */ entity *proc_main_e; /* The entity describing that method main is an entity of the fake class representing the file. */ /* describes types defined by the language */ - type_primitive *prim_t_int; + type *prim_t_int; /* describes the array and its fields. */ entity *array_ent; /* the entity representing the array as member of the stack/method */ - type_array *array_type; /* the type information for the array */ + type *array_type; /* the type information for the array */ entity *field_ent; /* the entity representing a field of the array */ /* Needed while finding the element size. */ - type_primitive *elt_type; + type *elt_type; ir_mode *elt_type_mode; int size; ir_node *arr_size; @@ -63,7 +63,7 @@ main(void) init_firm (); - printf("creating an IR graph: ARRAY-STACK_EXAMPLE...\n"); + printf("\nCreating an IR graph: ARRAY-STACK_EXAMPLE...\n"); /* make basic type information for primitive type int. In Sather primitive types are represented by a class. @@ -75,8 +75,8 @@ main(void) /* build typeinformation of procedure main */ owner = new_type_class (id_from_str ("ARRAY-STACK_EXAMPLE", 19)); proc_main = new_type_method(id_from_str("main", 4), 0, 1); - set_method_res_type(proc_main, 0, (type *)prim_t_int); - proc_main_e = new_entity ((type*)owner, id_from_str ("main", 4), (type *)proc_main); + set_method_res_type(proc_main, 0, prim_t_int); + proc_main_e = new_entity (owner, id_from_str ("main", 4), proc_main); main_irg = new_ir_graph (proc_main_e, 4); @@ -84,21 +84,22 @@ main(void) # define N_DIMS 1 # define L_BOUND 0 # define U_BOUND 9 - array_type = new_type_array(id_from_str("a", 1), N_DIMS); - set_array_bounds(array_type, 1, L_BOUND, U_BOUND); - set_array_element_type(array_type, (type*)prim_t_int); + array_type = new_type_array(id_from_str("a", 1), N_DIMS, prim_t_int); + set_array_bounds(array_type, 1, + new_Const(mode_I, tarval_from_long (mode_I, L_BOUND)), + new_Const(mode_I, tarval_from_long (mode_I, U_BOUND))); /* The array is an entity of the method, placed on the mehtod's own memory, the stack frame. */ - array_ent = new_entity((type *)proc_main, id_from_str("a", 1), (type *)array_type); + array_ent = get_array_element_entity(array_type); /* As the array is accessed by Sel nodes, we need information about the entity the node select. Entities of an array are it's elements which are, in this case, integers. */ /* change entity owner types. */ - field_ent = new_entity((type*)array_type, id_from_str("array_field", 11), (type*)prim_t_int); + field_ent = new_entity(array_type, id_from_str("array_field", 11), prim_t_int); /* Now the "real" program: */ /* Select the array from the stack frame. */ - array_ptr = new_simpleSel(get_store(), main_irg->frame, array_ent); + array_ptr = new_simpleSel(get_store(), get_irg_frame(main_irg), array_ent); /* Load element 3 of the array. For this first generate the pointer to this the element by a select node. (Alternative: increase array pointer by (three * elt_size), but this complicates some @@ -121,19 +122,24 @@ main(void) x = new_Return (get_store (), 1, in); } - mature_block (main_irg->current_block); + mature_block (get_irg_current_block(main_irg)); /* complete the end_block */ - add_in_edge (main_irg->end_block, x); - mature_block (main_irg->end_block); + add_in_edge (get_irg_end_block(main_irg), x); + mature_block (get_irg_end_block(main_irg)); + + printf("Optimizing ...\n"); + dead_node_elimination(main_irg); + + /* verify the graph */ + irg_vrfy(main_irg); + - printf("\nDone building the graph.\n"); printf("Dumping the graph and a type graph.\n"); dump_ir_block_graph (main_irg); dump_type_graph(main_irg); - - printf("\nuse xvcg to view these graphs:\n"); - printf("/ben/trapp/bin/i486/xvcg GRAPHNAME\n"); + printf("Use xvcg to view these graphs:\n"); + printf("/ben/goetz/bin/xvcg GRAPHNAME\n\n"); return (1); }