1 /* -------------------------------------------------------------------
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.
8 * Erstellt: Hubert Schmid, 09.06.2002
9 * ---------------------------------------------------------------- */
19 /* Methoden sind "frei", wenn ihr Funktionszeiger (potentiell)
20 *"explizit" bekannt ist, d.h.:
22 * - die Methode ist von aussen sichtbar (external_visible).
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, ...
29 * Die main-Methode ist immer in der Menge enthalten.
31 * Die Links an den "ir_node"s werden geloescht. */
35 /** Analyses a rough estimation of the possible call graph.
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
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
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);
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_ */