#include "irprog.h"
#include "field_temperature.h"
#include "irphase.h"
+#include "bitset.h"
#include "pset.h"
#include "set.h"
of all bits and must be dividable by vector_elem */
/* ----------------------------------------------------------------------- */
- tarval *min; /**< the minimum value that can be expressed */
- tarval *max; /**< the maximum value that can be expressed */
- tarval *null; /**< the value 0 */
- tarval *one; /**< the value 1 */
- tarval *minus_one; /**< the value -1 */
- tarval *all_one; /**< the value ~0 */
+ ir_tarval *min; /**< the minimum value that can be expressed */
+ ir_tarval *max; /**< the maximum value that can be expressed */
+ ir_tarval *null; /**< the value 0 */
+ ir_tarval *one; /**< the value 1 */
+ ir_tarval *minus_one; /**< the value -1 */
+ ir_tarval *all_one; /**< the value ~0 */
ir_mode *eq_signed; /**< For pointer modes, the equivalent signed integer one. */
ir_mode *eq_unsigned; /**< For pointer modes, the equivalent unsigned integer one. */
void *link; /**< To store some intermediate information */
/* ir node attributes */
-/** first attribute of Bad and Block nodes */
+/** first attribute of Bad, Block, Anchor nodes */
typedef struct {
ir_graph *irg; /**< The graph this block like node belongs to. */
} irg_attr;
+typedef struct {
+ irg_attr irg;
+} bad_attr;
+
/** Block attributes */
typedef struct {
/* General attributes */
/* Attributes private to construction: */
unsigned is_matured:1; /**< If set, all in-nodes of the block are fixed. */
unsigned is_dead:1; /**< If set, the block is dead (and could be replace by a Bad. */
- unsigned is_mb_head:1; /**< Set if this block is a macroblock head. */
unsigned marked:1; /**< Can be set/unset to temporary mark a block. */
ir_node **graph_arr; /**< An array to store all parameters. */
/* Attributes holding analyses information */
ir_node ** in_cg; /**< array with predecessors in
* interprocedural_view, if they differ
* from intraprocedural predecessors */
- unsigned *backedge; /**< Raw Bitfield n set to true if pred n is backedge.*/
- unsigned *cg_backedge; /**< Raw Bitfield n set to true if pred n is interprocedural backedge. */
+ bitset_t *backedge; /**< Bitfield n set to true if pred n is backedge.*/
+ bitset_t *cg_backedge; /**< Bitfield n set to true if pred n is interprocedural backedge. */
ir_extblk *extblk; /**< The extended basic block this block belongs to. */
ir_region *region; /**< The immediate structural region this block belongs to. */
- unsigned mb_depth; /**< The macroblock depth: A distance from the macroblock header */
ir_entity *entity; /**< entitiy representing this block */
ir_node *phis; /**< The list of Phi nodes in this block. */
} cond_attr;
/** Const attributes. */
-typedef struct {
- tarval *tarval; /**< the target value */
- ir_type *tp; /**< the source type, for analyses. default: type_unknown. */
+typedef struct const_attr {
+ ir_tarval *tarval; /**< the target value */
} const_attr;
/** SymConst attributes. */
typedef struct {
symconst_symbol sym; // old tori
symconst_kind kind;
- ir_type *tp; /**< the source type, for analyses. default: type_unknown. */
} symconst_attr;
/** Sel attributes. */
op_pin_state pin_state; /**< the pin state for operations that might generate a exception:
If it's know that no exception will be generated, could be set to
op_pin_state_floats. */
- struct ir_node **frag_arr; /**< For Phi node construction in case of exception */
} except_attr;
/** Call attributes. */
ir_type *type; /**< the type of which the object pointer must be */
} io_attr;
-/** Filter attributes. */
-typedef struct {
- long proj; /**< contains the result position to project (Proj) */
- ir_node **in_cg; /**< array with interprocedural predecessors (Phi) */
- unsigned *backedge; /**< Raw Bitfield n set to true if pred n is backedge. */
-} filter_attr;
-
-/** CallBegin attributes. */
-typedef struct {
- ir_node *call; /**< Associated Call-operation. */
-} callbegin_attr;
-
/** Cast attributes. */
typedef struct {
ir_type *type; /**< Type of the casted node. */
typedef struct {
ir_node *next; /**< Points to the next Phi in the Phi list of a block. */
union {
- unsigned *backedge; /**< Raw Bitfield: bit n is set to true if pred n is backedge. */
+ bitset_t *backedge; /**< Raw Bitfield: bit n is set to true if pred n is backedge. */
int pos; /**< For Phi0. Used to remember the value defined by
this Phi node. Needed when the Phi is completed
to call get_r_internal_value() to find the
some have more. Their name is 'irnodename_attr' */
typedef union {
irg_attr irg; /**< For Blocks and Bad: its belonging irg */
+ bad_attr bad; /**< for Bads: irg reference */
block_attr block; /**< For Block: Fields needed to construct it */
cond_attr cond; /**< For Cond. */
const_attr con; /**< For Const: contains the value of the constant and a type */
sel_attr sel; /**< For Sel. */
call_attr call; /**< For Call. */
builtin_attr builtin; /**< For Builtin. */
- callbegin_attr callbegin; /**< For CallBegin. */
alloc_attr alloc; /**< For Alloc. */
free_attr free; /**< For Free. */
io_attr instof; /**< For InstOf */
phi_attr phi; /**< For Phi. */
long proj; /**< For Proj: contains the result position to project */
confirm_attr confirm; /**< For Confirm: compare operation and region. */
- filter_attr filter; /**< For Filter */
except_attr except; /**< For Phi node construction in case of exceptions */
copyb_attr copyb; /**< For CopyB operation */
bound_attr bound; /**< For Bound operation */
/**
* Edge info to put into an irn.
*/
-typedef struct _irn_edge_kind_info_t {
+typedef struct irn_edge_kind_info_t {
struct list_head outs_head; /**< The list of all outs. */
unsigned edges_built : 1; /**< Set edges where built for this node. */
unsigned out_count : 31; /**< Number of outs in the list. */
/**
* A Def-Use edge.
*/
-typedef struct _ir_def_use_edge {
+typedef struct ir_def_use_edge {
ir_node *use; /** The use node of that edge. */
int pos; /** The position of this edge in use's input array. */
} ir_def_use_edge;
/**
* Edge info to put into an irg.
*/
-typedef struct _irg_edge_info_t {
+typedef struct irg_edge_info_t {
ir_edgeset_t edges; /**< A set containing all edges of the current graph. */
struct list_head free_edges; /**< list of all free edges. */
struct obstack edges_obst; /**< Obstack, where edges are allocated on. */
anchor_start_block, /**< block the start node will belong to */
anchor_end, /**< end node of this ir_graph */
anchor_start, /**< start node of this ir_graph */
- anchor_end_reg, /**< end node of this ir_graph */
- anchor_end_except, /**< end node of this ir_graph */
anchor_initial_exec, /**< methods initial control flow */
anchor_frame, /**< methods frame */
anchor_tls, /**< pointer to the thread local storage containing all
int index; /**< a unique number for each graph */
ir_phase *phases[PHASE_LAST+1]; /**< Phase information. */
void *be_data; /**< backend can put in private data here */
+
+ unsigned dump_nr; /**< number of graph dumps */
#ifdef DEBUG_libfirm
int n_outs; /**< Size wasted for outs */
long graph_nr; /**< a unique graph number for each
ir_graph *main_irg; /**< The entry point to the compiled program
or NULL if no point exists. */
ir_graph **graphs; /**< A list of all graphs in the ir. */
- ir_graph **pseudo_graphs; /**< A list of all pseudo graphs in the ir. See pseudo_irg.c */
ir_graph *const_code_irg; /**< This ir graph gives the proper environment
to allocate nodes the represent values
of constant entities. It is not meant as
/* -- states of and access to generated information -- */
irg_phase_state phase_state; /**< The state of construction. */
- ip_view_state ip_view; /**< The state of interprocedural view. */
-
irg_outs_state outs_state; /**< The state of out edges of ir nodes. */
ir_node **ip_outedges; /**< A huge Array that contains all out edges
in interprocedural view. */
ir_label_t last_label_nr; /**< The highest label number for generating unique labels. */
int max_irg_idx; /**< highest unused irg index */
long max_node_nr; /**< to generate unique numbers for nodes. */
+ unsigned dump_nr; /**< number of program info dumps */
#ifndef NDEBUG
ir_resources_t reserved_resources; /**< Bitset for tracking used global resources. */
#endif