fix recursion handling
[libfirm] / ir / ana2 / pto.c
1 /* -*- c -*- */
2
3 /*
4    Project:     libFIRM
5    File name:   ir/ana/pto.c
6    Purpose:     Entry to PTO
7    Author:      Florian
8    Modified by:
9    Created:     Tue Nov 23 18:37:09 CET 2004
10    CVS-ID:      $Id$
11    Copyright:   (c) 1999-2004 Universität Karlsruhe
12    Licence:     This file is protected by the GPL -  GNU GENERAL PUBLIC LICENSE.
13 */
14
15 #ifdef HAVE_CONFIG_H
16 # include "config.h"
17 #endif
18
19 /*
20  pto: Entry to PTO
21 */
22
23 #ifdef HAVE_STRING_H
24 # include <string.h>
25 #endif
26
27 # include "pto.h"
28
29 # include "irnode_t.h"
30 # include "irprog.h"
31 # include "xmalloc.h"
32
33 # include "pto_debug.h"
34 # include "pto_init.h"
35 # include "pto_name.h"
36 # include "pto_ctx.h"
37 # include "ecg.h"
38
39 /* Local Defines: */
40
41 /* Local Data Types: */
42
43 /* Local Variables: */
44 extern char *spaces;
45
46 /* Local Prototypes: */
47
48 /* ===================================================
49    Local Implementation:
50    =================================================== */
51
52 /* Helper to pto_init */
53 static void pto_init_graph_wrapper (graph_info_t *ginfo, void *__unused)
54 {
55   ir_graph *graph = ginfo->graph;
56
57   pto_init_graph (graph);
58 }
59
60 /* ===================================================
61    Exported Implementation:
62    =================================================== */
63 /* Initialise the module (not in pto_init.c because it's the entry to pto) */
64 void pto_init (int lvl)
65 {
66   set_dbg_lvl (lvl);
67
68   ecg_init (1);
69
70   /* Initialise the name module */
71   pto_name_init ();
72
73   /* Initialise the init module */
74   pto_init_init ();
75
76   /* allocate ctx-sens names for allocs and set ... etc etc */
77   pto_init_type_names ();
78
79   /* initialise all graphs with the static names */
80   ecg_iterate_graphs (pto_init_graph_wrapper, NULL);
81
82   /* debugging only */
83   spaces = (char*) xmalloc (512 * sizeof (char));
84   memset (spaces, ' ', 512);
85   spaces += 511;
86   *spaces = '\0';
87
88   /* initialise for the CTX-sensitive ecg-traversal */
89   set_curr_ctx (get_main_ctx ());
90 }
91
92 void pto_run ()
93 {
94   ir_graph *graph = get_irp_main_irg ();
95
96   pto_reset_graph_pto (graph, 0);
97   fake_main_args (graph);
98
99   DBGPRINT (1, (stdout, "START PTO\n"));
100   DBGPRINT (1, (stdout, "START GRAPH (0x%08x) of \"%s.%s\"\n",
101                 (int) graph,
102                 get_type_name (get_entity_owner (get_irg_entity (graph))),
103                 get_entity_name (get_irg_entity (graph))));
104
105   /* we need some kind of environment here: NULL */
106   ir_graph *save = get_current_ir_graph ();
107   pto_graph (graph, 0, NULL);
108   set_current_ir_graph (save);
109
110   DBGPRINT (1, (stdout, "END   PTO\n"));
111 }
112
113 /* Dump all interesting stuff to a bunch of files */
114 void pto_dump ()
115 {
116   pto_dump_names ("names.dot");
117 }
118
119 void pto_cleanup ()
120 {
121   /* todo: clean up our own mess */
122   spaces -= 511;                /* hope that all changes to spaces are
123                                    properly nested */
124   memset (spaces, 0x00, 512);
125   free (spaces);
126
127   /* Cleanup the name module */
128   pto_name_cleanup ();
129   /* Cleanup the Init module */
130   pto_init_cleanup ();
131
132   /* clean up ecg infos */
133   ecg_cleanup ();
134 }
135
136 \f
137 /*
138   $Log$
139   Revision 1.13  2004/12/20 17:34:34  liekweg
140   fix recursion handling
141
142   Revision 1.12  2004/12/02 16:17:51  beck
143   fixed config.h include
144
145   Revision 1.11  2004/11/30 15:49:27  liekweg
146   include 'dump'
147
148   Revision 1.10  2004/11/30 14:46:41  liekweg
149   Correctly reset main graph; remove dbugging stuff
150
151   Revision 1.9  2004/11/26 16:01:56  liekweg
152   debugging annotations
153
154   Revision 1.8  2004/11/24 14:54:21  liekweg
155   Added pto.c as main entry point
156
157
158 */