X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firprog.h;h=296c43471c007118dafd997f9eef1c18fe0e225d;hb=e080458ff272636cab2864feffecf4dbe62e33f3;hp=961857c3514aee13fcf044fba6e551333024d3bb;hpb=3841faf71dcf8efa8312d0ebd9941f1e0fc08d72;p=libfirm diff --git a/ir/ir/irprog.h b/ir/ir/irprog.h index 961857c35..296c43471 100644 --- a/ir/ir/irprog.h +++ b/ir/ir/irprog.h @@ -12,44 +12,92 @@ ** - 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 ** all classes in a class hierarchy (as, e.g., "object" in java). -** - An obstack containing global things, e.g., the above mentioned lists. +** - (An obstack containing global things, e.g., the above mentioned lists.) */ +/* $Id$ */ + # ifndef _IRPROG_H_ # define _IRPROG_H_ # include "irnode.h" # include "type.h" -/*# include "obst.h"*/ - -typedef struct ir_prog { - firm_kind kind; - ir_graph **graphs; /* all graphs in the ir */ - type **types; /* all types in the ir */ - type_class *glob_type; /* global type. Class as it can have - fields and procedures. Does this work? - Better name??? @@@ */ - /*struct obstack *obst; * @@@ Should we place all types and entities themselves - on an obstack, too? */ -} ir_prog; + +/***** irprog/irprog + * + * NAME Datastructure that holds central information about a program + * + * NOTE Preliminary documentation ;-) + * + * SOURCE + */ + +/***s* irprog/irprog + * + * NAME Datastructure that holds central information about a program + * + * NOTE Preliminary documentation ;-) + * + * FIELDS + * main_irg The ir graph that is the entry point to the program. + * (Anything not reachable from here may be optimized away. + * If we want to translate libraries or the like correctly + * we must replace this by a list.) + * irg List of all ir graphs in the program. + * type A list containing all types known to the translated program. + * Some types can have several entries in this list (as a result of + * using exchange_types()). + * glob_type The unique global type that is owner of all global entities. + * + * SOURCE + */ +typedef struct ir_prog ir_prog; /* A variable from where everything in the ir can be accessed. */ -ir_prog *irp; +extern ir_prog *irp; -/* initializes ir_prog. Calles the constructor for an ir_prog. */ +/* initializes ir_prog. Calls the constructor for an ir_prog. */ void init_irprog(void); /* Creates a new ir_prog, returns it and sets irp with it. - Automatically called by init_firm through init_prog. */ + Automatically called by init_firm through init_irprog. */ ir_prog *new_ir_prog (void); - -/** Functions to access the fields of ir_prog **/ -type_class *get_glob_type(void); +/* Access the main routine of the compiled program. */ +ir_graph *get_irp_main_irg(); +void set_irp_main_irg(ir_graph *main_irg); /* Adds irg to the list of ir graphs in irp. */ void add_irp_irg(ir_graph *irg); +/* Removes irg from the list or irgs, shrinks the list by one. + @@@ does not work properly. */ +void remove_irp_irg(ir_graph *irg); +int get_irp_n_irgs(); +ir_graph *get_irp_irg(int pos); +void set_irp_irg(int pos, ir_graph *irg); + /* Adds type to the list of types in irp. */ -void add_irp_type(type *typ); +void add_irp_type(type *typ); +int get_irp_n_types(); +type *get_irp_type(int pos); +void set_irp_type(int pos, type *typ); + +/** Functions to access the fields of ir_prog **/ +type *get_glob_type(void); + +/*****/ + +/***p* irprog/get_const_code_irg + * + * NAME + * get_const_code_irg - Returns an irgraph that only contains constant + * expressions for constant entities. + * SYNOPSIS + * ir_graph *get_const_code_irg(); + * NOTE + * Do not use any access function for this graph, do not generate code + * for this graph. + */ +ir_graph *get_const_code_irg(); #endif /* ifndef _IRPROG_H_ */