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 ();
32 bit integer value. */
prim_t_int = new_type_primitive(id_from_str ("int", 3), mode_i);
- printf("creating an IR graph: ARRAY-HEAP_EXAMPLE...\n");
+ printf("\nCreating an IR graph: ARRAY-HEAP_EXAMPLE...\n");
/* first build procedure main */
owner = get_glob_type();
# 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) * elt_type_mode->size;
+ size = (U_BOUND - L_BOUND + 1) * get_mode_size(elt_type_mode);
/* make constant representing the size */
arr_size = new_Const(mode_I, tarval_from_long (mode_I, size));
/* allocate and generate the Proj nodes. */
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");
+ printf("use xvcg to view these graphs:\n");
+ printf("/ben/goetz/bin/xvcg GRAPHNAME\n\n");
return (1);
}