DBG_OPT_EXC_REM() used, remove exception edges from Load and Store if it can be prove...
[libfirm] / testprograms / loop_unroll_example.c
index a66dea6..d90454b 100644 (file)
@@ -49,7 +49,7 @@
 
 static int i_pos = 0;
 static int arr_pos = 1;
-static type *typ, *typ2;
+static ir_type *typ, *typ2;
 
 static ir_node *r1, *f, *r, *c2;
 
@@ -72,29 +72,29 @@ typedef enum {
  * @param fct_name     the name of the function
  * @param loop_dir     the loop direction
  */
-static void function_begin(type *owner, type *mtp, char *fct_name, loop_dir_t loop_dir) {
+static void function_begin(ir_type *owner, ir_type *mtp, char *fct_name, loop_dir_t loop_dir) {
   symconst_symbol sym;
   ir_node *x, *t, *cmp;
 
   int start_value, end_value;
-  pnc_number cmp_dir;
+  pn_Cmp cmp_dir;
 
   if (loop_dir == loop_forward) {
     start_value = 0;
     end_value   = 11;
-    cmp_dir     = Ge;
+    cmp_dir     = pn_Cmp_Ge;
   }
   else {
     start_value = 10;
     end_value   = 0;
-    cmp_dir     = Lt;
+    cmp_dir     = pn_Cmp_Lt;
   }
 
   /* The entity for the procedure */
   entity *ent = new_entity (owner,  new_id_from_str(fct_name), mtp);
 
   /* make type infromation for the array */
-  type *array_type = new_type_array(new_id_from_str("array"), N_DIMS, typ);
+  ir_type *array_type = new_type_array(new_id_from_str("array"), N_DIMS, typ);
 
   /* set the bounds for the array */
   set_array_bounds_int(array_type, 0, L_BOUND, U_BOUND);
@@ -175,9 +175,9 @@ int
 main(void)
 {
   ir_graph *irg;
-  type *owner;
+  ir_type *owner;
   entity *ent, *array_ent, *array_ent2;
-  type *proc_tp, *array_type, *array_type2; /* type information for the method main */
+  ir_type *proc_tp, *array_type, *array_type2; /* type information for the method main */
   ir_node *x,*x1 ,  *r, *t, *f, *f1, *t1, *cmp, *r1, *r2;
   int i_pos;
 
@@ -187,7 +187,7 @@ main(void)
 
   arch_dep_set_opts(arch_dep_none);
 
-  do_node_verification(NODE_VERIFICATION_REPORT);
+  do_node_verification(FIRM_VERIFICATION_REPORT);
 
   typ = new_type_primitive(new_id_from_chars(PRIM_NAME, strlen(PRIM_NAME)), mode_Is);
 
@@ -247,7 +247,7 @@ main(void)
   r1 = new_immBlock();
   add_immBlock_pred(get_irg_current_block(irg), x);
   cmp = new_Cmp(new_Const_int(10), get_value(i_pos, mode_Is));
-  x = new_Cond(new_Proj(cmp, mode_b, Gt));
+  x = new_Cond(new_Proj(cmp, mode_b, pn_Cmp_Gt));
   f = new_Proj(x, mode_X, 0);
   t = new_Proj(x, mode_X, 1);
 
@@ -286,7 +286,7 @@ main(void)
   ir_node *b1 = new_Const_int(45);
   add_immBlock_pred(get_irg_current_block(irg), f);
   cmp = new_Cmp(new_Const_int(0), b1);
-  x = new_Cond (new_Proj(cmp, mode_b, Lt));
+  x = new_Cond (new_Proj(cmp, mode_b, pn_Cmp_Lt));
   f1 = new_Proj (x, mode_X, 0);
   t1 = new_Proj (x, mode_X, 1);
 
@@ -436,13 +436,34 @@ main(void)
   printf("Done building the graph.  Dumping and optimizing it.\n");
   dump_consts_local(1);
   turn_off_edge_labels();
+
+
+#if 1   /* Use this version for testing.  Loop unrolling creates random node numbers,
+          therefore we can not compare test graphs. */
   for (i = 0; i < n_irgs; ++i) {
     current_ir_graph = get_irp_irg(i);
     irg_vrfy(current_ir_graph);
-    finalize_cons (current_ir_graph);
+    irg_finalize_cons (current_ir_graph);
+
+    construct_backedges(current_ir_graph);
+
+    set_opt_strength_red_verbose(2);
+    set_firm_verbosity(2);
+    set_optimize(0);
+    set_opt_loop_unrolling(1);
+    optimize_loop_unrolling(current_ir_graph);
+
+    irg_vrfy(current_ir_graph);
+  }
+#else
+  for (i = 0; i < n_irgs; ++i) {
+    current_ir_graph = get_irp_irg(i);
+    irg_vrfy(current_ir_graph);
+    irg_finalize_cons (current_ir_graph);
 
     /* output the vcg file */
     dump_ir_block_graph (current_ir_graph, 0);
+
     construct_backedges(current_ir_graph);
     dump_ir_graph (current_ir_graph, 0);
     dump_all_types(0);
@@ -463,6 +484,7 @@ main(void)
     dump_ir_block_graph (current_ir_graph, "-loop-unrolling");
     // dump_ir_graph (current_ir_graph, "-pure-loop-unrolling");
   }
+#endif
   //printf("use xvcg to view this graph:\n");
   //printf("/ben/goetz/bin/xvcg GRAPHNAME\n\n");