diff options
Diffstat (limited to 'gcc/ipa-prop.h')
-rw-r--r-- | gcc/ipa-prop.h | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index e75826f..3399e82 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -29,6 +29,8 @@ along with GCC; see the file COPYING3. If not see /* The following definitions and interfaces are used by interprocedural analyses or parameters. */ +#define IPA_UNDESCRIBED_USE -1 + /* ipa-prop.c stuff (ipa-cp, indirect inlining): */ /* A jump function for a callsite represents the values passed as actual @@ -84,6 +86,17 @@ struct GTY(()) ipa_known_type_data tree component_type; }; +struct ipa_cst_ref_desc; + +/* Structure holding data required to describe a constant jump function. */ +struct GTY(()) ipa_constant_data +{ + /* THe value of the constant. */ + tree value; + /* Pointer to the structure that describes the reference. */ + struct ipa_cst_ref_desc GTY((skip)) *rdesc; +}; + /* Structure holding data required to describe a pass-through jump function. */ struct GTY(()) ipa_pass_through_data @@ -172,7 +185,7 @@ typedef struct GTY (()) ipa_jump_func union jump_func_value { struct ipa_known_type_data GTY ((tag ("IPA_JF_KNOWN_TYPE"))) known_type; - tree GTY ((tag ("IPA_JF_CONST"))) constant; + struct ipa_constant_data GTY ((tag ("IPA_JF_CONST"))) constant; struct ipa_pass_through_data GTY ((tag ("IPA_JF_PASS_THROUGH"))) pass_through; struct ipa_ancestor_jf_data GTY ((tag ("IPA_JF_ANCESTOR"))) ancestor; } GTY ((desc ("%1.type"))) value; @@ -213,7 +226,14 @@ static inline tree ipa_get_jf_constant (struct ipa_jump_func *jfunc) { gcc_checking_assert (jfunc->type == IPA_JF_CONST); - return jfunc->value.constant; + return jfunc->value.constant.value; +} + +static inline struct ipa_cst_ref_desc * +ipa_get_jf_constant_rdesc (struct ipa_jump_func *jfunc) +{ + gcc_checking_assert (jfunc->type == IPA_JF_CONST); + return jfunc->value.constant.rdesc; } /* Return the operand of a pass through jmp function JFUNC. */ @@ -296,6 +316,10 @@ struct ipa_param_descriptor { /* PARAM_DECL of this parameter. */ tree decl; + /* If all uses of the parameter are described by ipa-prop structures, this + says how many there are. If any use could not be described by means of + ipa-prop structures, this is IPA_UNDESCRIBED_USE. */ + int controlled_uses; /* The parameter is used. */ unsigned used : 1; }; @@ -365,6 +389,23 @@ ipa_set_param_used (struct ipa_node_params *info, int i, bool val) info->descriptors[i].used = val; } +/* Return how many uses described by ipa-prop a parameter has or + IPA_UNDESCRIBED_USE if there is a use that is not described by these + structures. */ +static inline int +ipa_get_controlled_uses (struct ipa_node_params *info, int i) +{ + return info->descriptors[i].controlled_uses; +} + +/* Set the controlled counter of a given parameter. */ + +static inline void +ipa_set_controlled_uses (struct ipa_node_params *info, int i, int val) +{ + info->descriptors[i].controlled_uses = val; +} + /* Return the used flag corresponding to the Ith formal parameter of the function associated with INFO. */ |