554866e0f6f63e30109726e453a14f2fe36d71e1
[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   /* do we need some kind of environment here? */
106   pto_graph (graph, 0);
107
108   DBGPRINT (1, (stdout, "END   PTO\n"));
109 }
110
111 /* Dump all interesting stuff to a bunch of files */
112 void pto_dump ()
113 {
114   pto_dump_names ("names.dot");
115 }
116
117 void pto_cleanup ()
118 {
119   /* todo: clean up our own mess */
120   spaces -= 511;                /* hope that all changes to spaces are
121                                    properly nested */
122   memset (spaces, 0x00, 512);
123   free (spaces);
124
125   /* Cleanup the name module */
126   pto_name_cleanup ();
127   /* Cleanup the Init module */
128   pto_init_cleanup ();
129
130   /* clean up ecg infos */
131   ecg_cleanup ();
132 }
133
134 \f
135 /*
136   $Log$
137   Revision 1.12  2004/12/02 16:17:51  beck
138   fixed config.h include
139
140   Revision 1.11  2004/11/30 15:49:27  liekweg
141   include 'dump'
142
143   Revision 1.10  2004/11/30 14:46:41  liekweg
144   Correctly reset main graph; remove dbugging stuff
145
146   Revision 1.9  2004/11/26 16:01:56  liekweg
147   debugging annotations
148
149   Revision 1.8  2004/11/24 14:54:21  liekweg
150   Added pto.c as main entry point
151
152
153 */