/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
kind pointer, an ir_node* or an ir_loop*. */
FIRM_API loop_element get_loop_element(const ir_loop *loop, size_t pos);
+#define INVALID_LOOP_POS ((size_t)-1)
+
/** Returns the element number of the loop son in loop.
-* Returns -1 if not found. O(|elements|). */
+* Returns INVALID_LOOP_POS if not found. O(|elements|). */
FIRM_API size_t get_loop_element_pos(const ir_loop *loop, void *le);
/** Returns a unique node number for the loop node to make output
/* Construct and destruct the callgraph. */
void compute_callgraph(void)
{
- int i, n_irgs;
+ size_t i, n_irgs;
/* initialize */
free_callgraph();
/* Destruct the callgraph. */
void free_callgraph(void)
{
- int i, n_irgs = get_irp_n_irgs();
+ size_t i, n_irgs = get_irp_n_irgs();
for (i = 0; i < n_irgs; ++i) {
ir_graph *irg = get_irp_irg(i);
if (irg->callees) DEL_ARR_F(irg->callees);
void callgraph_walk(callgraph_walk_func *pre, callgraph_walk_func *post, void *env)
{
- int i, n_irgs = get_irp_n_irgs();
+ size_t i, n_irgs = get_irp_n_irgs();
++master_cg_visited;
/* roots are methods which have no callers in the current program */
static void init_scc(struct obstack *obst)
{
- int i;
- int n_irgs;
+ size_t i, n_irgs;
current_dfn = 1;
loop_node_cnt = 0;
*/
static void reset_isbe(void)
{
- int i, n_irgs = get_irp_n_irgs();
+ size_t i, n_irgs = get_irp_n_irgs();
for (i = 0; i < n_irgs; ++i) {
ir_graph *irg = get_irp_irg(i);
/* Compute the backedges that represent recursions. */
void find_callgraph_recursions(void)
{
- int i, n_irgs;
+ size_t i, n_irgs;
struct obstack temp;
reset_isbe();
*/
static void sel_methods_init(void)
{
- int i;
+ size_t i, n;
pmap *ldname_map = pmap_create(); /* Map entity names to entities: to replace
SymConst(name) by SymConst(ent). */
assert(entities == NULL);
entities = eset_create();
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_entity * ent = get_irg_entity(get_irp_irg(i));
/* only external visible methods are allowed to call by a SymConst_ptr_name */
if (entity_is_externally_visible(ent)) {
*/
static void add_method_address(ir_entity *ent, eset *set)
{
- ir_node *n;
ir_type *tp;
- int i;
/* ignore methods: these of course reference it's address
- * TODO: remove this later once this incorrect self-intialisation is gone
+ * TODO: remove this later once this incorrect self-initialisation is gone
*/
tp = get_entity_type(ent);
if (is_Method_type(tp))
if (ent->initializer != NULL) {
add_method_address_inititializer(get_entity_initializer(ent), set);
} else if (entity_has_compound_ent_values(ent)) {
- for (i = get_compound_ent_n_values(ent) - 1; i >= 0; --i) {
- n = get_compound_ent_value(ent, i);
+ size_t i, n;
+ for (i = 0, n = get_compound_ent_n_values(ent); i < n; ++i) {
+ ir_node *irn = get_compound_ent_value(ent, i);
/* let's check if it's the address of a function */
- if (is_Global(n)) {
- ir_entity *ent = get_Global_entity(n);
+ if (is_Global(irn)) {
+ ir_entity *ent = get_Global_entity(irn);
if (is_Method_type(get_entity_type(ent)))
eset_insert(set, ent);
static size_t get_free_methods(ir_entity ***free_methods)
{
eset *free_set = eset_create();
- int i;
+ size_t i, n;
+ int j;
ir_entity **arr;
ir_entity *ent;
ir_graph *irg;
ir_type *tp;
size_t length;
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_linkage linkage;
irg = get_irp_irg(i);
ent = get_irg_entity(irg);
linkage = get_entity_linkage(ent);
- if (entity_is_externally_visible(ent)
- || (linkage & IR_LINKAGE_HIDDEN_USER)) {
+ if ((linkage & IR_LINKAGE_HIDDEN_USER) || entity_is_externally_visible(ent)) {
eset_insert(free_set, ent);
}
/* insert all methods that are used in global variables initializers */
tp = get_glob_type();
- for (i = get_class_n_members(tp) - 1; i >= 0; --i) {
- ent = get_class_member(tp, i);
+ for (j = get_class_n_members(tp) - 1; j >= 0; --j) {
+ ent = get_class_member(tp, j);
add_method_address(ent, free_set);
}
tp = get_tls_type();
- for (i = get_class_n_members(tp) - 1; i >= 0; --i) {
- ent = get_class_member(tp, i);
+ for (j = get_class_n_members(tp) - 1; j >= 0; --j) {
+ ent = get_class_member(tp, j);
add_method_address(ent, free_set);
}
*/
static void callee_ana(void)
{
- int i;
+ size_t i, n;
/* analyse all graphs */
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *irg = get_irp_irg(i);
irg_walk_graph(irg, callee_walker, remove_Tuples, NULL);
set_irg_callee_info_state(irg, irg_callee_info_consistent);
void free_irp_callee_info(void)
{
- int i;
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ size_t i, n;
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
free_callee_info(get_irp_irg(i));
}
}
while (!pdeq_empty(block_worklist)) {
ir_loop *l = (ir_loop *)pdeq_getl(block_worklist);
- int i, n_elems = get_loop_n_elements(l);
+ size_t i, n_elems = get_loop_n_elements(l);
/* The header is initialized with the frequency of the full loop times the iteration weight. */
check_proper_head(l, get_loop_element(l, 0).son);
void compute_execution_frequencies(int default_loop_weight, double exception_probability)
{
- int i, n_irgs = get_irp_n_irgs();
+ size_t i, n_irgs = get_irp_n_irgs();
free_intervals();
for (i = 0; i < n_irgs; ++i) {
compute_execution_frequency(get_irp_irg(i), default_loop_weight, exception_probability);
/** free occupied memory, reset */
void free_execution_frequency(void)
{
- int i, n_irgs = get_irp_n_irgs();
+ size_t i, n_irgs = get_irp_n_irgs();
free_intervals();
del_set(exec_freq_set);
/* Sets irp and all irg exec freq states to inconsistent if it is set to consistent. */
void set_irp_exec_freq_state_inconsistent(void)
{
- if (get_irp_exec_freq_state() != exec_freq_none) {
- int i, n_irgs = get_irp_n_irgs();
- set_irp_exec_freq_state(exec_freq_inconsistent);
- for (i = 0; i < n_irgs; ++i) {
- ir_graph *irg = get_irp_irg(i);
- if (get_irg_exec_freq_state(irg) != exec_freq_none)
- irg->execfreq_state = exec_freq_inconsistent;
- }
- }
+ if (get_irp_exec_freq_state() != exec_freq_none) {
+ size_t i, n_irgs = get_irp_n_irgs();
+ set_irp_exec_freq_state(exec_freq_inconsistent);
+ for (i = 0; i < n_irgs; ++i) {
+ ir_graph *irg = get_irp_irg(i);
+ if (get_irg_exec_freq_state(irg) != exec_freq_none)
+ irg->execfreq_state = exec_freq_inconsistent;
+ }
+ }
}
/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
*/
static int test_loop_nest(ir_node *blk, ir_loop *loop)
{
- int i, n_elems = get_loop_n_elements(loop);
+ size_t i, n_elems = get_loop_n_elements(loop);
for (i = 0; i < n_elems; ++i) {
loop_element e = get_loop_element(loop, i);
*/
static int find_inner_loop(ir_node *blk, ir_loop *l, ir_node *pred, ir_node *cfop)
{
- int i, n_elems = get_loop_n_elements(l);
+ size_t i, n_elems = get_loop_n_elements(l);
int found = 0;
for (i = 0; i < n_elems; ++i) {
ir_node *pred_b, ir_node *cfop)
{
ir_loop *outer = get_loop_outer_loop(l);
- int found, i;
- int l_pos = get_loop_element_pos(outer, l);
+ int found;
+ size_t i, l_pos = get_loop_element_pos(outer, l);
(void) pred_l;
- assert(l_pos > -1);
+ assert(l_pos != INVALID_LOOP_POS);
assert(l_pos > 0 && "Is this a necessary condition? There could be a perfect nest ...");
- for (i = l_pos -1, found = 0; i > -1 && !found; --i) {
- ir_loop *k = get_loop_element(outer, i).son;
+ for (i = l_pos, found = 0; i > 0;) {
+ ir_loop *k = get_loop_element(outer, --i).son;
if (is_ir_loop(k)) {
found = test_loop_nest(pred_b, k);
if (found) {
add_loop_cfop(l, cfop);
/* placeholder: the edge is in the loop region */
add_region_in(b, NULL);
+ break;
}
}
}
*/
static void construct_interval_edges(ir_loop *l)
{
- int i, n_elems = get_loop_n_elements(l);
+ size_t i, n_elems = get_loop_n_elements(l);
for (i = 0; i < n_elems; ++i) {
loop_element e = get_loop_element(l, i);
switch (*e.kind) {
static void dump_interval_loop(FILE *F, ir_loop *l)
{
- int i, n_elems = get_loop_n_elements(l);
+ size_t i, n_elems = get_loop_n_elements(l);
fprintf(F, "graph: { title: \"");
PRINT_LOOPID(l);
/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
can't they have two loops as sons? Does it never get that far? ) */
static void close_loop(ir_loop *l)
{
- int last = get_loop_n_elements(l) - 1;
+ size_t last = get_loop_n_elements(l) - 1;
loop_element lelement = get_loop_element(l, last);
ir_loop *last_son = lelement.son;
if (loop->n_sons > 0) {
/* we have child loops, mature them */
- int i;
+ size_t i;
- for (i = ARR_LEN(new_children) - 1; i >= 0; --i) {
- loop_element child = new_children[i];
+ for (i = ARR_LEN(new_children); i > 0;) {
+ loop_element child = new_children[--i];
if (*child.kind == k_ir_loop) {
mature_loops(child.son, obst);
for (i = 0; i < n; i++)
if (get_loop_element(loop, i).node == le)
return i;
- return (size_t)-1;
+ return INVALID_LOOP_POS;
}
*/
static void check_initializer(ir_entity *ent)
{
- ir_node *n;
- int i;
-
/* Beware: Methods are always initialized with "themself". This does not
* count as a taken address.
* TODO: this initialisation with "themself" is wrong and should be removed
if (ent->initializer != NULL) {
check_initializer_nodes(ent->initializer);
} else if (entity_has_compound_ent_values(ent)) {
- for (i = get_compound_ent_n_values(ent) - 1; i >= 0; --i) {
- n = get_compound_ent_value(ent, i);
+ size_t i, n;
+
+ for (i = 0, n = get_compound_ent_n_values(ent); i < n; ++i) {
+ ir_node *irn = get_compound_ent_value(ent, i);
/* let's check if it's an address */
- if (is_Global(n)) {
- ir_entity *ent = get_Global_entity(n);
+ if (is_Global(irn)) {
+ ir_entity *ent = get_Global_entity(irn);
set_entity_usage(ent, ir_usage_unknown);
}
}
*/
static void analyse_irp_globals_entity_usage(void)
{
- int i;
+ size_t i, n;
ir_segment_t s;
for (s = IR_SEGMENT_FIRST; s <= IR_SEGMENT_LAST; ++s) {
check_initializers(type);
}
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *irg = get_irp_irg(i);
assure_irg_outs(irg);
/* Mark all private methods, i.e. those of which all call sites are known. */
void mark_private_methods(void)
{
- int i;
+ size_t i, n;
int changed = 0;
assure_irp_globals_entity_usage_computed();
mtp_map = pmap_create();
/* first step: change the calling conventions of the local non-escaped entities */
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *irg = get_irp_irg(i);
ir_entity *ent = get_irg_entity(irg);
ir_entity_usage flags = get_entity_usage(ent);
- if (!entity_is_externally_visible(ent) &&
- !(flags & ir_usage_address_taken)) {
+ if (!(flags & ir_usage_address_taken) && !entity_is_externally_visible(ent)) {
ir_type *mtp = get_entity_type(ent);
add_entity_additional_properties(ent, mtp_property_private);
void compute_irp_outs(void)
{
- int i;
- for (i = get_irp_n_irgs() -1; i >= 0; --i)
+ size_t i, n;
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i)
compute_irg_outs(get_irp_irg(i));
}
void free_irp_outs(void)
{
- int i;
- for (i = get_irp_n_irgs() -1; i >= 0; --i)
+ size_t i, n;
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i)
free_irg_outs(get_irp_irg(i));
}
*/
void init_irtypeinfo(void)
{
- int i;
+ size_t i, n;
if (initial_type == NULL)
initial_type = new_type_class(new_id_from_str("initial_type"));
pmap_destroy(type_node_map);
type_node_map = pmap_create();
- for (i = get_irp_n_irgs() - 1; i >= 0; --i)
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i)
set_irg_typeinfo_state(get_irp_irg(i), ir_typeinfo_none);
}
/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
*/
static int rta_fill_incremental(void)
{
- int i;
+ size_t i, n;
int n_runs = 0;
bool rerun = true;
/* Need to take care of graphs that are externally
visible or sticky. Pretend that they are called: */
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *graph = get_irp_irg(i);
ir_entity *ent = get_irg_entity(graph);
ir_linkage linkage = get_entity_linkage(ent);
- if (entity_is_externally_visible(ent)
- || (linkage & IR_LINKAGE_HIDDEN_USER)) {
+ if ((linkage & IR_LINKAGE_HIDDEN_USER) || entity_is_externally_visible(ent))
pset_new_insert(_live_graphs, graph);
- }
}
while (rerun) {
/**
* Count the number of graphs that we have found to be live.
*/
-static int stats(void)
+static size_t stats(void)
{
- int i;
- int n_live_graphs = 0;
+ size_t i, n;
+ size_t n_live_graphs = 0;
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *graph = get_irp_irg(i);
if (rta_is_alive_graph(graph))
n_runs = rta_fill_incremental();
- DB((dbg, LEVEL_1, "RTA: n_graphs = %i\n", get_irp_n_irgs()));
- DB((dbg, LEVEL_1, "RTA: n_live_graphs = %i\n", stats()));
+ DB((dbg, LEVEL_1, "RTA: n_graphs = %zu\n", get_irp_n_irgs()));
+ DB((dbg, LEVEL_1, "RTA: n_live_graphs = %zu\n", stats()));
DB((dbg, LEVEL_1, "RTA: n_runs = %i\n", n_runs));
# ifdef DEBUG_libfirm
*/
static void region_tree_walk2(ir_region *reg, irg_reg_walk_func *pre, irg_reg_walk_func *post, void *env)
{
- int i, n;
+ size_t i, n;
if (pre)
pre(reg, env);
/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
current_ir_graph. */
void all_irg_walk(irg_walk_func *pre, irg_walk_func *post, void *env)
{
- int i, n;
+ size_t i, n;
ir_graph *irg;
for (i = 0, n = get_irp_n_irgs(); i < n; i++) {
if (ent->initializer != NULL) {
walk_initializer(ent->initializer, my_env);
} else if (entity_has_compound_ent_values(ent)) {
- int i, n_vals = get_compound_ent_n_values(ent);
+ size_t i, n_vals = get_compound_ent_n_values(ent);
for (i = 0; i < n_vals; i++)
irg_walk(get_compound_ent_value(ent, i), my_env->pre, my_env->post, my_env->env);
/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
*/
static void traverse_block_pre(ir_node *block, block_entry_t *entry, irg_walk_func *pre, void *env)
{
- int j;
+ size_t j;
- for (j = ARR_LEN(entry->cf_list) - 1; j >= 0; --j) {
- ir_node *node = entry->cf_list[j];
+ for (j = ARR_LEN(entry->cf_list); j > 0;) {
+ ir_node *node = entry->cf_list[--j];
pre(node, env);
}
- for (j = ARR_LEN(entry->df_list) - 1; j >= 0; --j) {
- ir_node *node = entry->df_list[j];
+ for (j = ARR_LEN(entry->df_list); j > 0;) {
+ ir_node *node = entry->df_list[--j];
pre(node, env);
}
- for (j = ARR_LEN(entry->phi_list) - 1; j >= 0; --j) {
- ir_node *node = entry->phi_list[j];
+ for (j = ARR_LEN(entry->phi_list); j > 0;) {
+ ir_node *node = entry->phi_list[--j];
pre(node, env);
}
static void traverse_block_post(ir_node *block, block_entry_t *entry,
irg_walk_func *post, void *env)
{
- int j, n;
+ size_t j, n;
post(block, env);
*/
static void traverse_pre(blk_collect_data_t *blks, irg_walk_func *pre, void *env)
{
- int i;
+ size_t i;
- for (i = ARR_LEN(blks->blk_list) - 1; i >= 0; --i) {
- ir_node *block = blks->blk_list[i];
+ for (i = ARR_LEN(blks->blk_list); i > 0;) {
+ ir_node *block = blks->blk_list[--i];
block_entry_t *entry = block_find_entry(block, blks);
traverse_block_pre(block, entry, pre, env);
*/
static void traverse_post(blk_collect_data_t *blks, irg_walk_func *post, void *env)
{
- int i, k;
+ size_t i, k;
for (i = 0, k = ARR_LEN(blks->blk_list); i < k; ++i) {
ir_node *block = blks->blk_list[i];
*/
static void traverse_both(blk_collect_data_t *blks, irg_walk_func *pre, irg_walk_func *post, void *env)
{
- int i;
+ size_t i;
- for (i = ARR_LEN(blks->blk_list) - 1; i >= 0; --i) {
- ir_node *block = blks->blk_list[i];
+ for (i = ARR_LEN(blks->blk_list); i > 0;) {
+ ir_node *block = blks->blk_list[--i];
block_entry_t *entry = block_find_entry(block, blks);
traverse_block_pre(block, entry, pre, env);
*/
static void collect_lists(blk_collect_data_t *env)
{
- int i, j;
+ size_t i, j;
ir_node *block, *node;
block_entry_t *entry;
inc_irg_visited(current_ir_graph);
- for (i = ARR_LEN(env->blk_list) - 1; i >= 0; --i) {
- block = env->blk_list[i];
+ for (i = ARR_LEN(env->blk_list); i > 0;) {
+ block = env->blk_list[--i];
entry = block_find_entry(block, env);
- for (j = ARR_LEN(entry->entry_list) - 1; j >= 0; --j) {
- node = entry->entry_list[j];
+ for (j = ARR_LEN(entry->entry_list); j > 0;) {
+ node = entry->entry_list[--j];
/* a entry might already be visited due to Phi loops */
if (node->visited < current_ir_graph->visited)
}
/**
- * Intraprozedural graph walker over blocks.
+ * Intra procedural graph walker over blocks.
*/
static void do_irg_walk_blk(ir_graph *irg, irg_walk_func *pre,
irg_walk_func *post, void *env, unsigned follow_deps,
/* Sets the generic function pointer of all opcodes to NULL */
void clear_irp_opcodes_generic_func(void)
{
- int i;
+ size_t i, n;
- for (i = get_irp_n_opcodes() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_opcodes(); i < n; ++i) {
ir_op *op = get_irp_opcode(i);
op->ops.generic = (op_func)NULL;
}
{
pass_t *pass = (pass_t *)context;
irg_phase_state state = pass->state;
- int i;
+ size_t i, n;
(void)irp;
/* set the phase of all graphs */
- for (i = get_irp_n_irgs() - 1; i >= 0; --i)
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i)
set_irg_phase_state(get_irp_irg(i), state);
/* set the irp phase */
*/
void lower_calls_with_compounds(const lower_params_t *params)
{
- int i;
+ size_t i, n;
ir_graph *irg;
lower_params_t param = *params;
type_map = NULL;
/* first step: Transform all graphs */
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
irg = get_irp_irg(i);
transform_irg(¶m, irg);
unsigned size_bits = env->params->doubleword_size;
ir_mode *doubleword_signed = NULL;
ir_mode *doubleword_unsigned = NULL;
- int n_modes = get_irp_n_modes();
+ size_t n_modes = get_irp_n_modes();
ir_mode_arithmetic arithmetic;
unsigned modulo_shift;
- int i;
+ size_t i;
/* search for doubleword modes... */
for (i = 0; i < n_modes; ++i) {
void lower_dw_ops(const lwrdw_param_t *param)
{
lower_env_t lenv;
- int i;
+ size_t i, n;
assert(param != NULL);
FIRM_DBG_REGISTER(dbg, "firm.lower.dw");
lenv.next_id = new_id_from_chars(param->little_endian ? ".h" : ".l", 2);
/* transform all graphs */
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *irg = get_irp_irg(i);
lower_irg(&lenv, irg);
}
*/
void lower_highlevel(int lower_bitfields)
{
- int i, n;
+ size_t i, n;
n = get_irp_n_irgs();
for (i = 0; i < n; ++i) {
/* Go through all graphs and map calls to intrinsic functions. */
size_t lower_intrinsics(i_record *list, size_t length, int part_block_used)
{
- size_t i;
- int idx, n_ops = get_irp_n_opcodes();
+ size_t i, n;
+ size_t n_ops = get_irp_n_opcodes();
ir_graph *irg;
pmap *c_map = pmap_create_ex(length);
i_instr_record **i_map;
wenv.c_map = c_map;
wenv.i_map = i_map;
- for (idx = get_irp_n_irgs() - 1; idx >= 0; --idx) {
- irg = get_irp_irg(idx);
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
+ irg = get_irp_irg(i);
if (part_block_used) {
ir_reserve_resources(irg, IR_RESOURCE_IRN_LINK | IR_RESOURCE_PHI_LIST);
return NULL;
if (!has_entity_initializer(ent)) {
- int len = 0;
- int n;
- int i = -1;
+ size_t i, n;
n = get_compound_ent_n_values(ent);
for (i = 0; i < n; ++i) {
if (is_Const_null(irn)) {
/* found the length */
- len = i;
- break;
+ ir_tarval *tv = new_tarval_from_long(i, get_type_mode(res_tp));
+ return new_r_Const(irg, tv);
}
}
- if (len >= 0) {
- ir_tarval *tv = new_tarval_from_long(len, get_type_mode(res_tp));
- return new_r_Const(irg, tv);
- }
return NULL;
}
{
ir_type *tp;
ir_mode *mode;
- int i, n, n_r, res;
tp = get_entity_type(left);
if (! is_Array_type(tp))
if (!has_entity_initializer(left) && !has_entity_initializer(right)) {
/* code that uses deprecated compound_graph_path stuff */
+ size_t n = get_compound_ent_n_values(left);
+ size_t n_r = get_compound_ent_n_values(right);
+ size_t i;
+ int res = 0;
- n = get_compound_ent_n_values(left);
- n_r = get_compound_ent_n_values(right);
if (n_r < n)
n = n_r;
- res = 0;
for (i = 0; i < n; ++i) {
ir_node *irn;
long v_l, v_r;
if (!has_entity_initializer(ent)) {
/* code for deprecated compound_graph_path stuff */
- int n = get_compound_ent_n_values(ent);
+ size_t n = get_compound_ent_n_values(ent);
if (n < 1)
return 0;
irn = get_compound_ent_value(ent, 0);
*/
static void set_compute_functions(void)
{
- int i;
+ size_t i, n;
/* set the default compute function */
- for (i = get_irp_n_opcodes() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_opcodes(); i < n; ++i) {
ir_op *op = get_irp_opcode(i);
op->ops.generic = (op_func)default_compute;
}
/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
/* Do simple and fast escape analysis for all graphs. */
void escape_analysis(int run_scalar_replace, check_alloc_entity_func callback)
{
- ir_graph *irg;
- int i;
+ size_t i, n;
struct obstack obst;
walk_env_t *env, *elist;
(void) run_scalar_replace;
env->dead_allocs = NULL;
env->callback = callback;
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
- irg = get_irp_irg(i);
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
+ ir_graph *irg = get_irp_irg(i);
assure_irg_outs(irg);
/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
* The walker environment for updating function calls.
*/
typedef struct env_t {
- unsigned n_calls_SymConst;
- unsigned n_calls_Sel;
+ size_t n_calls_SymConst;
+ size_t n_calls_Sel;
ir_node *float_const_call_list; /**< The list of all floating const function calls that will be changed. */
ir_node *nonfloat_const_call_list; /**< The list of all non-floating const function calls that will be changed. */
ir_node *pure_call_list; /**< The list of all pure function calls that will be changed. */
*/
static void handle_const_Calls(env_t *ctx)
{
- int i;
+ size_t i, n;
ctx->n_calls_SymConst = 0;
ctx->n_calls_Sel = 0;
/* all calls of const functions can be transformed */
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < 0; ++i) {
ir_graph *irg = get_irp_irg(i);
ctx->float_const_call_list = NULL;
*/
static void handle_nothrow_Calls(env_t *ctx)
{
- int i;
+ size_t i, n;
ctx->n_calls_SymConst = 0;
ctx->n_calls_Sel = 0;
/* all calls of const functions can be transformed */
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *irg = get_irp_irg(i);
ctx->nothrow_call_list = NULL;
*/
void optimize_funccalls(int force_run, check_alloc_entity_func callback)
{
- int i, last_idx;
- unsigned num_const = 0;
- unsigned num_pure = 0;
- unsigned num_nothrow = 0;
- unsigned num_malloc = 0;
+ size_t i, n;
+ int last_idx;
+ size_t num_const = 0;
+ size_t num_pure = 0;
+ size_t num_nothrow = 0;
+ size_t num_malloc = 0;
is_alloc_entity = callback;
/* first step: detect, which functions are nothrow or malloc */
DB((dbg, LEVEL_2, "Detecting nothrow and malloc properties ...\n"));
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *irg = get_irp_irg(i);
unsigned prop = check_nothrow_or_malloc(irg, /*top=*/1);
env_t ctx;
handle_nothrow_Calls(&ctx);
- DB((dbg, LEVEL_1, "Detected %u nothrow graphs, %u malloc graphs.\n", num_nothrow, num_malloc));
- DB((dbg, LEVEL_1, "Optimizes %u(SymConst) + %u(Sel) calls to nothrow functions.\n",
+ DB((dbg, LEVEL_1, "Detected %zu nothrow graphs, %zu malloc graphs.\n", num_nothrow, num_malloc));
+ DB((dbg, LEVEL_1, "Optimizes %zu(SymConst) + %zu(Sel) calls to nothrow functions.\n",
ctx.n_calls_SymConst, ctx.n_calls_Sel));
} else {
DB((dbg, LEVEL_1, "No graphs without side effects detected\n"));
/* third step: detect, which functions are const or pure */
DB((dbg, LEVEL_2, "Detecting const and pure properties ...\n"));
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *irg = get_irp_irg(i);
unsigned prop = check_const_or_pure_function(irg, /*top=*/1);
env_t ctx;
handle_const_Calls(&ctx);
- DB((dbg, LEVEL_1, "Detected %u const graphs, %u pure graphs.\n", num_const, num_pure));
+ DB((dbg, LEVEL_1, "Detected %zu const graphs, %zu pure graphs.\n", num_const, num_pure));
DB((dbg, LEVEL_1, "Optimizes %u(SymConst) + %u(Sel) calls to const functions.\n",
ctx.n_calls_SymConst, ctx.n_calls_Sel));
} else {
/*
- * Copyright (C) 2010 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
if (entity->initializer != NULL) {
visit_initializer(entity->initializer);
} else if (entity_has_compound_ent_values(entity)) {
- int i;
- int n_members = get_compound_ent_n_values(entity);
+ size_t i;
+ size_t n_members = get_compound_ent_n_values(entity);
for (i = 0; i < n_members; ++i) {
ir_node *node = get_compound_ent_value(entity, i);
start_visit_node(node);
void garbage_collect_entities(void)
{
- int i;
+ size_t i, n;
ir_segment_t s;
FIRM_DBG_REGISTER(dbg, "firm.opt.garbagecollect");
/* remove graphs of non-visited functions
* (we have to count backwards so we can safely call remove_irp_irg
* while iterating) */
- for (i = get_irp_n_irgs()-1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *irg = get_irp_irg(i);
ir_entity *entity = get_irg_entity(irg);
void gc_irgs(size_t n_keep, ir_entity ** keep_arr)
{
void * MARK = &MARK; /* @@@ gefaehrlich!!! Aber wir markieren hoechstens zu viele ... */
- int i;
+ size_t i, n;
FIRM_DBG_REGISTER(dbg, "firm.opt.cgopt");
}
/* clean */
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *irg = get_irp_irg(i);
ir_entity *ent = get_irg_entity(irg);
static void find_innermost_loop(ir_loop *loop)
{
/* descend into sons */
- int sons = get_loop_n_sons(loop);
+ size_t sons = get_loop_n_sons(loop);
if (sons == 0) {
ARR_APP1(ir_loop *, loops, loop);
} else {
- int s;
- for (s=0; s<sons; s++) {
+ size_t s;
+ for (s = 0; s < sons; ++s) {
find_innermost_loop(get_loop_son(loop, s));
}
}
void loop_optimization(ir_graph *irg)
{
ir_loop *loop;
- int sons, nr;
+ size_t sons, nr;
size_t i;
set_loop_params();
{
inline_irg_env *env;
ir_graph *irg;
- int i, n_irgs;
+ size_t i, n_irgs;
ir_graph *rem;
int did_inline;
wenv_t wenv;
return entry->benefice = weight;
}
-static ir_graph **irgs;
-static int last_irg;
+typedef struct walk_env_t {
+ ir_graph **irgs;
+ size_t last_irg;
+} walk_env_t;
/**
* Callgraph walker, collect all visited graphs.
*/
static void callgraph_walker(ir_graph *irg, void *data)
{
- (void) data;
- irgs[last_irg++] = irg;
+ walk_env_t *env = (walk_env_t *)data;
+ env->irgs[env->last_irg++] = irg;
}
/**
*/
static ir_graph **create_irg_list(void)
{
- ir_entity **free_methods;
- int n_irgs = get_irp_n_irgs();
+ ir_entity **free_methods;
+ size_t n_irgs = get_irp_n_irgs();
+ walk_env_t env;
cgana(&free_methods);
xfree(free_methods);
compute_callgraph();
- last_irg = 0;
- irgs = XMALLOCNZ(ir_graph*, n_irgs);
+ env.irgs = XMALLOCNZ(ir_graph*, n_irgs);
+ env.last_irg = 0;
- callgraph_walk(NULL, callgraph_walker, NULL);
- assert(n_irgs == last_irg);
+ callgraph_walk(NULL, callgraph_walker, &env);
+ assert(n_irgs == env.last_irg);
- return irgs;
+ return env.irgs;
}
/**
opt_ptr after_inline_opt)
{
inline_irg_env *env;
- int i, n_irgs;
+ size_t i, n_irgs;
ir_graph *rem;
wenv_t wenv;
pmap *copied_graphs;
void proc_cloning(float threshold)
{
entry_t *entry = NULL, *p;
- ir_graph *irg;
- int i;
+ size_t i, n;
q_set hmap;
obstack_init(&hmap.obst);
hmap.heavy_uses = NULL;
/* initially fill our map by visiting all irgs */
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
- irg = get_irp_irg(i);
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
+ ir_graph *irg = get_irp_irg(i);
irg_walk_graph(irg, collect_irg_calls, NULL, &hmap);
}
/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
*/
void opt_tail_recursion(void)
{
- int i;
- int n_opt_applications = 0;
- ir_graph *irg;
+ size_t i, n;
+ size_t n_opt_applications = 0;
FIRM_DBG_REGISTER(dbg, "firm.opt.tailrec");
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
- irg = get_irp_irg(i);
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
+ ir_graph *irg = get_irp_irg(i);
ir_reserve_resources(irg, IR_RESOURCE_IRN_LINK);
if (opt_tail_rec_irg(irg))
ir_free_resources(irg, IR_RESOURCE_IRN_LINK);
}
- DB((dbg, LEVEL_1, "Performed tail recursion for %d of %d graphs\n",
+ DB((dbg, LEVEL_1, "Performed tail recursion for %zu of %zu graphs\n",
n_opt_applications, get_irp_n_irgs()));
}
/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
/* - statistics ---------------------------------------------- */
-static int n_casts_normalized = 0;
-static int n_casts_removed = 0;
-static int n_sels_concretized = 0;
+static size_t n_casts_normalized = 0;
+static size_t n_casts_removed = 0;
+static size_t n_sels_concretized = 0;
/* - Cast normalization. ------------------------------------- */
}
/** Return a type that is a depth times pointer to type. */
-static ir_type *pointerize_type(ir_type *tp, int depth)
+static ir_type *pointerize_type(ir_type *tp, size_t depth)
{
for (; depth > 0; --depth) {
tp = gen_pointer_type_to(tp);
ir_type *fromtype = get_irn_typeinfo_type(pred);
ir_node *new_cast = pred;
ir_node *block;
- int ref_depth = 0;
+ size_t ref_depth = 0;
if (totype == fromtype) return pred; /* Case for optimization! */
while (is_Pointer_type(totype) && is_Pointer_type(fromtype)) {
totype = get_pointer_points_to_type(totype);
fromtype = get_pointer_points_to_type(fromtype);
- ref_depth++;
+ ++ref_depth;
}
if (!is_Class_type(totype)) return pred;
new_type = pointerize_type(new_type, ref_depth);
new_cast = new_r_Cast(block, pred, new_type);
pred = new_cast;
- n_casts_normalized ++;
+ ++n_casts_normalized;
set_irn_typeinfo_type(new_cast, new_type); /* keep type information up to date. */
if (get_trouts_state() != outs_none) add_type_cast(new_type, new_cast);
}
new_type = pointerize_type(new_type, ref_depth);
new_cast = new_r_Cast(block, pred, new_type);
pred = new_cast;
- n_casts_normalized ++;
+ ++n_casts_normalized;
set_irn_typeinfo_type(new_cast, new_type); /* keep type information up to date. */
if (get_trouts_state() != outs_none) add_type_cast(new_type, new_cast);
}
void normalize_irp_class_casts(gen_pointer_type_to_func gppt_fct)
{
- int i;
+ size_t i, n;
if (gppt_fct) gen_pointer_type_to = gppt_fct;
#if 0
simple_analyse_types();
#endif
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
- pure_normalize_irg_class_casts(get_irp_irg(i));
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
+ ir_graph *irg = get_irp_irg(i);
+ pure_normalize_irg_class_casts(irg);
}
set_irp_class_cast_state(ir_class_casts_normalized);
gen_pointer_type_to = default_gen_pointer_type_to;
- DB((dbg, SET_LEVEL_1, " Cast normalization: %d Casts inserted.\n", n_casts_normalized));
+ DB((dbg, SET_LEVEL_1, " Cast normalization: %zu Casts inserted.\n", n_casts_normalized));
}
all_irg_walk(NULL, irn_optimize_class_cast, &changed);
if (changed) {
- int i;
+ size_t i, n;
set_trouts_inconsistent();
- for (i = get_irp_n_irgs() - 1; i >= 0; --i)
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i)
set_irg_outs_inconsistent(get_irp_irg(i));
}
- DB((dbg, SET_LEVEL_1, " Cast optimization: %d Casts removed, %d Sels concretized.\n",
+ DB((dbg, SET_LEVEL_1, " Cast optimization: %zu Casts removed, %zu Sels concretized.\n",
n_casts_removed, n_sels_concretized));
}
return e1->addr != e2->addr;
} /* addr_cmp */
-static unsigned find_mode_index(const ir_mode *mode)
+/**
+ * Return the index of a (existing) mode.
+ */
+static size_t find_mode_index(const ir_mode *mode)
{
- int n = get_irp_n_modes();
- int i;
+ size_t i, n = get_irp_n_modes();
for (i = 0; i < n; ++i) {
if (get_irp_mode(i) == mode)
return i;
}
- return -1;
+ /* should really not happen */
+ assert(!"Cound not find index of mode in find_mode_index()");
+ return (size_t)-1;
}
/**
static void add_entry(ir_node ***arr, ir_node *irn)
{
ir_node **list = *arr;
- int i;
+ size_t i;
- for (i = ARR_LEN(list) - 1; i >= 0; --i) {
+ for (i = ARR_LEN(list); i > 0;) {
+ --i;
if (list[i] == irn) {
/* already there */
return;
/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
* transitive closure. */
void compute_inh_transitive_closure(void)
{
- int i, n_types = get_irp_n_types();
+ size_t i, n_types = get_irp_n_types();
free_inh_transitive_closure();
/* The 'down' relation */
void set_irp_class_cast_state(ir_class_cast_state s)
{
#ifndef NDEBUG
- int i;
- for (i = get_irp_n_irgs() - 1; i >= 0; --i)
+ size_t i, n;
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i)
assert(get_irg_class_cast_state(get_irp_irg(i)) >= s);
#endif
irp->class_cast_state = s;
if (ent->initializer != NULL) {
return initializer_constant_on_wrong_irg(ent->initializer);
} else if (entity_has_compound_ent_values(ent)) {
- int i;
- for (i = get_compound_ent_n_values(ent) - 1; i >= 0; --i) {
+ size_t i, n;
+ for (i = 0, n = get_compound_ent_n_values(ent); i < n; ++i) {
if (constant_on_wrong_irg(get_compound_ent_value(ent, i)))
return 1;
}
ir_type *find_pointer_type_to_type(ir_type *tp)
{
- int i, n = get_irp_n_types();
+ size_t i, n = get_irp_n_types();
for (i = 0; i < n; ++i) {
ir_type *found = get_irp_type(i);
if (is_Pointer_type(found) && get_pointer_points_to_type(found) == tp)
/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
if (ent->initializer != NULL) {
walk_initializer(ent->initializer, pre, post, env);
} else if (entity_has_compound_ent_values(ent)) {
- n_mem = get_compound_ent_n_values(ent);
+ size_t i, n_mem = get_compound_ent_n_values(ent);
for (i = 0; i < n_mem; ++i) {
n = get_compound_ent_value(ent, i);
irn_type_walker(n, pre, post, env);
/* walker: walks over all types */
void type_walk(type_walk_func *pre, type_walk_func *post, void *env)
{
- int i, n_types = get_irp_n_types();
+ size_t i, n_types = get_irp_n_types();
type_or_ent cont;
irp_reserve_resources(irp, IR_RESOURCE_TYPE_VISITED);
void type_walk_prog(type_walk_func *pre, type_walk_func *post, void *env)
{
- int i, n_irgs = get_irp_n_irgs();
+ size_t i, n_irgs = get_irp_n_irgs();
type_or_ent cont;
type_walk(pre, post, env);
void *env)
{
type_or_ent cont;
- int i, n_types = get_irp_n_types();
+ size_t i, n_types = get_irp_n_types();
irp_reserve_resources(irp, IR_RESOURCE_TYPE_VISITED);
inc_master_type_visited();
void type_walk_super(type_walk_func *pre, type_walk_func *post, void *env)
{
- int i, n_types = get_irp_n_types();
+ size_t i, n_types = get_irp_n_types();
type_or_ent cont;
irp_reserve_resources(irp, IR_RESOURCE_TYPE_VISITED);
class_walk_func *post,
void *env)
{
- int i, n_types = get_irp_n_types();
+ size_t i, n_types = get_irp_n_types();
ir_type *tp;
irp_reserve_resources(irp, IR_RESOURCE_TYPE_VISITED);