* @author Goetz Lindenmaier
* @date 2000
* @version $Id$
- * @summary
+ * @brief
* Intermediate Representation (IR) of a program.
*
* This file defines a construct that keeps all information about a
/** like constructors, but functions are executed on module exit */
IR_SEGMENT_DESTRUCTORS,
- IR_SEGMENT_COUNT
+ IR_SEGMENT_LAST = IR_SEGMENT_DESTRUCTORS
} ir_segment_t;
-/**
- * Data structure that holds central information about a program
- * or a module.
- * One irp is created by libFirm on construction, so irp should never be NULL.
- *
- * - main_irg: The ir graph that is the entry point to the program.
- * (Anything not reachable from here may be optimized away
- * if this irp represents a whole program.
- * - irg: List of all ir graphs in the program or module.
- * - 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
- * of this module.
- */
-typedef struct ir_prog ir_prog;
-
/**
* A variable pointing to the current irp (program or module).
* This variable should be considered constant. Moreover, one should use get_irp()
/**
* Creates a new ir_prog (a module or compilation unit),
* returns it and sets irp with it.
+ *
+ * @param name the name of this irp (module)
*/
-ir_prog *new_ir_prog(void);
+ir_prog *new_ir_prog(const char *name);
/** frees all memory used by irp. Types in type list and irgs in irg
* list must be freed by hand before. */
*/
ir_type *get_segment_type(ir_segment_t segment);
+/**
+ * @brief Changes a segment segment type for the program.
+ * (use with care)
+ */
+void set_segment_type(ir_segment_t segment, ir_type *new_type);
+
/**
* Returns the "global" type of the irp.
* Upon creation this is an empty class type.
/**
* Returns the "thread local storage" type of the irp.
* Upon creation this is an empty struct type.
+ * This is a convenience function for get_segment_type(IR_SEGMENT_THREAD_LOCAL)
*/
ir_type *get_tls_type(void);
shrinks the list by one. */
void remove_irp_type(ir_type *typ);
-/** Returns the number of all types in the irp. */
+/**
+ * Returns the number of all types in the irp.
+ * @deprecated
+ */
int get_irp_n_types(void);
-/** Returns the type at position pos in the irp. */
+/**
+ * Returns the type at position pos in the irp.
+ * @deprecated
+ */
ir_type *get_irp_type(int pos);
-/** Overwrites the type at position pos with another type. */
+/**
+ * Overwrites the type at position pos with another type.
+ * @deprecated
+ */
void set_irp_type(int pos, ir_type *typ);
/** Returns the number of all modes in the irp. */
irg_outs_state get_irp_ip_outs_state(void);
void set_irp_ip_outs_inconsistent(void);
+/**
+ * Creates an ir_prog pass for set_irp_phase_state().
+ *
+ * @param name the name of this pass or NULL
+ * @param state the state to set
+ *
+ * @return the newly created ir_prog pass
+ */
+ir_prog_pass_t *set_irp_phase_state_pass(const char *name, irg_phase_state state);
irg_callee_info_state get_irp_callee_info_state(void);
void set_irp_callee_info_state(irg_callee_info_state s);