-/* ------------------------------------------------------------------------- */
-/* Accumulate information in the type hierarchy. */
-/* This should go to co_read_profiling.c */
-/* ------------------------------------------------------------------------- */
-
-static void acc_temp (type *tp) {
- int i, n_subtypes, n_members;
- double inst;
-
- assert(is_Class_type(tp));
-
- /* Recursive descend. */
- n_subtypes = get_class_n_subtypes(tp);
- for (i = 0; i < n_subtypes; ++i) {
- type *stp = get_class_subtype(tp, i);
- if (type_not_visited(stp)) {
- acc_temp(stp);
- }
- }
-
- /* Deal with entity numbers. */
- n_members = get_class_n_members(tp);
- for (i = 0; i < n_members; ++i) {
- entity *mem = get_class_member(tp, i);
- double acc_loads = get_entity_estimated_n_loads (mem);
- double acc_writes = get_entity_estimated_n_stores(mem);
- int j, n_ov = get_entity_n_overwrittenby(mem);
- for (j = 0; j < n_ov; ++j) {
- entity *ov_mem = get_entity_overwrittenby(mem, j);
- acc_loads += get_entity_acc_estimated_n_loads (ov_mem);
- acc_writes += get_entity_acc_estimated_n_stores(ov_mem);
- }
- set_entity_acc_estimated_n_loads (mem, acc_loads);
- set_entity_acc_estimated_n_stores(mem, acc_writes);
- }
-
- /* Deal with type numbers. */
- inst = get_type_estimated_n_instances(tp);
- for (i = 0; i < n_subtypes; ++i) {
- type *stp = get_class_subtype(tp, i);
- inst += get_type_acc_estimated_n_instances(stp);
- }
- set_type_acc_estimated_n_instances(tp, inst);
-
- mark_type_visited(tp);
-}
-
-void accumulate_temperatures(void) {
- int i, n_types = get_irp_n_types();
- free_accumulated_temperatures();
-
- inc_master_type_visited();
- for (i = 0; i < n_types; ++i) {
- type *tp = get_irp_type(i);
- if (is_Class_type(tp)) { /* For others there is nothing to accumulate. */
- int j, n_subtypes = get_class_n_subtypes(tp);
- int has_unmarked_subtype = false;
- for (j = 0; j < n_subtypes && !has_unmarked_subtype; ++j) {
- type *stp = get_class_subtype(tp, j);
- if (type_not_visited(stp)) has_unmarked_subtype = true;
- }
-
- if (!has_unmarked_subtype)
- acc_temp(tp);
- }
- }
-
- irp->temperature_state = temperature_consistent;
-}
-
-
-void free_accumulated_temperatures(void) {
- if (temperature_set) del_set(temperature_set);
- temperature_set = NULL;
- irp->temperature_state = temperature_none;
-}