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
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_
37 /** The ins of regions: regions are loops or blocks.
39 * @todo: we should make a type for the regions, or reuse loop_element.
41 int get_region_n_ins(void *region);
42 void *get_region_in (void *region, int pos);
43 void add_region_in (void *region, void *in);
46 /** The number of out edges of a region.
48 * This number is useful for evaluation of execution frequencies.
50 int get_region_n_outs(void *region);
52 /** The number of exception out edges of a region.
54 * This number is useful for evaluation of execution frequencies.
56 int get_region_n_exc_outs(void *region);
58 /** The control flow operation corresponding to the loop-region in at
61 void *get_loop_cfop(void *region, int pos);
64 /** The algorithm to construct the interval graph.
66 * Constructs the cf loop tree and leaves a valid version of it.
68 * @todo: @@@ add flag that states correctness of interval analysis information
71 void construct_intervals(ir_graph *irg);
74 /** frees interval information of all graphs. */
75 void free_intervals(void);
78 /** dump a graph with the intervals. File name suffix "-interval". */
79 void dump_interval_graph(ir_graph *irg, const char *suffix);
82 #define DDMR(X) if(is_ir_node(X)) DDMN(X); else DDML(X)
85 #endif /* _INTERVAL_ANALYSIS_H_ */