*** empty log message ***
[libfirm] / testprograms / array-heap_example.c
index 9750b78..b445639 100644 (file)
@@ -44,26 +44,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 ();
 
@@ -74,7 +74,7 @@ main(void)
      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();
@@ -87,30 +87,29 @@ 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) * 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. */
   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 +125,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 */
   {
@@ -135,22 +134,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));
+
+  finalize_cons (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/goetz/bin/xvcg GRAPHNAME\n");
+  printf("use xvcg to view these graphs:\n");
+  printf("/ben/goetz/bin/xvcg GRAPHNAME\n\n");
 
   return (1);
 }