#include "irmemory.h"
#include "callgraph.h"
#include "irprog.h"
-#include "irphase.h"
#include "bitset.h"
#include "pset.h"
#include "obst.h"
#include "vrp.h"
-/**
- * List of phases. (We will add a register/unregister interface if managing
- * this gets too tedious)
- */
-typedef enum ir_phase_id {
- PHASE_FIRST,
- PHASE_VRP = PHASE_FIRST,
- PHASE_LAST = PHASE_VRP
-} ir_phase_id;
-ENUM_COUNTABLE(ir_phase_id)
+struct ir_nodemap {
+ void **data; /**< maps node indices to void* */
+};
/** The type of an ir_op. */
struct ir_op {
unsigned size; /**< size of the mode in Bits. */
unsigned sign:1; /**< signedness of this mode */
unsigned int modulo_shift; /**< number of bits a values of this mode will be shifted */
- unsigned vector_elem; /**< if this is not equal 1, this is a vector mode with
- vector_elem number of elements, size contains the size
- of all bits and must be dividable by vector_elem */
/* ----------------------------------------------------------------------- */
ir_tarval *min; /**< the minimum value that can be expressed */
size_t max_depth; /**< Maximum depth of all Call nodes to irg. */
} cg_callee_entry;
+typedef struct ir_vrp_info {
+ struct ir_nodemap infos;
+ struct obstack obst;
+} ir_vrp_info;
+
/**
* An ir_graph holds all information for a procedure.
*/
pset *value_table; /**< Hash table for global value numbering (cse)
for optimizing use in iropt.c */
ir_def_use_edge *outs; /**< Space for the Def-Use arrays. */
+ ir_vrp_info vrp; /**< vrp info */
ir_loop *loop; /**< The outermost loop for this graph. */
void *link; /**< A void* field to link any information to
ir_node **idx_irn_map; /**< Array mapping node indexes to nodes. */
size_t index; /**< a unique number for each graph */
- ir_phase *phases[PHASE_LAST+1]; /**< Phase information. */
+ /** extra info which should survive accross multiple passes */
void *be_data; /**< backend can put in private data here */
unsigned dump_nr; /**< number of graph dumps */