# include "irop.h"
# include "irmode.h"
# include "type.h"
+# include "irextbb.h"
# include "dbginfo.h"
/**
void set_Block_cfgpred (ir_node *node, int pos, ir_node *pred);
bool get_Block_matured (ir_node *node);
void set_Block_matured (ir_node *node, bool matured);
+
+/** A visited flag only for block nodes.
+ * @see also: get_irn_visited() inc_irg_visited() inc_irg_block_visited()*/
unsigned long get_Block_block_visited (ir_node *node);
void set_Block_block_visited (ir_node *node, unsigned long visit);
ir_node *set_Block_dead(ir_node *block);
/* frees the memory. */
void remove_Block_cg_cfgpred_arr(ir_node * node);
+/** returns the extended basic block a block belongs to */
+ir_extblk *get_Block_extbb(const ir_node *block);
+/** sets the extended basic block a block belongs to */
+void set_Block_extbb(ir_node *block, ir_extblk *extblk);
+
/** Return the number of Keep alive node. */
int get_End_n_keepalives(ir_node *end);
entity *get_Sel_entity (ir_node *node); /* entity to select */
void set_Sel_entity (ir_node *node, entity *ent);
+/** InstOf access */
+type *get_InstOf_ent (ir_node *node);
+void set_InstOf_ent (ir_node *node, type *ent);
+ir_node *get_InstOf_store (ir_node *node);
+void set_InstOf_store (ir_node *node, ir_node *obj);
+ir_node *get_InstOf_obj (ir_node *node);
+void set_InstOf_obj (ir_node *node, ir_node *obj);
+
/**
* Projection numbers for result of Call node: use for Proj nodes!
*/
an exception */
pn_Call_max = 5 /**< number of projections from a Call */
} pn_Call; /* Projection numbers for Call. */
+#define pn_Call_M pn_Call_M_regular
ir_node *get_Call_mem (ir_node *node);
void set_Call_mem (ir_node *node, ir_node *mem);
} pn_Cmp; /* Projection numbers for Cmp */
/* #define not_mask pn_Cmp_Leg */
+/** returns the pnc name from an pnc constant */
const char *get_pnc_string(int pnc);
+
+/** Calculates the negated (Complement(R)) pnc condition. */
int get_negated_pnc(int pnc);
+
+/** Calculates the inversed (R^-1) pnc condition, i.e., "<" --> ">" */
+int get_inversed_pnc(int pnc);
+
ir_node *get_Cmp_left (ir_node *node);
void set_Cmp_left (ir_node *node, ir_node *left);
ir_node *get_Cmp_right (ir_node *node);
type *get_Cast_type (ir_node *node);
void set_Cast_type (ir_node *node, type *to_tp);
+/** Checks for upcast.
+ *
+ * Returns true if the Cast node casts a class type to a super type.
+ * Works also for pointers to classes (recursively).
+ */
+int is_Cast_upcast(ir_node *node);
+
+/** Checks for downcast.
+ *
+ * Returns true if the Cast node casts a class type to a sub type.
+ * Works also for pointers to classes (recursively).
+ */
+int is_Cast_downcast(ir_node *node);
+
+
/** Returns true if n is Phi or Filter in interprocedural_view.
Returns false if irg in phase building and the Phi has zero
predecessors: it's a Phi0. */
type *get_Proj_type (ir_node *node);
/** Return the predecessor of a Proj node. */
-ir_node *get_Proj_pred (ir_node *node);
+ir_node *get_Proj_pred (const ir_node *node);
void set_Proj_pred (ir_node *node, ir_node *pred);
/** Return the projection number of a Proj node. */
-long get_Proj_proj (ir_node *node);
+long get_Proj_proj (const ir_node *node);
void set_Proj_proj (ir_node *node, long proj);
ir_node **get_Tuple_preds_arr (ir_node *node);
ir_node *skip_Tuple (ir_node *node);
/** returns operand of node if node is a Cast */
ir_node *skip_Cast (ir_node *node);
+/** returns operand of node if node is a Confirm */
+ir_node *skip_Confirm (ir_node *node);
+/** Skip all high-level Operations. */
+ir_node *skip_HighLevel(ir_node *node);
+/** returns true if irn is a Const node. */
+int is_Const(const ir_node *node);
/** returns true if node is a Bad node. */
int is_Bad (const ir_node *node);
/** returns true if the node is not a Block */
/** Output the firm kind of the node */
#define DDMK(X) printf("%s(l.%i) %s: %p\n", __MYFUNC__, __LINE__, print_firm_kind(X), (void *)(X));
/** Output information about a node */
-#define DDMN(X) printf("%s(l.%i) %s%s: %ld (%p)\n", __MYFUNC__, __LINE__, get_irn_opname(X), get_mode_name(get_irn_mode(X)), get_irn_node_nr(X), (void *)(X))
+
+/*#define DDMN(X) printf("%s(l.%i) %s%s: %ld (%p)\n", __MYFUNC__, __LINE__, get_irn_opname(X), get_mode_name(get_irn_mode(X)), get_irn_node_nr(X), (void *)(X))*/
+int dump_node_opcode(FILE *F, ir_node *n);
+#define DDMN(X) do { printf("%s(l.%i) ", __MYFUNC__, __LINE__); dump_node_opcode(stdout, X); printf(": %ld (%p)\n", get_irn_node_nr(X), (void *)(X)); } while (0)
+
/** Output information about a node and its block */
#define DDMNB(X) printf("%s%s: %ld (in block %ld)\n", get_irn_opname(X), get_mode_name(get_irn_mode(X)), get_irn_node_nr(X), get_irn_node_nr(get_nodes_block(X)))
/** Output information about a type */