* Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
*/
-# include <stdio.h>
-# include <string.h>
-# include <reassoc.h>
-# include "firm.h"
-
-# include "irvrfy.h"
-# include "irdump.h"
+#include <stdio.h>
+#include <string.h>
+#include <libfirm/firm.h>
/**
* This file constructs the ir for the following pseudo-program:
#define L_BOUND 0
#define U_BOUND 10
#define N_DIMS 1
- /** The type int. **/
+ /** The ir_type int. **/
#define PRIM_NAME "int"
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;
typedef enum {
loop_forward,
- loop_backward,
+ loop_backward
} loop_dir_t;
/**
*
* After return, the loop body is the current block.
*
- * @param owner owner-type of this (method-)function
- * @param mtp the method type of this function
+ * @param owner owner-ir_type of this (method-)function
+ * @param mtp the method ir_type of this function
* @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;
+ ir_entity *ent;
+ ir_entity *array_ent;
+ ir_type *array_type;
int start_value, end_value;
- pnc_number cmp_dir;
+ pn_Cmp cmp_dir;
if (loop_dir == loop_forward) {
start_value = 0;
end_value = 10;
- cmp_dir = Gt;
+ cmp_dir = pn_Cmp_Gt;
}
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);
+ /* The ir_entity for the procedure */
+ 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);
+ /* make ir_type infromation for the array */
+ 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);
- /* The array is an entity of the owner type */
- entity *array_ent = new_entity(owner, new_id_from_str("a"), array_type);
+ /* The array is an ir_entity of the owner ir_type */
+ array_ent = new_entity(owner, new_id_from_str("a"), array_type);
/** The code of the procedure **/
set_value(i_pos, new_Const_int(start_value));
sym.entity_p = array_ent;
- set_value(arr_pos, new_SymConst(sym, symconst_addr_ent));
+ set_value(arr_pos, new_SymConst(mode_P, sym, symconst_addr_ent));
x = new_Jmp();
/* We know all predecessors of the block and all set_values and set_stores are
cmp = new_Cmp(new_Const_int(end_value), get_value(i_pos, mode_Is));
x = new_Cond(new_Proj(cmp, mode_b, cmp_dir));
- f = new_Proj(x, mode_X, 0);
- t = new_Proj(x, mode_X, 1);
+ f = new_Proj(x, mode_X, pn_Cond_false);
+ t = new_Proj(x, mode_X, pn_Cond_true);
/* generate and fill the loop body block */
r = new_immBlock();
}
int x;
-static int y;
/**
* finishes a builded function.
*/
static void function_end(ir_node *b) {
ir_node *x = new_Jmp();
- mature_immBlock (r);
+ mature_immBlock(r);
add_immBlock_pred(r1, x);
new_immBlock();
add_immBlock_pred(get_cur_block(), f);
- mature_immBlock (get_cur_block());
+ mature_immBlock(get_cur_block());
/* The Return statement */
{
ir_node *in[1], *store ;
main(void)
{
ir_graph *irg;
- type *owner;
- entity *ent, *array_ent, *array_ent2;
- type *proc_tp, *array_type, *array_type2; /* type information for the method main */
+ ir_type *owner;
+ ir_entity *ent, *array_ent, *array_ent2;
+ ir_type *proc_tp, *array_type, *array_type2; /* ir_type information for the method main */
ir_node *x,*x1 , *r, *t, *f, *f1, *t1, *cmp, *r1, *r2;
+ ir_node *d2, *res2, *res3, *res5, *res7;
int i_pos;
+ int i, n_irgs;
+ ir_node *b, *c, *c1, *d, *res;
+ ir_node *b1, *b2, *b3, *b4, *b7, *block;
+ ir_node *mul, *q, *q1;
+ ir_node *mul4;
+ symconst_symbol sym, sym2;
printf("\nCreating an IR graph: IF_EXAMPLE...\n");
- init_firm (NULL);
+ init_firm(NULL);
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);
/* --------------------------------------------------------------------- */
- /* The entity for the procedure */
- ent = new_entity (owner,
- new_id_from_str (METHODNAME1),
- proc_tp);
+ /* The ir_entity for the procedure */
+ ent = new_entity(owner,
+ new_id_from_str(METHODNAME1),
+ proc_tp);
/* The parameter and result types of the procedure. */
- /* make type infromation for the array */
+ /* make ir_type infromation for the array */
array_type = new_type_array(new_id_from_chars("array", 5),N_DIMS, typ);
array_type2 = new_type_array(new_id_from_chars("array2", 6),N_DIMS, typ2);
/* set the bounds for the array */
set_array_bounds_int(array_type, 0, L_BOUND, U_BOUND);
set_array_bounds_int(array_type2, 0, L_BOUND, U_BOUND);
- /* The array is an entity of the global typ */
+ /* The array is an ir_entity of the global typ */
array_ent = new_entity( owner, new_id_from_str("a"), array_type);
array_ent2 = new_entity( owner, new_id_from_str("a2"), array_type2);
/* Generate the constant and assign it to b. The assignment is resovled to a
dataflow edge. */
- set_value (i_pos, new_Const_int(0));
- x = new_Jmp ();
+ set_value(i_pos, new_Const_int(0));
+ x = new_Jmp();
/* We know all predecessors of the block and all set_values and set_stores are
preformed. We can mature the block. */
- mature_immBlock (get_irg_current_block(irg));
+ mature_immBlock(get_irg_current_block(irg));
/* Generate a conditional branch */
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));
- f = new_Proj(x, mode_X, 0);
- t = new_Proj(x, mode_X, 1);
+ x = new_Cond(new_Proj(cmp, mode_b, pn_Cmp_Gt));
+ f = new_Proj(x, mode_X, pn_Cond_false);
+ t = new_Proj(x, mode_X, pn_Cond_true);
/* generate and fill the then block */
- r = new_immBlock ();
- add_immBlock_pred (r, t);
+ r = new_immBlock();
+ add_immBlock_pred(r, t);
- ir_node *b, *c, *d, *res;
- symconst_symbol sym, sym2;
c = new_Const_int(1);
b = new_Const_int(4);
- ir_node *b2 = new_Const_int(12);
+ b2 = new_Const_int(12);
sym.entity_p = array_ent ;
sym2.entity_p = array_ent2 ;
- d = new_SymConst(sym, symconst_addr_ent);
- ir_node *d2 = new_SymConst(sym2, symconst_addr_ent);
+ d = new_SymConst(mode_P, sym, symconst_addr_ent);
+ d2 = new_SymConst(mode_P, sym2, symconst_addr_ent);
res = new_Add(d, new_Mul(get_value(i_pos, mode_Is), b, mode_Is), mode_P);
- //ir_node *res2 = new_Add(d2, get_value(i_pos, mode_Is), mode_P);
- ir_node *res2 = new_Add(d2, new_Mul(get_value(i_pos, mode_Is), b2, mode_Is), mode_P);
- //res2 = new_Add(res2, new_Const_int(12), mode_P);
- set_store (new_Proj(new_Store(get_store(), res, new_Const_int(19)), mode_M, 0));
- set_store (new_Proj(new_Store(get_store(), res2, new_Const_int(16)), mode_M, 0));
- d = new_SymConst(sym, symconst_addr_ent);
+ res2 = new_Add(d2, new_Mul(get_value(i_pos, mode_Is), b2, mode_Is), mode_P);
+ set_store(new_Proj(new_Store(get_store(), res, new_Const_int(19)), mode_M, pn_Store_M));
+ set_store(new_Proj(new_Store(get_store(), res2, new_Const_int(16)), mode_M, pn_Store_M));
+ d = new_SymConst(mode_P, sym, symconst_addr_ent);
res = new_Add(d, new_Mul(get_value(i_pos, mode_Is), b, mode_Is), mode_P);
- set_store(new_Proj(new_Store(get_store(), res, new_Const_int(15)), mode_M, 0));
+ set_store(new_Proj(new_Store(get_store(), res, new_Const_int(15)), mode_M, pn_Store_M));
set_value(i_pos, new_Add(get_value(i_pos, mode_Is), c, mode_Is));
mature_immBlock(r1);
r2 = new_immBlock();
- ir_node *b1 = new_Const_int(45);
+ 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));
- f1 = new_Proj (x, mode_X, 0);
- t1 = new_Proj (x, mode_X, 1);
+ x = new_Cond(new_Proj(cmp, mode_b, pn_Cmp_Lt));
+ f1 = new_Proj(x, mode_X, pn_Cond_false);
+ t1 = new_Proj(x, mode_X, pn_Cond_true);
- ir_node *block = new_immBlock();
+ block = new_immBlock();
add_immBlock_pred(block, t1);
- b1 = new_Sub (b1, get_value(i_pos, mode_Is), mode_Is);
+ b1 = new_Sub(b1, get_value(i_pos, mode_Is), mode_Is);
res = new_Add(d, new_Mul(get_value(i_pos, mode_Is), b, mode_Is), mode_P);
- set_store(new_Proj(new_Store(get_store(), res, new_Const_int(19)), mode_M, 0));
+ set_store(new_Proj(new_Store(get_store(), res, new_Const_int(19)), mode_M, pn_Store_M));
set_value(i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
x1 = new_Jmp();
/* -------------------------------------------------------------------------------- */
function_begin(owner, proc_tp, METHODNAME2, loop_forward);
- ir_node *mul, *q;
q = new_Const_int(15);
- ir_node *q1 = new_Const_int(13);
+ q1 = new_Const_int(13);
c = new_Const_int(1);
b = new_Const_int(4);
mul = new_Mul(q, get_value(i_pos, mode_Is), mode_Is);
res = new_Add(get_value(arr_pos, mode_P), new_Mul(get_value(i_pos, mode_Is), b, mode_Is), mode_P);
res = new_Add(q1, res, mode_P);
- set_store(new_Proj(new_Store (get_store(), res, mul), mode_M, 0));
+ set_store(new_Proj(new_Store(get_store(), res, mul), mode_M, pn_Store_M));
set_value(i_pos, new_Add(get_value(i_pos, mode_Is), c, mode_Is));
c = new_Const_int(1);
b = new_Const_int(4);
- ir_node *b3 = new_Const_int(8);
+ b3 = new_Const_int(8);
res = new_Add(get_value(arr_pos, mode_P), new_Mul(get_value(i_pos, mode_Is), b, mode_Is), mode_P);
res = new_Add(b, res, mode_P);
res = new_Add(b3, res, mode_P);
- ir_node *res3 = new_Add(b3, res, mode_P);
+ res3 = new_Add(b3, res, mode_P);
res = new_Add(res3, res, mode_P);
- set_store(new_Proj(new_Store(get_store(), res, get_value(i_pos, mode_Is)), mode_M, 0));
+ set_store(new_Proj(new_Store(get_store(), res, get_value(i_pos, mode_Is)), mode_M, pn_Store_M));
set_value(i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
c = new_Const_int(1);
b = new_Const_int(4);
- ir_node *b4 = new_Const_int(8);
+ b4 = new_Const_int(8);
set_value(i_pos, new_Add(get_value(i_pos, mode_Is), c, mode_Is));
- ir_node *mul4 = new_Mul(get_value(i_pos, mode_Is), b4, mode_Is);
+ mul4 = new_Mul(get_value(i_pos, mode_Is), b4, mode_Is);
res = new_Add(mul4, get_value(arr_pos, mode_P), mode_P);
- set_store (new_Proj (new_Store (get_store (), res,get_value(i_pos, mode_Is)),
- mode_M, 0));
+ set_store(new_Proj(new_Store(get_store(), res,get_value(i_pos, mode_Is)),
+ mode_M, pn_Store_M));
res = new_Add(get_value(arr_pos, mode_P), new_Mul(get_value(i_pos, mode_Is), b, mode_Is), mode_P);
- set_store(new_Proj(new_Store(get_store(), res, get_value(i_pos, mode_Is)), mode_M, 0));
+ set_store(new_Proj(new_Store(get_store(), res, get_value(i_pos, mode_Is)), mode_M, pn_Store_M));
function_end(b);
set_value(i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
- ir_node * res5 = new_Add (c, b, mode_Is);
+ res5 = new_Add(c, b, mode_Is);
res = new_Add(get_value(arr_pos, mode_P), new_Mul(get_value(i_pos, mode_Is), b, mode_Is), mode_P);
res = new_Add(res, b, mode_P);
res = new_Add(res, res5, mode_P);
- set_store(new_Proj(new_Store(get_store(), res, new_Const_int(19)), mode_M, 0));
+ set_store(new_Proj(new_Store(get_store(), res, new_Const_int(19)), mode_M, pn_Store_M));
function_end(b);
function_begin(owner, proc_tp, METHODNAME6, loop_forward);
c = new_Const_int(1);
- ir_node *c1 = new_Const_int(5);
+ c1 = new_Const_int(5);
b = new_Const_int(4);
set_value(i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
res = new_Sub(c1, res, mode_P);
res = new_Add( b, res, mode_P);
res = new_Add(b, res, mode_P);
- set_store(new_Proj(new_Store(get_store(), res, new_Const_int(19)), mode_M, 0));
+ set_store(new_Proj(new_Store(get_store(), res, new_Const_int(19)), mode_M, pn_Store_M));
function_end(b);
c = new_Const_int(1);
b = new_Const_int(4);
- ir_node *b7 = new_Const_int(19);
+ b7 = new_Const_int(19);
- // a[i] = a[i+4]
res = get_value(i_pos, mode_Is);
res = new_Add(res, b, mode_Is);
res = new_Add(res, b7, mode_Is);
res = new_Mul(res, b, mode_Is);
res = new_Add(get_value(arr_pos, mode_P), res, mode_P);
- ir_node *res7 = new_Add( get_value(i_pos, mode_Is), b7, mode_Is);
- set_store(new_Proj(new_Store(get_store(), res, res7), mode_M, 0));
+ res7 = new_Add( get_value(i_pos, mode_Is), b7, mode_Is);
+ set_store(new_Proj(new_Store(get_store(), res, res7), mode_M, pn_Store_M));
set_value(i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
function_end(b);
/* -------------------------------------------------------------------------- */
- int i, n_irgs = get_irp_n_irgs();
+ n_irgs = get_irp_n_irgs();
printf("Done building the graph. Dumping and optimizing it.\n");
dump_consts_local(1);
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);
/* output the vcg file */
- //dump_ir_block_graph (current_ir_graph, "-early");
construct_backedges(current_ir_graph);
- dump_ir_block_graph (current_ir_graph, 0);
+ dump_ir_block_graph(current_ir_graph, 0);
dump_all_types(0);
- set_opt_strength_red_verbose(0);
- set_firm_verbosity(0);
optimize_reassociation(current_ir_graph);
- reduce_strength(current_ir_graph);
+ opt_osr(current_ir_graph, osr_flag_default);
- // remove_critical_cf_edges(current_ir_graph);
- //set_opt_global_cse(1);
- //place_code(current_ir_graph);
- //set_opt_global_cse(0);
- // optimize_reassociation(current_ir_graph);
+#if 0
+ remove_critical_cf_edges(current_ir_graph);
+ set_opt_global_cse(1);
+ place_code(current_ir_graph);
+ set_opt_global_cse(0);
+ optimize_reassociation(current_ir_graph);
+#endif
dump_loop_tree(current_ir_graph, "");
- dump_ir_block_graph (current_ir_graph, "-strength_reduced");
+ dump_ir_block_graph(current_ir_graph, "-strength_reduced");
}
- //printf("use xvcg to view this graph:\n");
- //printf("/ben/goetz/bin/xvcg GRAPHNAME\n\n");
+ printf("Use ycomp to view the graphs\n");
- return (0);
+ return 0;
}