Typo fixed.
[libfirm] / ir / ana / cgana.h
1 /* -------------------------------------------------------------------
2  * $Id$
3  * -------------------------------------------------------------------
4  * Intraprozedurale Analyse zur Abschaetzung der Aufrulrelation. Es
5  * wird eine Menge von freien Methoden und anschliessend die an den
6  * Call-Operationen aufrufbaren Methoden bestimmt.
7  *
8  * Erstellt: Hubert Schmid, 09.06.2002
9  * ---------------------------------------------------------------- */
10
11
12 #ifndef _CGANA_H_
13 #define _CGANA_H_
14
15
16 #include "entity.h"
17
18
19 /* Methoden sind "frei", wenn ihr Funktionszeiger (potentiell)
20  *"explizit" bekannt ist, d.h.:
21  *
22  * - die Methode ist von aussen sichtbar (external_visible).
23  *
24  * - ihr Funktionszeiger ist "frei", d.h. der Funktionszeiger wurde
25  *   nicht ausschliesslich an den entsprechenden Eingang eines
26  *   Call-Knotens weitergegeben, sondern z.B. in den Speicher
27  *   geschrieben, als Parameter uebergeben, ...
28  *
29  * Die main-Methode ist immer in der Menge enthalten.
30  *
31  * Die Links an den "ir_node"s werden geloescht. */
32
33
34
35 /** Analyses a rough estimation of the possible call graph.
36  *
37  *  Bestimmt fuer jede Call-Operation die Menge der aufrufbaren Methode
38  *  und speichert das Ergebnis in der Call-Operation. (siehe
39  *  "set_Call_callee"). Die Methode gibt die Menge der
40  *  "freien" Methoden zurueck, die vom Aufrufer wieder freigegeben
41  *  werden muss (free).
42  *  The algorithm implements roughly Static Class Hierarchy Analysis
43  *  as described in "Optimization of Object-Oriented Programs Using
44  *  Static Class Hierarchy Analysis" by Jeffrey Dean and David Grove
45  *  and Craig Chambers.
46  *
47  *  Performs some optimizations possible by the analysed information:
48  *    - Replace SymConst nodes by Const nodes if possible,
49  *    - Replace (Sel-method(Alloc)) by Const method,
50  *    - Replaces unreachable Sel nodes by Bad  (@@@ was genau meint unreachable?)
51  *    - Replaces Sel-method by Const if the Method is never overwritten */
52 /*  @@@ I assume this can not be called via JNI :-( -- how to obtain the array pointer? */
53 void cgana(int *len, entity ***free_methods);
54
55 /* Optimize the address expressions passed to call nodes.
56  * Performs only the optimizations done by cgana. */
57 /* @@@ move to irgopt ?! */
58 /* @@@ not fully implemented as buggy !!!  */
59 void opt_call_addrs(void);
60 #endif /* _CGANA_H_ */