aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-prop.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ipa-prop.h')
-rw-r--r--gcc/ipa-prop.h77
1 files changed, 48 insertions, 29 deletions
diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h
index 5a293d9..0f9b5f3 100644
--- a/gcc/ipa-prop.h
+++ b/gcc/ipa-prop.h
@@ -39,38 +39,40 @@ along with GCC; see the file COPYING3. If not see
argument.
Unknown - neither of the above.
- IPA_JF_CONST_MEMBER_PTR stands for C++ member pointers, other constants are
- represented with IPA_JF_CONST.
+ IPA_JF_CONST_MEMBER_PTR stands for C++ member pointers, it is a special
+ constant in this regard. Other constants are represented with IPA_JF_CONST.
+
+ IPA_JF_ANCESTOR is a special pass-through jump function, which means that
+ the result is an address of a part of the object pointed to by the formal
+ parameter to which the function refers. It is mainly intended to represent
+ getting addresses of of ancestor fields in C++
+ (e.g. &this_1(D)->D.1766.D.1756). Note that if the original pointer is
+ NULL, ancestor jump function must behave like a simple pass-through.
+
+ Other pass-through functions can either simply pass on an unchanged formal
+ parameter or can apply one simple binary operation to it (such jump
+ functions are called polynomial).
+
+ IPA_JF_KNOWN_TYPE is a special type of an "unknown" function that applies
+ only to pointer parameters. It means that even though we cannot prove that
+ the passed value is an interprocedural constant, we still know the exact
+ type of the containing object which may be valuable for devirtualization.
+
+ Jump functions are computed in ipa-prop.c by function
+ update_call_notes_after_inlining. Some information can be lost and jump
+ functions degraded accordingly when inlining, see
+ update_call_notes_after_inlining in the same file. */
- In addition to "ordinary" pass through functions represented by
- IPA_JF_PASS_THROUGH, IPA_JF_ANCESTOR represents getting addresses of of
- ancestor fields in C++ (e.g. &this_1(D)->D.1766.D.1756). */
enum jump_func_type
{
IPA_JF_UNKNOWN = 0, /* newly allocated and zeroed jump functions default */
- IPA_JF_CONST,
- IPA_JF_CONST_MEMBER_PTR,
- IPA_JF_PASS_THROUGH,
- IPA_JF_ANCESTOR
+ IPA_JF_KNOWN_TYPE, /* represented by field base_binfo */
+ IPA_JF_CONST, /* represented by field costant */
+ IPA_JF_CONST_MEMBER_PTR, /* represented by field member_cst */
+ IPA_JF_PASS_THROUGH, /* represented by field pass_through */
+ IPA_JF_ANCESTOR /* represented by field ancestor */
};
-/* All formal parameters in the program have a lattice associated with it
- computed by the interprocedural stage of IPCP.
- There are three main values of the lattice:
- IPA_TOP - unknown,
- IPA_BOTTOM - non constant,
- IPA_CONST_VALUE - simple scalar constant,
- Cval of formal f will have a constant value if all callsites to this
- function have the same constant value passed to f.
- Integer and real constants are represented as IPA_CONST_VALUE. */
-enum ipa_lattice_type
-{
- IPA_BOTTOM,
- IPA_CONST_VALUE,
- IPA_TOP
-};
-
-
/* Structure holding data required to describe a pass-through jump function. */
struct GTY(()) ipa_pass_through_data
@@ -87,8 +89,8 @@ struct GTY(()) ipa_pass_through_data
enum tree_code operation;
};
-/* Structure holding data required to describe and ancestor pass throu
- funkci. */
+/* Structure holding data required to describe an ancestor pass-through
+ jump function. */
struct GTY(()) ipa_ancestor_jf_data
{
@@ -119,13 +121,30 @@ struct GTY (()) ipa_jump_func
functions and member_cst holds constant c++ member functions. */
union jump_func_value
{
+ tree GTY ((tag ("IPA_JF_KNOWN_TYPE"))) base_binfo;
tree GTY ((tag ("IPA_JF_CONST"))) constant;
+ struct ipa_member_ptr_cst GTY ((tag ("IPA_JF_CONST_MEMBER_PTR"))) member_cst;
struct ipa_pass_through_data GTY ((tag ("IPA_JF_PASS_THROUGH"))) pass_through;
struct ipa_ancestor_jf_data GTY ((tag ("IPA_JF_ANCESTOR"))) ancestor;
- struct ipa_member_ptr_cst GTY ((tag ("IPA_JF_CONST_MEMBER_PTR"))) member_cst;
} GTY ((desc ("%1.type"))) value;
};
+/* All formal parameters in the program have a lattice associated with it
+ computed by the interprocedural stage of IPCP.
+ There are three main values of the lattice:
+ IPA_TOP - unknown,
+ IPA_BOTTOM - non constant,
+ IPA_CONST_VALUE - simple scalar constant,
+ Cval of formal f will have a constant value if all callsites to this
+ function have the same constant value passed to f.
+ Integer and real constants are represented as IPA_CONST_VALUE. */
+enum ipa_lattice_type
+{
+ IPA_BOTTOM,
+ IPA_CONST_VALUE,
+ IPA_TOP
+};
+
/* All formal parameters in the program have a cval computed by
the interprocedural stage of IPCP. See enum ipa_lattice_type for
the various types of lattices supported */