* }
**/
+#define new_Const_int(n) new_Const(mode_Is, new_tarval_from_long(n, mode_Is))
+
+
#define CLASSNAME "STRENGTH_RED_EXAMPLE"
#define METHODNAME1 "STRENGTH_RED_EXAMPLE_m1"
#define METHODNAME2 "STRENGTH_RED_EXAMPLE_m2"
loop_backward,
} loop_dir_t;
+/**
+ * Constructs a new (method-)function of the form
+ *
+ * typ fct_name(typ arg) {
+ * for (i = start_value; i < end_value;) { ... }
+ * }
+ *
+ * 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 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) {
symconst_symbol sym;
ir_node *x, *t, *cmp;
+
+ int start_value, end_value;
+ pnc_number cmp_dir;
+
+ if (loop_dir == loop_forward) {
+ start_value = 0;
+ end_value = 10;
+ cmp_dir = Gt;
+ }
+ else {
+ start_value = 10;
+ end_value = 0;
+ cmp_dir = Lt;
+ }
+
/* The entity for the procedure */
- entity *ent = new_entity (owner, new_id_from_str (fct_name), mtp);
- /* The parameter and result types of the procedure. */
- set_method_param_type(mtp, 0, typ);
- set_method_res_type(mtp, 0, typ);
+ 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_chars("array", 5),N_DIMS, typ);
+ type *array_type = new_type_array(new_id_from_str("array"), N_DIMS, typ);
/* set the bounds for the array */
- set_array_bounds(array_type, 0,
- new_Const(mode_Iu, new_tarval_from_long (L_BOUND, mode_Iu)),
- new_Const(mode_Iu, new_tarval_from_long (U_BOUND, mode_Iu)));
- /* The array is an entity of the global typ */
- entity *array_ent = new_entity( owner, new_id_from_chars("a", 1), array_type);
+ 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 code of the procedure **/
/* Generates start and end blocks and nodes, and a first, initial block */
#define NRLOCS 2
- new_ir_graph (ent, NRLOCS);
+ new_ir_graph(ent, NRLOCS);
/* The value position used for: */
i_pos = 0;
- if(fct_name == METHODNAME7)
- c2 = new_Const (mode_Is, new_tarval_from_long (5, mode_Is));
+ if (fct_name == METHODNAME7)
+ c2 = new_Const_int(5);
/* Generate the constant and assign it to b. The assignment is resolved to a
dataflow edge. */
- if (loop_dir == loop_forward) {
- set_value (i_pos, new_Const (mode_Is, new_tarval_from_long (0, mode_Is)));
- } else {
- set_value (i_pos, new_Const (mode_Is, new_tarval_from_long (10, mode_Is)));
- }
- sym.entity_p = array_ent ;
- set_value (arr_pos, new_SymConst(sym, symconst_addr_ent));
- x = new_Jmp ();
+ set_value(i_pos, new_Const_int(start_value));
+
+ sym.entity_p = array_ent;
+ set_value(arr_pos, new_SymConst(sym, symconst_addr_ent));
+ 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(current_ir_graph));
+ mature_immBlock(get_irg_current_block(current_ir_graph));
/* Generate a conditional branch */
r1 = new_immBlock();
add_immBlock_pred(get_irg_current_block(current_ir_graph), x);
- if (loop_dir == loop_forward) {
- cmp = new_Cmp(new_Const (mode_Is, new_tarval_from_long(10, mode_Is)),
- get_value(i_pos, mode_Is));
- x = new_Cond (new_Proj(cmp, mode_b, Gt));
- } else {
- cmp = new_Cmp(new_Const (mode_Is, new_tarval_from_long(0, mode_Is)),
- get_value(i_pos, mode_Is));
- x = new_Cond (new_Proj(cmp, mode_b, Lt));
- }
- f = new_Proj (x, mode_X, 0);
- t = new_Proj (x, mode_X, 1);
+ 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);
/* generate and fill the loop body block */
- r = new_immBlock ();
- add_immBlock_pred (r, t);
+ r = new_immBlock();
+ add_immBlock_pred(r, t);
}
int x;
static int y;
+/**
+ * finishes a builded function.
+ *
+ * @param b the return value
+ */
static void function_end(ir_node *b) {
- ir_node *x = new_Jmp ();
+ ir_node *x = new_Jmp();
mature_immBlock (r);
add_immBlock_pred(r1, x);
in[0] = b;
store = get_store();
- x = new_Return (store, 1, in);
+ x = new_Return(store, 1, in);
}
add_immBlock_pred(get_irg_end_block(current_ir_graph), x);
- mature_immBlock (r1);
+ mature_immBlock(r1);
/* finalize the end block generated in new_ir_graph() */
- mature_immBlock (get_irg_end_block(current_ir_graph));
+ mature_immBlock(get_irg_end_block(current_ir_graph));
}
int
/** Type information for the procedure **/
owner = get_glob_type();
/* Type information for the procedure */
- proc_tp = new_type_method(new_id_from_chars(METHODTPNAME, strlen(METHODTPNAME)),
- NRARGS, NRES);
+ proc_tp = new_type_method(new_id_from_chars(METHODTPNAME, strlen(METHODTPNAME)), NRARGS, NRES);
set_method_param_type(proc_tp, 0, typ);
set_method_res_type(proc_tp, 0, typ);
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(array_type, 0,
- new_Const(mode_Iu, new_tarval_from_long (L_BOUND, mode_Iu)),
- new_Const(mode_Iu, new_tarval_from_long (U_BOUND, mode_Iu)));
- set_array_bounds(array_type2, 0,
- new_Const(mode_Iu, new_tarval_from_long (L_BOUND, mode_Iu)),
- new_Const(mode_Iu, new_tarval_from_long (U_BOUND, mode_Iu)));
+ 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 */
- array_ent = new_entity( owner, new_id_from_chars("a", 1), array_type);
- array_ent2 = new_entity( owner, new_id_from_chars("a2", 2), array_type2);
+ array_ent = new_entity( owner, new_id_from_str("a"), array_type);
+ array_ent2 = new_entity( owner, new_id_from_str("a2"), array_type2);
/** The code of the procedure **/
/* Generates start and end blocks and nodes, and a first, initial block */
#undef NRLOCS
#define NRLOCS 1
- irg = new_ir_graph (ent, NRLOCS);
+ irg = new_ir_graph(ent, NRLOCS);
/* The value position used for: */
i_pos = 0;
/* Generate the constant and assign it to b. The assignment is resovled to a
dataflow edge. */
- set_value (i_pos, new_Const (mode_Is, new_tarval_from_long (0, mode_Is)));
+ 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
/* Generate a conditional branch */
r1 = new_immBlock();
add_immBlock_pred(get_irg_current_block(irg), x);
- cmp = new_Cmp(new_Const (mode_Is, new_tarval_from_long(10, mode_Is)),
- 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);
+ 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);
/* generate and fill the then block */
r = new_immBlock ();
ir_node *b, *c, *d, *res;
symconst_symbol sym, sym2;
- c = new_Const (mode_Is, new_tarval_from_long (1, mode_Is));
- b = new_Const (mode_Is, new_tarval_from_long (4, mode_Is));
- ir_node *b2 = new_Const (mode_Is, new_tarval_from_long (12, mode_Is));
+ c = new_Const_int(1);
+ b = new_Const_int(4);
+ ir_node *b2 = new_Const_int(12);
sym.entity_p = array_ent ;
sym2.entity_p = array_ent2 ;
d = new_SymConst(sym, 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 (mode_Is, new_tarval_from_long (12, mode_Is)), mode_P);
- set_store (new_Proj (new_Store (get_store (), res, new_Const (mode_Is,
- new_tarval_from_long (19,mode_Is))),
- mode_M, 0));
- set_store (new_Proj (new_Store (get_store (), res2, new_Const (mode_Is,
- new_tarval_from_long (16,mode_Is))),
- mode_M, 0));
+ //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);
- 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
- (mode_Is, new_tarval_from_long (15,mode_Is))),
- mode_M, 0));
+ 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_value (i_pos, new_Add(get_value(i_pos, mode_Is), c , mode_Is));
+ set_value(i_pos, new_Add(get_value(i_pos, mode_Is), c, mode_Is));
- x = new_Jmp ();
- mature_immBlock (r);
+ x = new_Jmp();
+ mature_immBlock(r);
add_immBlock_pred(r1, x);
- mature_immBlock (r1);
+ mature_immBlock(r1);
r2 = new_immBlock();
- ir_node *b1 = new_Const (mode_Is, new_tarval_from_long (45, mode_Is));
+ ir_node *b1 = new_Const_int(45);
add_immBlock_pred(get_irg_current_block(irg), f);
- cmp = new_Cmp(new_Const (mode_Is, new_tarval_from_long(0, mode_Is)), b1);
+ 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);
add_immBlock_pred(block, t1);
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 (mode_Is,
- new_tarval_from_long (19, mode_Is))), mode_M, 0));
- set_value (i_pos, new_Sub(get_value(i_pos, mode_Is), c , mode_Is));
+ set_store(new_Proj(new_Store(get_store(), res, new_Const_int(19)), mode_M, 0));
+ set_value(i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
- x1 = new_Jmp ();
+ x1 = new_Jmp();
- mature_immBlock (block);
+ mature_immBlock(block);
add_immBlock_pred(r2, x1);
- mature_immBlock (r2);
+ mature_immBlock(r2);
block = new_immBlock();
add_immBlock_pred(block, f1);
- mature_immBlock (block);
+ mature_immBlock(block);
/* The Return statement */
{
ir_node *in[1], *store ;
- in[0] = get_value (i_pos, mode_Is);
+ in[0] = get_value(i_pos, mode_Is);
store = get_store();
- x = new_Return (store, 1, in);
+ x = new_Return(store, 1, in);
}
add_immBlock_pred(get_irg_end_block(irg), x);
/* finalize the end block generated in new_ir_graph() */
- mature_immBlock (get_irg_end_block(irg));
+ mature_immBlock(get_irg_end_block(irg));
/* -------------------------------------------------------------------------------- */
function_begin(owner, proc_tp, METHODNAME2, loop_forward);
ir_node *mul, *q;
- q = new_Const (mode_Is, new_tarval_from_long (15, mode_Is));
- ir_node *q1 = new_Const (mode_Is, new_tarval_from_long (13, mode_Is));
- c = new_Const (mode_Is, new_tarval_from_long (1, mode_Is));
- b = new_Const (mode_Is, new_tarval_from_long (4, mode_Is));
+ q = new_Const_int(15);
+ ir_node *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, 0));
- set_value (i_pos, new_Add(get_value(i_pos, mode_Is), c, mode_Is));
+ set_value(i_pos, new_Add(get_value(i_pos, mode_Is), c, mode_Is));
function_end(b);
function_begin(owner, proc_tp, METHODNAME3, loop_backward);
- c = new_Const (mode_Is, new_tarval_from_long (1, mode_Is));
- b = new_Const (mode_Is, new_tarval_from_long (4, mode_Is));
- ir_node *b3 = new_Const (mode_Is, new_tarval_from_long (8, mode_Is));
-
+ c = new_Const_int(1);
+ b = new_Const_int(4);
+ ir_node *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);
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, 0));
- set_value (i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
+ set_value(i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
function_end(b);
function_begin(owner, proc_tp, METHODNAME4, loop_forward);
- c = new_Const (mode_Is, new_tarval_from_long (1, mode_Is));
- b = new_Const (mode_Is, new_tarval_from_long (4, mode_Is));
- ir_node *b4 = new_Const (mode_Is, new_tarval_from_long (8, mode_Is));
+ c = new_Const_int(1);
+ b = new_Const_int(4);
+ ir_node *b4 = new_Const_int(8);
- set_value (i_pos, new_Add(get_value(i_pos, mode_Is), c, mode_Is));
+ 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);
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));
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, 0));
function_end(b);
function_begin(owner, proc_tp, METHODNAME5, loop_backward);
- c = new_Const (mode_Is, new_tarval_from_long (1, mode_Is));
- b = new_Const (mode_Is, new_tarval_from_long (4, mode_Is));
+ c = new_Const_int(1);
+ b = new_Const_int(4);
- set_value (i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
+ set_value(i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
ir_node * 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 (mode_Is,
- new_tarval_from_long (19, mode_Is))),
- mode_M, 0));
+ set_store(new_Proj(new_Store(get_store(), res, new_Const_int(19)), mode_M, 0));
function_end(b);
function_begin(owner, proc_tp, METHODNAME6, loop_forward);
- c = new_Const (mode_Is, new_tarval_from_long (1, mode_Is));
- ir_node *c1 = new_Const (mode_Is, new_tarval_from_long (5, mode_Is));
- b = new_Const (mode_Is, new_tarval_from_long (4, mode_Is));
+ c = new_Const_int(1);
+ ir_node *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));
+ set_value(i_pos, new_Sub(get_value(i_pos, mode_Is), c, 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_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 (mode_Is,
- new_tarval_from_long (19, mode_Is))),
- mode_M, 0));
+ set_store(new_Proj(new_Store(get_store(), res, new_Const_int(19)), mode_M, 0));
function_end(b);
function_begin(owner, proc_tp, METHODNAME7, loop_backward);
- c = new_Const (mode_Is, new_tarval_from_long (1, mode_Is));
- b = new_Const (mode_Is, new_tarval_from_long (4, mode_Is));
- ir_node *b7 = new_Const (mode_Is,
- new_tarval_from_long (19, mode_Is));
-
-
+ c = new_Const_int(1);
+ b = new_Const_int(4);
+ ir_node *b7 = new_Const_int(19);
// a[i] = a[i+4]
res = get_value(i_pos, 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));
- set_value (i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
+ set_store(new_Proj(new_Store(get_store(), res, res7), mode_M, 0));
+ set_value(i_pos, new_Sub(get_value(i_pos, mode_Is), c, mode_Is));
function_end(b);
/* -------------------------------------------------------------------------- */