* Free the list with DEL_ARR_F().
*/
static ir_node **construct_block_lists(ir_graph *irg) {
- int i, rem_view = get_interprocedural_view();
- ir_graph *rem = current_ir_graph;
+ int i;
+ int rem_view = get_interprocedural_view();
+ int walk_flag = inside_irg_walk(irg);
+ ir_graph *rem = current_ir_graph;
+
current_ir_graph = irg;
+ clear_inside_irg_walk(current_ir_graph);
+
for (i = get_irp_n_irgs() - 1; i >= 0; --i)
ird_set_irg_link(get_irp_irg(i), NULL);
set_interprocedural_view(rem_view);
+ if (walk_flag)
+ set_inside_irg_walk(current_ir_graph);
+
current_ir_graph = rem;
return ird_get_irg_link(irg);
}
#include <math.h>
#include "execution_frequency.h"
-#include "callgraph.h"
static void dump_node_ana_vals(FILE *F, ir_node *n) {
return;
if (!is_filtered_dump_name(get_entity_ident(get_irg_entity(irg))))
return;
+ if (dump_backedge_information_flag && get_irg_loopinfo_state(irg) != loopinfo_consistent) {
+ construct_backedges(irg);
+ }
+
rem = current_ir_graph;
current_ir_graph = irg;
if (get_interprocedural_view()) suffix1 = "-pure-ip";
return base_color + n_colors - color;
}
+/**
+ * Calculate a entity color depending on it's execution propability.
+ */
static int get_entity_color(ir_entity *ent) {
ir_graph *irg = get_entity_irg(ent);
assert(irg);
FILE *F = vcg_open_name("Callgraph", suffix);
if (F != NULL) {
- int i, rem = edge_label;
+ int i, rem = edge_label, colorize;
edge_label = 1;
dump_vcg_header(F, "Callgraph", NULL);
+ colorize = get_irp_callgraph_state() == irp_callgraph_and_calltree_consistent;
+
for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
ir_graph *irg = get_irp_irg(i);
ir_entity *ent = get_irg_entity(irg);
int j, n_callees = get_irg_n_callees(irg);
+ int color;
- /* Do not dump runtime system. */
- //if (id_is_prefix(prefix, get_entity_ld_ident(ent))) continue;
-
- dump_entity_node(F, ent, get_entity_color(ent));
+ color = colorize ? get_entity_color(ent) : ird_color_green;
+ dump_entity_node(F, ent, color);
for (j = 0; j < n_callees; ++j) {
ir_entity *c = get_irg_entity(get_irg_callee(irg, j));
//if (id_is_prefix(prefix, get_entity_ld_ident(c))) continue;
attr = (be) ?
"label:\"recursion %d\" color:%d" :
"label:\"calls %d\" color:%d";
- print_ent_ent_edge(F, ent, c, be, attr, get_irg_callee_loop_depth(irg, j), get_entity_color(ent));
+ print_ent_ent_edge(F, ent, c, be, attr, get_irg_callee_loop_depth(irg, j), color);
}
}