indentation changed
[libfirm] / ir / ana / interval_analysis.h
1 /*
2  * Project:     libFIRM
3  * File name:   ir/ana/interval_analysis.h
4  * Purpose:     Decompost control flow graph into acylic, hierarchic intervals.
5  * Author:      Goetz Lindenmaier
6  * Modified by:
7  * Created:     5.11.2004
8  * CVS-ID:      $Id$
9  * Copyright:   (c) 2004-2007 Universität Karlsruhe
10  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
11  */
12
13 /**
14  * @file interval_analysis.h
15  *
16  *  Decompost control flow graph into acylic, hierarchic intervals.
17  *
18  *  @author Goetz Lindenmaier
19  *
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.
24  *
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.
28  */
29
30 #ifndef _INTERVAL_ANALYSIS_H_
31 #define _INTERVAL_ANALYSIS_H_
32
33
34 #include "firm_types.h"
35
36 /** The ins of regions:  regions are loops or blocks.
37  *
38  *  @todo: we should make a type for the regions, or reuse loop_element.
39  */
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);
43
44
45 /** The number of out edges of a region.
46  *
47  *  This number is useful for evaluation of execution frequencies.
48  */
49 int get_region_n_outs(void *region);
50
51 /** The number of exception out edges of a region.
52  *
53  *  This number is useful for evaluation of execution frequencies.
54  */
55 int get_region_n_exc_outs(void *region);
56
57 /** The control flow operation corresponding to the loop-region in at
58  *  position pos.
59  */
60 void *get_loop_cfop(void *region, int pos);
61
62
63 /** The algorithm to construct the interval graph.
64  *
65  *  Constructs the cf loop tree and leaves a valid version of it.
66  *
67  *  @todo: @@@ add flag that states correctness of interval analysis information
68  *  to irg.
69  **/
70 void construct_intervals(ir_graph *irg);
71
72
73 /** frees interval information of all graphs. */
74 void free_intervals(void);
75
76
77 /** dump a graph with the intervals. File name suffix "-interval". */
78 void dump_interval_graph(ir_graph *irg, const char *suffix);
79
80
81 #define DDMR(X) if(is_ir_node(X)) DDMN(X); else DDML(X)
82
83
84 #endif /* _INTERVAL_ANALYSIS_H_ */