- irg = new_ir_graph (ent, NUM_OF_LOCAL_VARS);
-
- /* two make three conditionals */
- expr = new_Const (mode_i, tarval_from_long (mode_i, 0));
- c1 = new_Const (mode_i, tarval_from_long (mode_i, 1));
- c2 = new_Const (mode_i, tarval_from_long (mode_i, 2));
- c3 = new_Const (mode_i, tarval_from_long (mode_i, 2));
-
- cond = new_Cond(new_Proj(new_Cmp(expr, c1), mode_b, Eq));
- f = new_Proj(cond, mode_X, 0);
- t = new_Proj(cond, mode_X, 1);
- mature_block(irg->current_block);
-
- loopBlock1 = new_Block();
- add_in_edge(loopBlock1, t);
- cond = new_Cond(new_Proj(new_Cmp(expr, c2), mode_b, Eq));
- f_l1 = new_Proj(cond, mode_X, 0);
- t_l1 = new_Proj(cond, mode_X, 1);
-
- loopBlock2 = new_Block();
- add_in_edge(loopBlock2, f);
- cond = new_Cond(new_Proj(new_Cmp(expr, c3), mode_b, Eq));
- f_l2 = new_Proj(cond, mode_X, 0);
- t_l2 = new_Proj(cond, mode_X, 1);
-
- add_in_edge(loopBlock1, t_l2);
- add_in_edge(loopBlock2, t_l1);
- mature_block(loopBlock1);
- mature_block(loopBlock2);
-
- new_Block();
- add_in_edge(irg->current_block, f_l2);
- add_in_edge(irg->current_block, f_l1);
- {
- ir_node *in[0];
- x = new_Return (get_store(), 1, in);
+ owner = new_type_class(new_id_from_str(CLASSNAME));
+ printf("\nCreating testprogram: %s...\n", CLASSNAME);
+ proc_tp = new_type_method(new_id_from_str(METHOD_TP_NAME), NRARGS, NRES);
+
+ /* --- method loop1 ------------------------------------------------------ */
+
+#define METHODNAME "loop1"
+
+ ent = new_entity(owner, new_id_from_str(METHODNAME), proc_tp);
+ get_entity_ld_name(ent); /* To enforce name mangling for vcg graph name */
+
+ irg = new_ir_graph(ent, NUM_OF_LOCAL_VARS);
+
+ /* to make three conditionals */
+ expr = new_Const(mode_Is, new_tarval_from_long(0, mode_Is));
+ c1 = new_Const(mode_Is, new_tarval_from_long(1, mode_Is));
+ c2 = new_Const(mode_Is, new_tarval_from_long(2, mode_Is));
+ c3 = new_Const(mode_Is, new_tarval_from_long(2, mode_Is));
+
+ cond = new_Cond(new_Proj(new_Cmp(expr, c1), mode_b, pn_Cmp_Eq));
+ f = new_Proj(cond, mode_X, pn_Cond_false);
+ t = new_Proj(cond, mode_X, pn_Cond_true);
+ mature_immBlock(get_irg_current_block(irg));
+
+ loopBlock1 = new_immBlock();
+ add_immBlock_pred(loopBlock1, t);
+ cond = new_Cond(new_Proj(new_Cmp(expr, c2), mode_b, pn_Cmp_Eq));
+ f_l1 = new_Proj(cond, mode_X, pn_Cond_false);
+ t_l1 = new_Proj(cond, mode_X, pn_Cond_true);
+
+ loopBlock2 = new_immBlock();
+ add_immBlock_pred(loopBlock2, f);
+ cond = new_Cond(new_Proj(new_Cmp(expr, c3), mode_b, pn_Cmp_Eq));
+ f_l2 = new_Proj(cond, mode_X, pn_Cond_false);
+ t_l2 = new_Proj(cond, mode_X, pn_Cond_true);
+
+ add_immBlock_pred(loopBlock1, t_l2);
+ add_immBlock_pred(loopBlock2, t_l1);
+ mature_immBlock(loopBlock1);
+ mature_immBlock(loopBlock2);
+
+ new_immBlock();
+ add_immBlock_pred(get_irg_current_block(irg), f_l2);
+ add_immBlock_pred(get_irg_current_block(irg), f_l1);
+ x = new_Return(get_store(), 0, NULL);
+ mature_immBlock(get_irg_current_block(irg));
+
+ add_immBlock_pred(get_irg_end_block(irg), x);
+ mature_immBlock(get_irg_end_block(irg));
+
+ irg_finalize_cons(irg);
+
+ /* --- method loop2 ------------------------------------------------------ */
+
+#undef METHODNAME
+#define METHODNAME "loop2"
+
+ ent = new_entity(owner, new_id_from_str(METHODNAME), proc_tp);
+ get_entity_ld_name(ent); /* To enforce name mangling for vcg graph name */
+
+ irg = new_ir_graph(ent, NUM_OF_LOCAL_VARS);
+
+ /* to make several conditionals */
+ expr = new_Const(mode_Is, new_tarval_from_long(0, mode_Is));
+ c1 = new_Const(mode_Is, new_tarval_from_long(1, mode_Is));
+ c2 = new_Const(mode_Is, new_tarval_from_long(2, mode_Is));
+ c3 = new_Const(mode_Is, new_tarval_from_long(3, mode_Is));
+ c4 = new_Const(mode_Is, new_tarval_from_long(4, mode_Is));
+ c5 = new_Const(mode_Is, new_tarval_from_long(5, mode_Is));
+
+ cond = new_Cond(new_Proj(new_Cmp(expr, c1), mode_b, pn_Cmp_Eq));
+ f2 = new_Proj(cond, mode_X, pn_Cond_false);
+ t = new_Proj(cond, mode_X, pn_Cond_true);
+ mature_immBlock(get_irg_current_block(irg));
+
+ new_immBlock();
+ add_immBlock_pred(get_irg_current_block(irg), t);
+ cond = new_Cond(new_Proj(new_Cmp(expr, c5), mode_b, pn_Cmp_Eq));
+ f = new_Proj(cond, mode_X, pn_Cond_false);
+ t = new_Proj(cond, mode_X, pn_Cond_true);
+ mature_immBlock(get_irg_current_block(irg));
+
+ loopBlock1 = new_immBlock();
+ add_immBlock_pred(loopBlock1, t);
+ cond = new_Cond(new_Proj(new_Cmp(expr, c2), mode_b, pn_Cmp_Eq));
+ f_l1 = new_Proj(cond, mode_X, pn_Cond_false);
+ t_l1 = new_Proj(cond, mode_X, pn_Cond_true);
+
+ loopBlock2 = new_immBlock();
+ add_immBlock_pred(loopBlock2, f);
+ cond = new_Cond(new_Proj(new_Cmp(expr, c3), mode_b, pn_Cmp_Eq));
+ f_l2 = new_Proj(cond, mode_X, pn_Cond_false);
+ t_l2 = new_Proj(cond, mode_X, pn_Cond_true);
+
+ loopBlock3 = new_immBlock();
+ add_immBlock_pred(loopBlock3, f2);
+ cond = new_Cond(new_Proj(new_Cmp(expr, c4), mode_b, pn_Cmp_Eq));
+ f_l3 = new_Proj(cond, mode_X, pn_Cond_false);
+ t_l3 = new_Proj(cond, mode_X, pn_Cond_true);
+
+ add_immBlock_pred(loopBlock1, t_l2);
+ add_immBlock_pred(loopBlock2, t_l1);
+ add_immBlock_pred(loopBlock3, f_l2);
+ add_immBlock_pred(loopBlock2, t_l3);
+ mature_immBlock(loopBlock1);
+ mature_immBlock(loopBlock2);
+ mature_immBlock(loopBlock3);
+
+ new_immBlock();
+ add_immBlock_pred(get_irg_current_block(irg), f_l1);
+ add_immBlock_pred(get_irg_current_block(irg), f_l3);
+ x = new_Return(get_store(), 0, NULL);
+ mature_immBlock(get_irg_current_block(irg));
+
+ add_immBlock_pred(get_irg_end_block(irg), x);
+ mature_immBlock(get_irg_end_block(irg));
+
+ irg_finalize_cons(irg);
+
+ /* --- more ... ------------------------------------------------------ */
+
+ printf("Optimizing ...\n");
+
+ for (i = 0; i < get_irp_n_irgs(); ++i) {
+ current_ir_graph = get_irp_irg(i);
+ /* verify the graph */
+ irg_vrfy(current_ir_graph);
+ construct_cf_backedges(current_ir_graph);
+ dump_loop_tree(current_ir_graph, "");
+
+ printf("Dumping the graph and a control flow graph.\n");
+ dump_ir_block_graph(current_ir_graph, "");
+ dump_cfg(current_ir_graph, "");
+ printf("Use ycomp to view these graphs:\n");
+ printf("ycomp GRAPHNAME\n\n");