X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Firnode.h;h=694a344d1f8971c794a1847e8511857b96495037;hb=9ab8019961f7cb404418142844ab5c14cb99e8b7;hp=be09fdef324e2321f9d20c4097aaa9d1f9dcb3c8;hpb=fd2b8f31e391a6bdc1e0ff9c4e175424f01e3555;p=libfirm diff --git a/include/libfirm/irnode.h b/include/libfirm/irnode.h index be09fdef3..694a344d1 100644 --- a/include/libfirm/irnode.h +++ b/include/libfirm/irnode.h @@ -51,8 +51,6 @@ * * The common fields are: * - * - firm_kind - A firm_kind tag containing k_type. This is useful - * for dynamically checking whether a node is a ir_node. * - arity - The number of predecessors in the Firm graph. * - in - A list with the predecessors in the Firm graph. There are * routines to access individual elements and to obtain the @@ -70,7 +68,7 @@ * Some projection numbers must be always equal to support automatic phi construction */ enum pn_generic { - pn_Generic_M_regular = 0, /**< The memory result. */ + pn_Generic_M = 0, /**< The memory result. */ pn_Generic_X_regular = 1, /**< Execution result if no exception occurred. */ pn_Generic_X_except = 2, /**< The control flow result branching to the exception handler */ pn_Generic_other = 3 /**< First free projection number */ @@ -596,17 +594,14 @@ void set_Sel_entity (ir_node *node, ir_entity *ent); * Projection numbers for result of Call node: use for Proj nodes! */ typedef enum { - pn_Call_M_regular = pn_Generic_M_regular, /**< The memory result. */ + pn_Call_M = pn_Generic_M, /**< The memory result. */ pn_Call_X_regular = pn_Generic_X_regular, /**< The control flow result when no exception occurs. */ pn_Call_X_except = pn_Generic_X_except, /**< The control flow result branching to the exception handler. */ pn_Call_T_result = pn_Generic_other, /**< The tuple containing all (0, 1, 2, ...) results. */ - pn_Call_M_except, /**< The memory result in case the called method terminated with - an exception. */ pn_Call_P_value_res_base, /**< A pointer to the memory region containing copied results passed by value (for compound result types). */ pn_Call_max /**< number of projections from a Call */ } pn_Call; /* Projection numbers for Call. */ -#define pn_Call_M pn_Call_M_regular /** Retrieve the memory input of a Call. */ ir_node *get_Call_mem(const ir_node *node); @@ -627,6 +622,10 @@ void set_Call_param(ir_node *node, int pos, ir_node *param); ir_type *get_Call_type(ir_node *node); /** Sets the type of a call. */ void set_Call_type(ir_node *node, ir_type *tp); +/** Returns non-zero if this call can be a tail-call. */ +unsigned get_Call_tail_call(const ir_node *node); +/** Sets the tail call attribute. */ +void set_Call_tail_call(ir_node *node, unsigned tail_call); /** * Returns non-zero if a Call is surely a self-recursive Call. @@ -665,9 +664,9 @@ void remove_Call_callee_arr(ir_node *node); * Projection numbers for result of Builtin node: use for Proj nodes! */ typedef enum { - pn_Builtin_M = pn_Generic_M_regular, /**< The memory result. */ - pn_Builtin_1_result = pn_Generic_other, /**< first result. */ - pn_Builtin_max /**< number of projections from a Builtin */ + pn_Builtin_M = pn_Generic_M, /**< The memory result. */ + pn_Builtin_1_result = pn_Generic_other, /**< first result. */ + pn_Builtin_max /**< number of projections from a Builtin */ } pn_Builtin; /* Projection numbers for Builtin. */ ir_node *get_Builtin_mem(const ir_node *node); @@ -758,7 +757,7 @@ void set_Quot_resmode(ir_node *node, ir_mode *mode); * Projection numbers for Quot: use for Proj nodes! */ typedef enum { - pn_Quot_M = pn_Generic_M_regular, /**< Memory result. */ + pn_Quot_M = pn_Generic_M, /**< Memory result. */ pn_Quot_X_regular = pn_Generic_X_regular, /**< Execution result if no exception occurred. */ pn_Quot_X_except = pn_Generic_X_except, /**< Execution result if exception occurred. */ pn_Quot_res = pn_Generic_other, /**< Result of computation. */ @@ -778,7 +777,7 @@ void set_DivMod_resmode(ir_node *node, ir_mode *mode); * Projection numbers for DivMod: use for Proj nodes! */ typedef enum { - pn_DivMod_M = pn_Generic_M_regular, /**< Memory result. */ + pn_DivMod_M = pn_Generic_M, /**< Memory result. */ pn_DivMod_X_regular = pn_Generic_X_regular, /**< Execution result if no exception occurred. */ pn_DivMod_X_except = pn_Generic_X_except, /**< Execution result if exception occurred. */ pn_DivMod_res_div = pn_Generic_other, /**< Result of computation a / b. */ @@ -801,7 +800,7 @@ void set_Div_no_remainder(ir_node *node, int no_remainder); * Projection numbers for Div: use for Proj nodes! */ typedef enum { - pn_Div_M = pn_Generic_M_regular, /**< Memory result. */ + pn_Div_M = pn_Generic_M, /**< Memory result. */ pn_Div_X_regular = pn_Generic_X_regular, /**< Execution result if no exception occurred. */ pn_Div_X_except = pn_Generic_X_except, /**< Execution result if exception occurred. */ pn_Div_res = pn_Generic_other, /**< Result of computation. */ @@ -821,7 +820,7 @@ void set_Mod_resmode(ir_node *node, ir_mode *mode); * Projection numbers for Mod: use for Proj nodes! */ typedef enum { - pn_Mod_M = pn_Generic_M_regular, /**< Memory result. */ + pn_Mod_M = pn_Generic_M, /**< Memory result. */ pn_Mod_X_regular = pn_Generic_X_regular, /**< Execution result if no exception occurred. */ pn_Mod_X_except = pn_Generic_X_except, /**< Execution result if exception occurred. */ pn_Mod_res = pn_Generic_other, /**< Result of computation. */ @@ -962,7 +961,7 @@ void set_memop_ptr(ir_node *node, ir_node *ptr); * Projection numbers for Load: use for Proj nodes! */ typedef enum { - pn_Load_M = pn_Generic_M_regular, /**< Memory result. */ + pn_Load_M = pn_Generic_M, /**< Memory result. */ pn_Load_X_regular = pn_Generic_X_regular, /**< Execution result if no exception occurred. */ pn_Load_X_except = pn_Generic_X_except, /**< Execution result if exception occurred. */ pn_Load_res = pn_Generic_other, /**< Result of load operation. */ @@ -984,7 +983,7 @@ void set_Load_align(ir_node *node, ir_align align); * Projection numbers for Store: use for Proj nodes! */ typedef enum { - pn_Store_M = pn_Generic_M_regular, /**< Memory result. */ + pn_Store_M = pn_Generic_M, /**< Memory result. */ pn_Store_X_regular = pn_Generic_X_regular, /**< Execution result if no exception occurred. */ pn_Store_X_except = pn_Generic_X_except, /**< Execution result if exception occurred. */ pn_Store_max = pn_Generic_other /**< number of projections from a Store */ @@ -1005,7 +1004,7 @@ void set_Store_align(ir_node *node, ir_align align); * Projection numbers for Alloc: use for Proj nodes! */ typedef enum { - pn_Alloc_M = pn_Generic_M_regular, /**< Memory result. */ + pn_Alloc_M = pn_Generic_M, /**< Memory result. */ pn_Alloc_X_regular = pn_Generic_X_regular, /**< Execution result if no exception occurred. */ pn_Alloc_X_except = pn_Generic_X_except, /**< Execution result if exception occurred. */ pn_Alloc_res = pn_Generic_other, /**< Result of allocation. */ @@ -1091,12 +1090,10 @@ void set_Mux_true(ir_node *node, ir_node *ir_true); * Projection numbers for result of CopyB node: use for Proj nodes! */ typedef enum { - pn_CopyB_M_regular = pn_Generic_M_regular, /**< The memory result. */ + pn_CopyB_M_regular = pn_Generic_M, /**< The memory result. */ pn_CopyB_X_regular = pn_Generic_X_regular, /**< Execution result if no exception occurred. */ pn_CopyB_X_except = pn_Generic_X_except, /**< The control flow result branching to the exception handler */ - pn_CopyB_M_except = pn_Generic_other, /**< The memory result in case the runtime function terminated with - an exception */ - pn_CopyB_max /**< number of projections from a CopyB */ + pn_CopyB_max = pn_Generic_other /**< number of projections from a CopyB */ } pn_CopyB; /* Projection numbers for CopyB. */ #define pn_CopyB_M pn_CopyB_M_regular @@ -1113,12 +1110,10 @@ void set_CopyB_type(ir_node *node, ir_type *data_type); * Projection numbers for result of InstOf node: use for Proj nodes! */ typedef enum { - pn_InstOf_M_regular = pn_Generic_M_regular, /**< The memory result. */ + pn_InstOf_M_regular = pn_Generic_M, /**< The memory result. */ pn_InstOf_X_regular = pn_Generic_X_regular, /**< Execution result if no exception occurred. */ pn_InstOf_X_except = pn_Generic_X_except, /**< The control flow result branching to the exception handler */ pn_InstOf_res = pn_Generic_other, /**< The checked object pointer. */ - pn_InstOf_M_except, /**< The memory result in case the runtime function terminated with - an exception */ pn_InstOf_max /**< number of projections from an InstOf */ } pn_InstOf; #define pn_InstOf_M pn_InstOf_M_regular @@ -1135,7 +1130,7 @@ void set_InstOf_obj(ir_node *node, ir_node *obj); * Projection numbers for Raise. */ typedef enum { - pn_Raise_M = pn_Generic_M_regular, /**< The Memory result. */ + pn_Raise_M = pn_Generic_M, /**< The Memory result. */ pn_Raise_X = pn_Generic_X_regular, /**< The control flow to the exception handler. */ pn_Raise_max /**< number of projections from a Raise */ } pn_Raise; /* Projection numbers for Raise. */ @@ -1149,7 +1144,7 @@ void set_Raise_exo_ptr(ir_node *node, ir_node *exoptr); * Projection numbers for result of Bound node: use for Proj nodes! */ typedef enum { - pn_Bound_M = pn_Generic_M_regular, /**< The memory result. */ + pn_Bound_M = pn_Generic_M, /**< The memory result. */ pn_Bound_X_regular = pn_Generic_X_regular, /**< Execution result if no exception occurred. */ pn_Bound_X_except = pn_Generic_X_except, /**< The control flow result branching to the exception handler */ pn_Bound_res = pn_Generic_other, /**< The checked index. */