3 * File name: ir/ana/interval_analysis.h
4 * Purpose: Decompost control flow graph into acylic, hierarchic intervals.
5 * Author: Goetz Lindenmaier
9 * Copyright: (c) 2004-2007 Universität Karlsruhe
10 * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
14 * @file interval_analysis.h
16 * Decompost control flow graph into acylic, hierarchic intervals.
18 * @author Goetz Lindenmaier
20 * The analysis is based on the control flow looptree. An intervall
21 * are basically all nodes in a single ir_loop entry, i.e., basic
22 * blocks and inner loop nodes. The analysis computes a new set of
23 * edges that link all nodes of a loop to an acyclic graph.
25 * The interval analysis counts the number of exception control flow
26 * operations leaving a block. This depends on stuff computed in
27 * execution_freqencies.
30 #ifndef _INTERVAL_ANALYSIS_H_
31 #define _INTERVAL_ANALYSIS_H_
34 #include "firm_types.h"
36 /** The ins of regions: regions are loops or blocks.
38 * @todo: we should make a type for the regions, or reuse loop_element.
40 int get_region_n_ins(void *region);
41 void *get_region_in (void *region, int pos);
42 void add_region_in (void *region, void *in);
45 /** The number of out edges of a region.
47 * This number is useful for evaluation of execution frequencies.
49 int get_region_n_outs(void *region);
51 /** The number of exception out edges of a region.
53 * This number is useful for evaluation of execution frequencies.
55 int get_region_n_exc_outs(void *region);
57 /** The control flow operation corresponding to the loop-region in at
60 void *get_loop_cfop(void *region, int pos);
63 /** The algorithm to construct the interval graph.
65 * Constructs the cf loop tree and leaves a valid version of it.
67 * @todo: @@@ add flag that states correctness of interval analysis information
70 void construct_intervals(ir_graph *irg);
73 /** frees interval information of all graphs. */
74 void free_intervals(void);
77 /** dump a graph with the intervals. File name suffix "-interval". */
78 void dump_interval_graph(ir_graph *irg, const char *suffix);
81 #define DDMR(X) if(is_ir_node(X)) DDMN(X); else DDML(X)
84 #endif /* _INTERVAL_ANALYSIS_H_ */