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 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 are basically
21 * all nodes in a single ir_loop entry, i.e., basic blocks and inner loop nodes.
22 * The analysis computes a new set of edges that link all nodes of a loop to an
29 #ifndef _INTERVAL_ANALYSIS_H_
30 #define _INTERVAL_ANALYSIS_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);
50 int get_region_n_exc_outs(void *region);
52 /** The control flow operation corresponding to the loop-region in at
55 void *get_loop_cfop(void *region, int pos);
58 /** The algorithm to construct the interval graph.
60 * Constructs the cf loop tree and leaves a valid version of it.
62 * @todo: @@@ add flag that states correctness of interval analysis information
65 void construct_intervals(ir_graph *irg);
68 /** frees interval information of all graphs. */
69 void free_intervals(void);
72 /** dump a graph with the intervals. File name suffix "-interval". */
73 void dump_interval_graph(ir_graph *irg, const char *suffix);
76 #define DDMR(X) if(is_ir_node(X)) DDMN(X); else DDML(X)
79 #endif /* _INTERVAL_ANALYSIS_H_ */