X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firnode.h;h=5a97ff2d9d5f1b648b2b950f5e112854c250d1d1;hb=c23f6e062025e00e102d2e1ca95b48e696ad8cca;hp=e7fcdf6aac123a9e1f48759b7ca7c91ce0d7ad13;hpb=612d040e0d231331a4a01a74a6742baf4b46c85c;p=libfirm diff --git a/ir/ir/irnode.h b/ir/ir/irnode.h index e7fcdf6aa..5a97ff2d9 100644 --- a/ir/ir/irnode.h +++ b/ir/ir/irnode.h @@ -20,6 +20,7 @@ # include "irop.h" # include "irmode.h" # include "type.h" +# include "irextbb.h" # include "dbginfo.h" /** @@ -273,6 +274,11 @@ ir_node *get_Block_cg_cfgpred(ir_node * node, int pos); /* 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); @@ -449,6 +455,14 @@ void set_Sel_index (ir_node *node, int pos, ir_node *index); 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! */ @@ -462,6 +476,7 @@ typedef enum { 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); @@ -663,8 +678,15 @@ typedef enum { } 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); @@ -840,10 +862,10 @@ void set_Sync_pred (ir_node *node, int pos, ir_node *pred); 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); @@ -889,6 +911,12 @@ ir_node *skip_Id (ir_node *node); /* Same as skip_nop. */ 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 */ @@ -982,7 +1010,11 @@ void dump_irn(ir_node *n); /** 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 */