Add is_cdep_on
[libfirm] / ir / ana / execution_frequency.h
1 /*
2  * Project:     libFIRM
3  * File name:   ir/ana/execution_frequency.h
4  * Purpose:     Compute an estimate of basic block executions.
5  * Author:      Goetz Lindenmaier
6  * Modified by:
7  * Created:     5.11.2004
8  * CVS-ID:      $Id$
9  * Copyright:   (c) 2004 Universität Karlsruhe
10  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
11  */
12
13 #ifndef _EXECUTION_FREQUENCY_H_
14 #define _EXECUTION_FREQUENCY_H_
15
16 /** @file execution_frequency.h
17  *
18  * Estimate exectution freqencies of blocks.
19  *
20  * @author Goetz Lindenmaier
21  *
22  * We assume the start block of a procedure is executed once.  Based on this we
23  * compute the execution freqency of all blocks.
24  *
25  * The computation of the freqencies depends on the count of exception control
26  * flow computed during the interval analysis.  The interval analysis again
27  * depends on stuff computed here.
28  */
29
30 #include "irnode.h"
31 #include "irgraph.h"
32
33 /* A proj from a Cond that goes to an exception handler. */
34 int is_fragile_Proj(ir_node *n);
35
36 /** Returns the number of times the block/region is executed according to
37  *  our estimate. Gives a number relative to the Start node of the procedure
38  *  the block is in, which is weighted with 1. */
39 double get_irn_exec_freq   (ir_node *n);
40 double get_Block_exec_freq (ir_node *b);
41 double get_region_exec_freq(void *reg);
42
43 /** Compute the execution frequency for all blocks in the given
44  *  graph.
45  *
46  * @param irg                   The graph to be analyzed.
47  * @param default_loop_weight   The default number of executions of a loop.
48  * @param exception_probability The probability that a fragile operation causes an exception.
49  *
50  * Uses link field.
51  */
52 void compute_execution_frequency(ir_graph *irg, int default_loop_weight, double exception_probability);
53
54 /** Compute the execution frequency for all graphs.
55  *
56  * @param default_loop_weight   The default number of executions of a loop.
57  * @param exception_probability The probability that a fragile operation causes an exception.
58  *
59  */
60 void compute_execution_frequencies(int default_loop_weight, double exception_probability);
61
62 /** Free occupied memory, reset for all graphs. */
63 void free_execution_frequency(void);
64
65 /** State of execution freqencies for graphs and the whole program.
66  *
67  * The exec_freq_state in irp is consistent, if the state of all graphs is consistent.
68  * It is none, if the state of all graphs is none.  Else it is inconsistent. */
69 typedef enum {
70   exec_freq_none,             /**< Execution frequencies are not computed, no memory is
71                                    allocated, access fails. */
72   exec_freq_consistent,       /**< Execution frequency information is computed and correct. */
73   exec_freq_inconsistent      /**< Execution frequency is computed but the graph has been
74                                    changed since. */
75 } exec_freq_state;
76
77 exec_freq_state get_irg_exec_freq_state(ir_graph *irg);
78 void            set_irg_exec_freq_state(ir_graph *irg, exec_freq_state s);
79 /* Sets irg and irp exec freq state to inconsistent if it is set to consistent. */
80 void            set_irg_exec_freq_state_inconsistent(ir_graph *irg);
81
82 exec_freq_state get_irp_exec_freq_state(void);
83 /* Sets irp and all irg exec freq states to inconsistent if it is set to consistent. */
84 void            set_irp_exec_freq_state_inconsistent(void);
85
86
87
88
89 #endif /* _EXECUTION_FREQUENCY_H_ */