used ircons_t.h now
[libfirm] / ir / ir / irprog.h
index 21f8e5e..03c3edf 100644 (file)
@@ -1,6 +1,14 @@
-/* Copyright (C) 2000 by Universitaet Karlsruhe
-* All rights reserved.
-*/
+/*
+ * Project:     libFIRM
+ * File name:   ir/ir/irprog.h
+ * Purpose:     Entry point to the representation of a whole program.
+ * Author:      Goetz Lindenmaier
+ * Modified by:
+ * Created:     2000
+ * CVS-ID:      $Id$
+ * Copyright:   (c) 2000-2003 Universität Karlsruhe
+ * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
+ */
 
 /**
 * @file irprog.h
 *
 * This file defines a construct that keeps all information about a
 * program:
+*   - A reference point to the method to be executed on program start.
 *   - A list of all procedures.
 *   - A list of all types.
-*   - A global type that can be thought of as a god-class containing all
-*     global variables and procedures.  This is not the base class of
+*   - A global type that contais all global variables and procedures that do
+*     not belong to a class.  This type represents the data segment of the
+*     program.  It is not the base class of
 *     all classes in a class hierarchy (as, e.g., "object" in java).
-*   - (An obstack containing global things, e.g., the above mentioned lists.)
+*   - A degenerated graph that contains constant expressions.
+*   - interprocedural outs state.
+*   - a flag indicating validity of the interprocedural representation.
+*   - the output file name
 */
 
-/* $Id$ */
-
 # ifndef _IRPROG_H_
 # define _IRPROG_H_
 
 # include "irnode.h"
 # include "type.h"
 
+
 /**
  * Datastructure that holds central information about a program
  *
@@ -70,6 +82,10 @@ void init_irprog(void);
    Automatically called by init_firm() through init_irprog.  */
 ir_prog *new_ir_prog (void);
 
+/** frees all memory used by irp.  Types in type list and irgs in irg
+    list must be freed by hand before. */
+void     free_ir_prog(void);
+
 /** Gets the main routine of the compiled program. */
 ir_graph *get_irp_main_irg(void);
 
@@ -80,7 +96,7 @@ void      set_irp_main_irg(ir_graph *main_irg);
 void      add_irp_irg(ir_graph *irg);
 
 /** Removes irg from the list of irgs, deallocates it and
-   shrinks the list by one. */
+    shrinks the list by one. */
 void      remove_irp_irg(ir_graph *irg);
 
 /** Returns the number of ir graphs in the irp. */
@@ -111,10 +127,13 @@ void  set_irp_type(int pos, type *typ);
 /** Returns the "global" type of the irp. */
 type *get_glob_type(void);
 
+/** File name / executable name or the like. Initially NULL! **/
+void   set_irp_prog_name (ident *name);
+ident *get_irp_prog_ident(void);
+const char  *get_irp_prog_name (void);
 
 /**
  *   Returns an irgraph that only contains constant
- *
  *   expressions for constant entities.
  *   Do not use any access function for this graph, do not generate code
  *   for this graph.  This graph contains only one block.  The constant
@@ -123,4 +142,11 @@ type *get_glob_type(void);
  */
 ir_graph *get_const_code_irg(void);
 
+irg_outs_state get_irp_ip_outs_state(void);
+void           set_irp_ip_outs_inconsistent(void);
+
+/* @@@ Must this be global visible? */
+void           set_irp_ip_outedges(ir_node ** ip_outedges);
+ir_node**      get_irp_ip_outedges(void);
+
 #endif /* ifndef _IRPROG_H_ */