X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=testprograms%2Farray-heap_example.c;h=6bd331c29f2ff5d5caa35f2d46b579414f9afd42;hb=aa430d14a092961d948a4a15effca64e51375938;hp=4698219e0b421b23dfc5063472748cf6b4f95e27;hpb=d61b4fcf547abba70184af32e2d3acc77531c623;p=libfirm diff --git a/testprograms/array-heap_example.c b/testprograms/array-heap_example.c index 4698219e0..6bd331c29 100644 --- a/testprograms/array-heap_example.c +++ b/testprograms/array-heap_example.c @@ -6,6 +6,10 @@ ** testprogram. */ +# include +# include + +# include "irvrfy.h" # include "irdump.h" # include "firm.h" @@ -44,26 +48,26 @@ int main(void) { /* describes the method main */ - type_class *owner; - type_method *proc_main; - entity *proc_main_e; + type *owner; + type *proc_main; + entity *proc_main_e; /* describes types defined by the language */ - type_primitive *prim_t_int; + type *prim_t_int; /* describes the array and its fields. */ - type_array *array_type; /* the type information for the array */ - entity *array_ent; /* the entity representing a field of the array */ + type *array_type; /* the type information for the array */ + entity *array_ent; /* the entity representing a field of the array */ /* Needed while finding the element size. */ - type_primitive *elt_type; - ir_mode *elt_type_mode; - int size; - ir_node *arr_size; + type *elt_type; + ir_mode *elt_type_mode; + int size; + ir_node *arr_size; /* holds the graph and nodes. */ - ir_graph *main_irg; - ir_node *array, *array_ptr, *c3, *elt, *val, *x; + ir_graph *main_irg; + ir_node *array, *array_ptr, *c3, *elt, *val, *x; init_firm (); @@ -87,22 +91,21 @@ 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, (union 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))); /* As the array is accessed by Sel nodes, we need information about the entity the node selects. Entities of an array are it's elements which are, in this case, integers. */ - array_ent = new_entity((type*)array_type, id_from_str("array_field", 11), - (type*)prim_t_int); + array_ent = get_array_element_entity(array_type); /* Allocate the array. All program known variables that are not modeled by dataflow edges need an explicit allocate node. If the variable shall be placed on the stack, set stack_alloc. */ /* first compute size in bytes. */ - elt_type = (type_primitive *)get_array_element_type(array_type); - if (! (elt_type->kind == k_type_primitive)) printf(" do something else\n"); - elt_type_mode = get_primitive_mode(elt_type); + elt_type = get_array_element_type(array_type); + elt_type_mode = get_type_mode(elt_type); /* better: read bounds out of array type information */ size = (U_BOUND - L_BOUND + 1) * get_mode_size(elt_type_mode); /* make constant representing the size */ @@ -110,7 +113,7 @@ main(void) /* allocate and generate the Proj nodes. */ array = new_Alloc(get_store(), arr_size, (type*)array_type, stack_alloc); set_store(new_Proj(array, mode_M, 0)); /* make the changed memory visible */ - array_ptr = new_Proj(array, mode_p, 1); /* remember the pointer to the array */ + array_ptr = new_Proj(array, mode_p, 2); /* remember the pointer to the array */ /* Now the "real" program: */ /* Load element 3 of the array. For this first generate the pointer to this @@ -126,7 +129,7 @@ main(void) } val = new_Load(get_store(), elt); set_store(new_Proj(val, mode_M, 0)); - val = new_Proj(val, mode_i, 1); + val = new_Proj(val, mode_i, 2); /* return the result of procedure main */ { @@ -141,6 +144,8 @@ main(void) add_in_edge (get_irg_end_block(main_irg), x); mature_block (get_irg_end_block(main_irg)); + finalize_cons (main_irg); + printf("Optimizing ...\n"); dead_node_elimination(main_irg);