X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=testprograms%2Farray-stack_example.c;h=722124b86da5909b5c8e99f9d02b5df8d150ef4d;hb=b4eb108c1ed94e9945ef56e7c89ac866594f7cb0;hp=1cad063425c2327d69307dc881b6c3d6926d3370;hpb=4ea1df63a99fe3e9bf8f0395cdf33c39d4a2c677;p=libfirm diff --git a/testprograms/array-stack_example.c b/testprograms/array-stack_example.c index 1cad06342..722124b86 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. @@ -74,9 +74,9 @@ 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); + proc_main = new_type_method(id_from_str("main_tp", 4), 0, 1); + 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,24 @@ 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_tp", 4), 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 = new_entity(get_cur_frame_type(), id_from_str("a", 1), 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 + the entity the node selects. 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 = get_array_element_entity(array_type); + + /* 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,22 +124,25 @@ 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 */ - vrfy_graph(main_irg); + 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/goetz/bin/xvcg GRAPHNAME\n"); + dump_ir_block_graph_w_types(main_irg); + printf("Use xvcg to view these graphs:\n"); + printf("/ben/goetz/bin/xvcg GRAPHNAME\n\n"); return (1); }