| Index: gcc/gcc/ipa-type-escape.c
|
| diff --git a/gcc/gcc/ipa-type-escape.c b/gcc/gcc/ipa-type-escape.c
|
| index 48d95049b4f3c355c852c49d9dc1d3a6ca18f058..0807d0b107a2819f5705ab14bcd25b144f55af97 100644
|
| --- a/gcc/gcc/ipa-type-escape.c
|
| +++ b/gcc/gcc/ipa-type-escape.c
|
| @@ -1,6 +1,6 @@
|
| /* Type based alias analysis.
|
| - Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation,
|
| - Inc.
|
| + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010
|
| + Free Software Foundation, Inc.
|
| Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
|
|
|
| This file is part of GCC.
|
| @@ -43,10 +43,10 @@ along with GCC; see the file COPYING3. If not see
|
| #include "tree-pass.h"
|
| #include "langhooks.h"
|
| #include "pointer-set.h"
|
| +#include "splay-tree.h"
|
| #include "ggc.h"
|
| #include "ipa-utils.h"
|
| #include "ipa-type-escape.h"
|
| -#include "c-common.h"
|
| #include "gimple.h"
|
| #include "cgraph.h"
|
| #include "output.h"
|
| @@ -90,7 +90,7 @@ enum escape_t
|
| previous cases above. During the analysis phase, a bit is set in
|
| one of these vectors if an operation of the offending class is
|
| discovered to happen on the associated type. */
|
| -
|
| +
|
| static bitmap global_types_exposed_parameter;
|
| static bitmap global_types_full_escape;
|
|
|
| @@ -134,7 +134,7 @@ static struct pointer_set_t *visited_stmts;
|
|
|
| static bitmap_obstack ipa_obstack;
|
|
|
| -/* Static functions from this file that are used
|
| +/* Static functions from this file that are used
|
| before being defined. */
|
| static unsigned int look_for_casts (tree);
|
| static bool is_cast_from_non_pointer (tree, gimple, void *);
|
| @@ -144,11 +144,11 @@ static const char*
|
| get_name_of_type (tree type)
|
| {
|
| tree name = TYPE_NAME (type);
|
| -
|
| +
|
| if (!name)
|
| /* Unnamed type, do what you like here. */
|
| return "<UNNAMED>";
|
| -
|
| +
|
| /* It will be a TYPE_DECL in the case of a typedef, otherwise, an
|
| identifier_node */
|
| if (TREE_CODE (name) == TYPE_DECL)
|
| @@ -164,11 +164,11 @@ get_name_of_type (tree type)
|
| }
|
| else if (TREE_CODE (name) == IDENTIFIER_NODE)
|
| return IDENTIFIER_POINTER (name);
|
| - else
|
| + else
|
| return "<UNNAMED>";
|
| }
|
|
|
| -struct type_brand_s
|
| +struct type_brand_s
|
| {
|
| const char* name;
|
| int seq;
|
| @@ -176,7 +176,7 @@ struct type_brand_s
|
|
|
| /* Splay tree comparison function on type_brand_s structures. */
|
|
|
| -static int
|
| +static int
|
| compare_type_brand (splay_tree_key sk1, splay_tree_key sk2)
|
| {
|
| struct type_brand_s * k1 = (struct type_brand_s *) sk1;
|
| @@ -185,7 +185,7 @@ compare_type_brand (splay_tree_key sk1, splay_tree_key sk2)
|
| int value = strcmp(k1->name, k2->name);
|
| if (value == 0)
|
| return k2->seq - k1->seq;
|
| - else
|
| + else
|
| return value;
|
| }
|
|
|
| @@ -281,7 +281,7 @@ type_to_consider (tree type)
|
| case VECTOR_TYPE:
|
| case VOID_TYPE:
|
| return true;
|
| -
|
| +
|
| default:
|
| return false;
|
| }
|
| @@ -291,7 +291,7 @@ type_to_consider (tree type)
|
| the POINTER_TOs and if SEE_THRU_ARRAYS is true, remove all of the
|
| ARRAY_OFs and POINTER_TOs. */
|
|
|
| -static tree
|
| +static tree
|
| get_canon_type (tree type, bool see_thru_ptrs, bool see_thru_arrays)
|
| {
|
| splay_tree_node result;
|
| @@ -300,16 +300,16 @@ get_canon_type (tree type, bool see_thru_ptrs, bool see_thru_arrays)
|
| return NULL;
|
|
|
| type = TYPE_MAIN_VARIANT (type);
|
| - if (see_thru_arrays)
|
| + if (see_thru_arrays)
|
| while (POINTER_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE)
|
| type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
|
|
|
| - else if (see_thru_ptrs)
|
| + else if (see_thru_ptrs)
|
| while (POINTER_TYPE_P (type))
|
| type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
|
|
|
| result = splay_tree_lookup (type_to_canon_type, (splay_tree_key) type);
|
| -
|
| +
|
| if (result == NULL)
|
| return discover_unique_type (type);
|
| else return (tree) result->value;
|
| @@ -331,9 +331,9 @@ get_canon_type_uid (tree type, bool see_thru_ptrs, bool see_thru_arrays)
|
| number if TYPE is a pointer to a record or union. The number is
|
| the number of pointer types stripped to get to the record or union
|
| type. Return -1 if TYPE is none of the above. */
|
| -
|
| +
|
| int
|
| -ipa_type_escape_star_count_of_interesting_type (tree type)
|
| +ipa_type_escape_star_count_of_interesting_type (tree type)
|
| {
|
| int count = 0;
|
| /* Strip the *'s off. */
|
| @@ -347,22 +347,22 @@ ipa_type_escape_star_count_of_interesting_type (tree type)
|
| }
|
|
|
| /* We are interested in records, and unions only. */
|
| - if (TREE_CODE (type) == RECORD_TYPE
|
| - || TREE_CODE (type) == QUAL_UNION_TYPE
|
| + if (TREE_CODE (type) == RECORD_TYPE
|
| + || TREE_CODE (type) == QUAL_UNION_TYPE
|
| || TREE_CODE (type) == UNION_TYPE)
|
| return count;
|
| - else
|
| + else
|
| return -1;
|
| -}
|
| +}
|
|
|
|
|
| /* Return 0 if TYPE is a record or union type. Return a positive
|
| number if TYPE is a pointer to a record or union. The number is
|
| the number of pointer types stripped to get to the record or union
|
| type. Return -1 if TYPE is none of the above. */
|
| -
|
| +
|
| int
|
| -ipa_type_escape_star_count_of_interesting_or_array_type (tree type)
|
| +ipa_type_escape_star_count_of_interesting_or_array_type (tree type)
|
| {
|
| int count = 0;
|
| /* Strip the *'s off. */
|
| @@ -376,15 +376,15 @@ ipa_type_escape_star_count_of_interesting_or_array_type (tree type)
|
| }
|
|
|
| /* We are interested in records, and unions only. */
|
| - if (TREE_CODE (type) == RECORD_TYPE
|
| - || TREE_CODE (type) == QUAL_UNION_TYPE
|
| + if (TREE_CODE (type) == RECORD_TYPE
|
| + || TREE_CODE (type) == QUAL_UNION_TYPE
|
| || TREE_CODE (type) == UNION_TYPE)
|
| return count;
|
| - else
|
| + else
|
| return -1;
|
| -}
|
| -
|
| -
|
| +}
|
| +
|
| +
|
| /* Return true if the record, or union TYPE passed in escapes this
|
| compilation unit. Note that all of the pointer-to's are removed
|
| before testing since these may not be correct. */
|
| @@ -394,19 +394,19 @@ ipa_type_escape_type_contained_p (tree type)
|
| {
|
| if (!initialized)
|
| return false;
|
| - return !bitmap_bit_p (global_types_full_escape,
|
| + return !bitmap_bit_p (global_types_full_escape,
|
| get_canon_type_uid (type, true, false));
|
| }
|
|
|
| /* Return true if a modification to a field of type FIELD_TYPE cannot
|
| clobber a record of RECORD_TYPE. */
|
|
|
| -bool
|
| +bool
|
| ipa_type_escape_field_does_not_clobber_p (tree record_type, tree field_type)
|
| -{
|
| +{
|
| splay_tree_node result;
|
| int uid;
|
| -
|
| +
|
| if (!initialized)
|
| return false;
|
|
|
| @@ -418,25 +418,25 @@ ipa_type_escape_field_does_not_clobber_p (tree record_type, tree field_type)
|
| while (POINTER_TYPE_P (record_type))
|
| {
|
| record_type = TYPE_MAIN_VARIANT (TREE_TYPE (record_type));
|
| - if (POINTER_TYPE_P (field_type))
|
| + if (POINTER_TYPE_P (field_type))
|
| field_type = TYPE_MAIN_VARIANT (TREE_TYPE (field_type));
|
| - else
|
| + else
|
| /* However, if field_type is a union, this quick test is not
|
| correct since one of the variants of the union may be a
|
| pointer to type and we cannot see across that here. So we
|
| just strip the remaining pointer tos off the record type
|
| and fall thru to the more precise code. */
|
| - if (TREE_CODE (field_type) == QUAL_UNION_TYPE
|
| + if (TREE_CODE (field_type) == QUAL_UNION_TYPE
|
| || TREE_CODE (field_type) == UNION_TYPE)
|
| {
|
| while (POINTER_TYPE_P (record_type))
|
| record_type = TYPE_MAIN_VARIANT (TREE_TYPE (record_type));
|
| break;
|
| - }
|
| - else
|
| + }
|
| + else
|
| return true;
|
| }
|
| -
|
| +
|
| record_type = get_canon_type (record_type, true, true);
|
| /* The record type must be contained. The field type may
|
| escape. */
|
| @@ -445,8 +445,8 @@ ipa_type_escape_field_does_not_clobber_p (tree record_type, tree field_type)
|
|
|
| uid = TYPE_UID (record_type);
|
| result = splay_tree_lookup (uid_to_addressof_down_map, (splay_tree_key) uid);
|
| -
|
| - if (result)
|
| +
|
| + if (result)
|
| {
|
| bitmap field_type_map = (bitmap) result->value;
|
| uid = get_canon_type_uid (field_type, true, true);
|
| @@ -470,10 +470,10 @@ mark_type (tree type, enum escape_t escape_status)
|
| int uid;
|
|
|
| type = get_canon_type (type, true, true);
|
| - if (!type)
|
| + if (!type)
|
| return NULL;
|
|
|
| - switch (escape_status)
|
| + switch (escape_status)
|
| {
|
| case EXPOSED_PARAMETER:
|
| map = global_types_exposed_parameter;
|
| @@ -494,7 +494,7 @@ mark_type (tree type, enum escape_t escape_status)
|
| /* Efficiency hack. When things are bad, do not mess around
|
| with this type anymore. */
|
| bitmap_set_bit (global_types_exposed_parameter, uid);
|
| - }
|
| + }
|
| }
|
| return type;
|
| }
|
| @@ -503,7 +503,7 @@ mark_type (tree type, enum escape_t escape_status)
|
| EXPOSED_PARAMETER and the TYPE is a pointer type, the set is
|
| changed to FULL_ESCAPE. */
|
|
|
| -static void
|
| +static void
|
| mark_interesting_type (tree type, enum escape_t escape_status)
|
| {
|
| if (!type) return;
|
| @@ -522,24 +522,24 @@ mark_interesting_type (tree type, enum escape_t escape_status)
|
|
|
| /* Return true if PARENT is supertype of CHILD. Both types must be
|
| known to be structures or unions. */
|
| -
|
| +
|
| static bool
|
| parent_type_p (tree parent, tree child)
|
| {
|
| int i;
|
| tree binfo, base_binfo;
|
| - if (TYPE_BINFO (parent))
|
| + if (TYPE_BINFO (parent))
|
| for (binfo = TYPE_BINFO (parent), i = 0;
|
| BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
|
| {
|
| tree binfotype = BINFO_TYPE (base_binfo);
|
| - if (binfotype == child)
|
| + if (binfotype == child)
|
| return true;
|
| else if (parent_type_p (binfotype, child))
|
| return true;
|
| }
|
| if (TREE_CODE (parent) == UNION_TYPE
|
| - || TREE_CODE (parent) == QUAL_UNION_TYPE)
|
| + || TREE_CODE (parent) == QUAL_UNION_TYPE)
|
| {
|
| tree field;
|
| /* Search all of the variants in the union to see if one of them
|
| @@ -551,9 +551,9 @@ parent_type_p (tree parent, tree child)
|
| tree field_type;
|
| if (TREE_CODE (field) != FIELD_DECL)
|
| continue;
|
| -
|
| +
|
| field_type = TREE_TYPE (field);
|
| - if (field_type == child)
|
| + if (field_type == child)
|
| return true;
|
| }
|
|
|
| @@ -566,16 +566,16 @@ parent_type_p (tree parent, tree child)
|
| tree field_type;
|
| if (TREE_CODE (field) != FIELD_DECL)
|
| continue;
|
| -
|
| +
|
| field_type = TREE_TYPE (field);
|
| - if (TREE_CODE (field_type) == RECORD_TYPE
|
| - || TREE_CODE (field_type) == QUAL_UNION_TYPE
|
| + if (TREE_CODE (field_type) == RECORD_TYPE
|
| + || TREE_CODE (field_type) == QUAL_UNION_TYPE
|
| || TREE_CODE (field_type) == UNION_TYPE)
|
| - if (parent_type_p (field_type, child))
|
| + if (parent_type_p (field_type, child))
|
| return true;
|
| }
|
| }
|
| -
|
| +
|
| if (TREE_CODE (parent) == RECORD_TYPE)
|
| {
|
| tree field;
|
| @@ -586,19 +586,19 @@ parent_type_p (tree parent, tree child)
|
| tree field_type;
|
| if (TREE_CODE (field) != FIELD_DECL)
|
| continue;
|
| -
|
| +
|
| field_type = TREE_TYPE (field);
|
| - if (field_type == child)
|
| + if (field_type == child)
|
| return true;
|
| /* You can only cast to the first field so if it does not
|
| match, quit. */
|
| - if (TREE_CODE (field_type) == RECORD_TYPE
|
| - || TREE_CODE (field_type) == QUAL_UNION_TYPE
|
| + if (TREE_CODE (field_type) == RECORD_TYPE
|
| + || TREE_CODE (field_type) == QUAL_UNION_TYPE
|
| || TREE_CODE (field_type) == UNION_TYPE)
|
| {
|
| - if (parent_type_p (field_type, child))
|
| + if (parent_type_p (field_type, child))
|
| return true;
|
| - else
|
| + else
|
| break;
|
| }
|
| }
|
| @@ -609,7 +609,7 @@ parent_type_p (tree parent, tree child)
|
| /* Return the number of pointer tos for TYPE and return TYPE with all
|
| of these stripped off. */
|
|
|
| -static int
|
| +static int
|
| count_stars (tree* type_ptr)
|
| {
|
| tree type = *type_ptr;
|
| @@ -646,7 +646,7 @@ check_cast_type (tree to_type, tree from_type)
|
| {
|
| int to_stars = count_stars (&to_type);
|
| int from_stars = count_stars (&from_type);
|
| - if (to_stars != from_stars)
|
| + if (to_stars != from_stars)
|
| return CT_SIDEWAYS;
|
|
|
| if (to_type == from_type)
|
| @@ -655,9 +655,9 @@ check_cast_type (tree to_type, tree from_type)
|
| if (parent_type_p (to_type, from_type)) return CT_UP;
|
| if (parent_type_p (from_type, to_type)) return CT_DOWN;
|
| return CT_SIDEWAYS;
|
| -}
|
| +}
|
|
|
| -/* This function returns nonzero if VAR is result of call
|
| +/* This function returns nonzero if VAR is result of call
|
| to malloc function. */
|
|
|
| static bool
|
| @@ -667,12 +667,12 @@ is_malloc_result (tree var)
|
|
|
| if (!var)
|
| return false;
|
| -
|
| +
|
| if (SSA_NAME_IS_DEFAULT_DEF (var))
|
| return false;
|
|
|
| def_stmt = SSA_NAME_DEF_STMT (var);
|
| -
|
| +
|
| if (!is_gimple_call (def_stmt))
|
| return false;
|
|
|
| @@ -685,9 +685,9 @@ is_malloc_result (tree var)
|
|
|
| /* Check a cast FROM this variable, TO_TYPE. Mark the escaping types
|
| if appropriate. Returns cast_type as detected. */
|
| -
|
| +
|
| static enum cast_type
|
| -check_cast (tree to_type, tree from)
|
| +check_cast (tree to_type, tree from)
|
| {
|
| tree from_type = get_canon_type (TREE_TYPE (from), false, false);
|
| bool to_interesting_type, from_interesting_type;
|
| @@ -697,12 +697,12 @@ check_cast (tree to_type, tree from)
|
| if (!from_type || !to_type || from_type == to_type)
|
| return cast;
|
|
|
| - to_interesting_type =
|
| + to_interesting_type =
|
| ipa_type_escape_star_count_of_interesting_type (to_type) >= 0;
|
| - from_interesting_type =
|
| + from_interesting_type =
|
| ipa_type_escape_star_count_of_interesting_type (from_type) >= 0;
|
|
|
| - if (to_interesting_type)
|
| + if (to_interesting_type)
|
| if (from_interesting_type)
|
| {
|
| /* Both types are interesting. This can be one of four types
|
| @@ -712,7 +712,7 @@ check_cast (tree to_type, tree from)
|
| interesting here because if type is marked as escaping, all
|
| of its subtypes escape. */
|
| cast = check_cast_type (to_type, from_type);
|
| - switch (cast)
|
| + switch (cast)
|
| {
|
| case CT_UP:
|
| case CT_USELESS:
|
| @@ -731,18 +731,18 @@ check_cast (tree to_type, tree from)
|
| else
|
| {
|
| /* This code excludes two cases from marking as escaped:
|
| -
|
| +
|
| 1. if this is a cast of index of array of structures/unions
|
| - that happens before accessing array element, we should not
|
| + that happens before accessing array element, we should not
|
| mark it as escaped.
|
| 2. if this is a cast from the local that is a result from a
|
| - call to malloc, do not mark the cast as bad.
|
| + call to malloc, do not mark the cast as bad.
|
|
|
| */
|
| -
|
| +
|
| if (POINTER_TYPE_P (to_type) && !POINTER_TYPE_P (from_type))
|
| cast = CT_FROM_NON_P;
|
| - else if (TREE_CODE (from) == SSA_NAME
|
| + else if (TREE_CODE (from) == SSA_NAME
|
| && is_malloc_result (from))
|
| cast = CT_FROM_MALLOC;
|
| else
|
| @@ -786,16 +786,16 @@ look_for_casts_stmt (gimple s)
|
| cast = CT_NO_CAST;
|
|
|
| return cast;
|
| -}
|
| +}
|
|
|
|
|
| -typedef struct cast
|
| +typedef struct cast
|
| {
|
| int type;
|
| gimple stmt;
|
| } cast_t;
|
|
|
| -/* This function is a callback for walk_use_def_chains function called
|
| +/* This function is a callback for walk_use_def_chains function called
|
| from is_array_access_through_pointer_and_index. */
|
|
|
| static bool
|
| @@ -803,7 +803,7 @@ is_cast_from_non_pointer (tree var, gimple def_stmt, void *data)
|
| {
|
| if (!def_stmt || !var)
|
| return false;
|
| -
|
| +
|
| if (gimple_code (def_stmt) == GIMPLE_PHI)
|
| return false;
|
|
|
| @@ -812,13 +812,13 @@ is_cast_from_non_pointer (tree var, gimple def_stmt, void *data)
|
|
|
| if (is_gimple_assign (def_stmt))
|
| {
|
| - use_operand_p use_p;
|
| + use_operand_p use_p;
|
| ssa_op_iter iter;
|
| unsigned int cast = look_for_casts_stmt (def_stmt);
|
|
|
| /* Check that only one cast happened, and it's of non-pointer
|
| type. */
|
| - if ((cast & CT_FROM_NON_P) == (CT_FROM_NON_P)
|
| + if ((cast & CT_FROM_NON_P) == (CT_FROM_NON_P)
|
| && (cast & ~(CT_FROM_NON_P)) == 0)
|
| {
|
| ((cast_t *)data)->stmt = def_stmt;
|
| @@ -845,20 +845,20 @@ is_cast_from_non_pointer (tree var, gimple def_stmt, void *data)
|
| is_cast_from_non_pointer, data, false);
|
| if (((cast_t*)data)->type == -1)
|
| break;
|
| - }
|
| + }
|
| }
|
| /* The cast is harmful. */
|
| else
|
| ((cast_t *)data)->type = -1;
|
| - }
|
| + }
|
|
|
| if (((cast_t*)data)->type == -1)
|
| return true;
|
| -
|
| +
|
| return false;
|
| }
|
|
|
| -/* When array element a_p[i] is accessed through the pointer a_p
|
| +/* When array element a_p[i] is accessed through the pointer a_p
|
| and index i, it's translated into the following sequence
|
| in gimple:
|
|
|
| @@ -868,41 +868,41 @@ is_cast_from_non_pointer (tree var, gimple def_stmt, void *data)
|
| a_p.2_8 = a_p;
|
| D.1608_9 = D.1606_7 + a_p.2_8;
|
|
|
| - OP0 and OP1 are of the same pointer types and stand for
|
| + OP0 and OP1 are of the same pointer types and stand for
|
| D.1606_7 and a_p.2_8 or vise versa.
|
|
|
| This function checks that:
|
|
|
| - 1. one of OP0 and OP1 (D.1606_7) has passed only one cast from
|
| + 1. one of OP0 and OP1 (D.1606_7) has passed only one cast from
|
| non-pointer type (D.1606_7 = (struct str_t *) D.1605_6;).
|
|
|
| - 2. one of OP0 and OP1 which has passed the cast from
|
| - non-pointer type (D.1606_7), is actually generated by multiplication of
|
| + 2. one of OP0 and OP1 which has passed the cast from
|
| + non-pointer type (D.1606_7), is actually generated by multiplication of
|
| index by size of type to which both OP0 and OP1 point to
|
| (in this case D.1605_6 = i.1_5 * 16; ).
|
|
|
| - 3. an address of def of the var to which was made cast (D.1605_6)
|
| + 3. an address of def of the var to which was made cast (D.1605_6)
|
| was not taken.(How can it happen?)
|
|
|
| The following items are checked implicitly by the end of algorithm:
|
|
|
| - 4. one of OP0 and OP1 (a_p.2_8) have never been cast
|
| - (because if it was cast to pointer type, its type, that is also
|
| - the type of OP0 and OP1, will be marked as escaped during
|
| - analysis of casting stmt (when check_cast() is called
|
| - from scan_for_refs for this stmt)).
|
| + 4. one of OP0 and OP1 (a_p.2_8) have never been cast
|
| + (because if it was cast to pointer type, its type, that is also
|
| + the type of OP0 and OP1, will be marked as escaped during
|
| + analysis of casting stmt (when check_cast() is called
|
| + from scan_for_refs for this stmt)).
|
|
|
| 5. defs of OP0 and OP1 are not passed into externally visible function
|
| (because if they are passed then their type, that is also the type of OP0
|
| - and OP1, will be marked and escaped during check_call function called from
|
| + and OP1, will be marked and escaped during check_call function called from
|
| scan_for_refs with call stmt).
|
|
|
| - In total, 1-5 guaranty that it's an access to array by pointer and index.
|
| + In total, 1-5 guaranty that it's an access to array by pointer and index.
|
|
|
| */
|
|
|
| bool
|
| -is_array_access_through_pointer_and_index (enum tree_code code, tree op0,
|
| +is_array_access_through_pointer_and_index (enum tree_code code, tree op0,
|
| tree op1, tree *base, tree *offset,
|
| gimple *offset_cast_stmt)
|
| {
|
| @@ -945,7 +945,7 @@ is_array_access_through_pointer_and_index (enum tree_code code, tree op0,
|
| false);
|
| pointer_set_destroy (visited_stmts);
|
|
|
| - visited_stmts = pointer_set_create ();
|
| + visited_stmts = pointer_set_create ();
|
| walk_use_def_chains (op1, is_cast_from_non_pointer,(void *)(&op1_cast),
|
| false);
|
| pointer_set_destroy (visited_stmts);
|
| @@ -959,15 +959,15 @@ is_array_access_through_pointer_and_index (enum tree_code code, tree op0,
|
| else if (op0_cast.type == 0 && op1_cast.type == 1)
|
| {
|
| *base = op0;
|
| - *offset = op1;
|
| + *offset = op1;
|
| *offset_cast_stmt = op1_cast.stmt;
|
| }
|
| else
|
| return false;
|
| }
|
| -
|
| - /* Check 2.
|
| - offset_cast_stmt is of the form:
|
| +
|
| + /* Check 2.
|
| + offset_cast_stmt is of the form:
|
| D.1606_7 = (struct str_t *) D.1605_6; */
|
|
|
| if (*offset_cast_stmt)
|
| @@ -975,10 +975,10 @@ is_array_access_through_pointer_and_index (enum tree_code code, tree op0,
|
| before_cast = SINGLE_SSA_TREE_OPERAND (*offset_cast_stmt, SSA_OP_USE);
|
| if (!before_cast)
|
| return false;
|
| -
|
| +
|
| if (SSA_NAME_IS_DEFAULT_DEF (before_cast))
|
| return false;
|
| -
|
| +
|
| before_cast_def_stmt = SSA_NAME_DEF_STMT (before_cast);
|
| if (!before_cast_def_stmt)
|
| return false;
|
| @@ -988,7 +988,7 @@ is_array_access_through_pointer_and_index (enum tree_code code, tree op0,
|
|
|
| /* before_cast_def_stmt should be of the form:
|
| D.1605_6 = i.1_5 * 16; */
|
| -
|
| +
|
| if (is_gimple_assign (before_cast_def_stmt))
|
| {
|
| /* We expect temporary here. */
|
| @@ -999,14 +999,14 @@ is_array_access_through_pointer_and_index (enum tree_code code, tree op0,
|
| {
|
| tree arg0 = gimple_assign_rhs1 (before_cast_def_stmt);
|
| tree arg1 = gimple_assign_rhs2 (before_cast_def_stmt);
|
| - tree unit_size =
|
| + tree unit_size =
|
| TYPE_SIZE_UNIT (TREE_TYPE (TYPE_MAIN_VARIANT (TREE_TYPE (op0))));
|
|
|
| - if (!(CONSTANT_CLASS_P (arg0)
|
| + if (!(CONSTANT_CLASS_P (arg0)
|
| && simple_cst_equal (arg0, unit_size))
|
| - && !(CONSTANT_CLASS_P (arg1)
|
| + && !(CONSTANT_CLASS_P (arg1)
|
| && simple_cst_equal (arg1, unit_size)))
|
| - return false;
|
| + return false;
|
| }
|
| else
|
| return false;
|
| @@ -1024,11 +1024,11 @@ is_array_access_through_pointer_and_index (enum tree_code code, tree op0,
|
| /* Register the parameter and return types of function FN. The type
|
| ESCAPES if the function is visible outside of the compilation
|
| unit. */
|
| -static void
|
| -check_function_parameter_and_return_types (tree fn, bool escapes)
|
| +static void
|
| +check_function_parameter_and_return_types (tree fn, bool escapes)
|
| {
|
| tree arg;
|
| -
|
| +
|
| if (TYPE_ARG_TYPES (TREE_TYPE (fn)))
|
| {
|
| for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
|
| @@ -1057,7 +1057,7 @@ check_function_parameter_and_return_types (tree fn, bool escapes)
|
| if (escapes)
|
| {
|
| tree type = get_canon_type (TREE_TYPE (TREE_TYPE (fn)), false, false);
|
| - mark_interesting_type (type, EXPOSED_PARAMETER);
|
| + mark_interesting_type (type, EXPOSED_PARAMETER);
|
| }
|
| }
|
|
|
| @@ -1072,7 +1072,7 @@ has_proper_scope_for_analysis (tree t)
|
| tree type = get_canon_type (TREE_TYPE (t), false, false);
|
| if (!type) return;
|
|
|
| - if (lookup_attribute ("used", DECL_ATTRIBUTES (t)))
|
| + if (DECL_PRESERVE_P (t))
|
| {
|
| mark_interesting_type (type, FULL_ESCAPE);
|
| return;
|
| @@ -1080,7 +1080,7 @@ has_proper_scope_for_analysis (tree t)
|
|
|
| /* Do not want to do anything with volatile except mark any
|
| function that uses one to be not const or pure. */
|
| - if (TREE_THIS_VOLATILE (t))
|
| + if (TREE_THIS_VOLATILE (t))
|
| return;
|
|
|
| /* Do not care about a local automatic that is not static. */
|
| @@ -1093,12 +1093,12 @@ has_proper_scope_for_analysis (tree t)
|
| constant, we can allow this variable in pure or const
|
| functions but the scope is too large for our analysis to set
|
| these bits ourselves. */
|
| -
|
| +
|
| if (TREE_READONLY (t)
|
| && DECL_INITIAL (t)
|
| && is_gimple_min_invariant (DECL_INITIAL (t)))
|
| ; /* Read of a constant, do not change the function state. */
|
| - else
|
| + else
|
| {
|
| /* The type escapes for all public and externs. */
|
| mark_interesting_type (type, FULL_ESCAPE);
|
| @@ -1120,7 +1120,7 @@ check_operand (tree t)
|
| check_function_parameter_and_return_types (t, true);
|
|
|
| else if (TREE_CODE (t) == VAR_DECL)
|
| - has_proper_scope_for_analysis (t);
|
| + has_proper_scope_for_analysis (t);
|
| }
|
|
|
| /* Examine tree T for references. */
|
| @@ -1128,9 +1128,6 @@ check_operand (tree t)
|
| static void
|
| check_tree (tree t)
|
| {
|
| - if ((TREE_CODE (t) == EXC_PTR_EXPR) || (TREE_CODE (t) == FILTER_EXPR))
|
| - return;
|
| -
|
| /* We want to catch here also REALPART_EXPR and IMAGEPART_EXPR,
|
| but they already included in handled_component_p. */
|
| while (handled_component_p (t))
|
| @@ -1159,11 +1156,11 @@ mark_interesting_addressof (tree to_type, tree from_type)
|
| int from_uid;
|
| int to_uid;
|
| bitmap type_map;
|
| - splay_tree_node result;
|
| + splay_tree_node result;
|
|
|
| from_type = get_canon_type (from_type, false, false);
|
| to_type = get_canon_type (to_type, false, false);
|
| -
|
| +
|
| if (!from_type || !to_type)
|
| return;
|
|
|
| @@ -1171,41 +1168,41 @@ mark_interesting_addressof (tree to_type, tree from_type)
|
| to_uid = TYPE_UID (to_type);
|
|
|
| gcc_assert (ipa_type_escape_star_count_of_interesting_type (from_type) == 0);
|
| -
|
| +
|
| /* Process the Y into X map pointer. */
|
| - result = splay_tree_lookup (uid_to_addressof_down_map,
|
| + result = splay_tree_lookup (uid_to_addressof_down_map,
|
| (splay_tree_key) from_uid);
|
| -
|
| - if (result)
|
| - type_map = (bitmap) result->value;
|
| - else
|
| +
|
| + if (result)
|
| + type_map = (bitmap) result->value;
|
| + else
|
| {
|
| type_map = BITMAP_ALLOC (&ipa_obstack);
|
| splay_tree_insert (uid_to_addressof_down_map,
|
| - from_uid,
|
| + from_uid,
|
| (splay_tree_value)type_map);
|
| }
|
| bitmap_set_bit (type_map, TYPE_UID (to_type));
|
| -
|
| +
|
| /* Process the X into Y reverse map pointer. */
|
| - result =
|
| + result =
|
| splay_tree_lookup (uid_to_addressof_up_map, (splay_tree_key) to_uid);
|
| -
|
| - if (result)
|
| - type_map = (bitmap) result->value;
|
| - else
|
| +
|
| + if (result)
|
| + type_map = (bitmap) result->value;
|
| + else
|
| {
|
| type_map = BITMAP_ALLOC (&ipa_obstack);
|
| splay_tree_insert (uid_to_addressof_up_map,
|
| - to_uid,
|
| + to_uid,
|
| (splay_tree_value)type_map);
|
| }
|
| - bitmap_set_bit (type_map, TYPE_UID (from_type));
|
| + bitmap_set_bit (type_map, TYPE_UID (from_type));
|
| }
|
|
|
| /* Scan tree T to see if there are any addresses taken in within T. */
|
|
|
| -static void
|
| +static void
|
| look_for_address_of (tree t)
|
| {
|
| if (TREE_CODE (t) == ADDR_EXPR)
|
| @@ -1214,14 +1211,14 @@ look_for_address_of (tree t)
|
| tree cref = TREE_OPERAND (t, 0);
|
|
|
| /* If we have an expression of the form "&a.b.c.d", mark a.b,
|
| - b.c and c.d. as having its address taken. */
|
| + b.c and c.d. as having its address taken. */
|
| tree fielddecl = NULL_TREE;
|
| while (cref!= x)
|
| {
|
| if (TREE_CODE (cref) == COMPONENT_REF)
|
| {
|
| fielddecl = TREE_OPERAND (cref, 1);
|
| - mark_interesting_addressof (TREE_TYPE (fielddecl),
|
| + mark_interesting_addressof (TREE_TYPE (fielddecl),
|
| DECL_FIELD_CONTEXT (fielddecl));
|
| }
|
| else if (TREE_CODE (cref) == ARRAY_REF)
|
| @@ -1230,7 +1227,7 @@ look_for_address_of (tree t)
|
| cref = TREE_OPERAND (cref, 0);
|
| }
|
|
|
| - if (TREE_CODE (x) == VAR_DECL)
|
| + if (TREE_CODE (x) == VAR_DECL)
|
| has_proper_scope_for_analysis (x);
|
| }
|
| }
|
| @@ -1238,7 +1235,7 @@ look_for_address_of (tree t)
|
|
|
| /* Scan tree T to see if there are any casts within it. */
|
|
|
| -static unsigned int
|
| +static unsigned int
|
| look_for_casts (tree t)
|
| {
|
| unsigned int cast = 0;
|
| @@ -1248,7 +1245,7 @@ look_for_casts (tree t)
|
| tree castfromvar = TREE_OPERAND (t, 0);
|
| cast = cast | check_cast (TREE_TYPE (t), castfromvar);
|
| }
|
| - else
|
| + else
|
| while (handled_component_p (t))
|
| {
|
| t = TREE_OPERAND (t, 0);
|
| @@ -1267,7 +1264,7 @@ look_for_casts (tree t)
|
| if (!cast)
|
| cast = CT_NO_CAST;
|
| return cast;
|
| -}
|
| +}
|
|
|
| /* Check to see if T is a read or address of operation on a static var
|
| we are interested in analyzing. */
|
| @@ -1305,7 +1302,7 @@ check_asm (gimple stmt)
|
|
|
| for (i = 0; i < gimple_asm_ninputs (stmt); i++)
|
| check_rhs_var (gimple_asm_input_op (stmt, i));
|
| -
|
| +
|
| /* There is no code here to check for asm memory clobbers. The
|
| casual maintainer might think that such code would be necessary,
|
| but that appears to be wrong. In other parts of the compiler,
|
| @@ -1330,20 +1327,21 @@ check_call (gimple call)
|
|
|
| for (i = 0; i < gimple_call_num_args (call); i++)
|
| check_rhs_var (gimple_call_arg (call, i));
|
| -
|
| +
|
| if (callee_t)
|
| {
|
| tree arg_type;
|
| tree last_arg_type = NULL;
|
| callee = cgraph_node(callee_t);
|
| avail = cgraph_function_body_availability (callee);
|
| -
|
| +
|
| /* Check that there are no implicit casts in the passing of
|
| parameters. */
|
| if (TYPE_ARG_TYPES (TREE_TYPE (callee_t)))
|
| {
|
| for (arg_type = TYPE_ARG_TYPES (TREE_TYPE (callee_t)), i = 0;
|
| - arg_type && TREE_VALUE (arg_type) != void_type_node;
|
| + arg_type && TREE_VALUE (arg_type) != void_type_node
|
| + && i < gimple_call_num_args (call);
|
| arg_type = TREE_CHAIN (arg_type), i++)
|
| {
|
| tree operand = gimple_call_arg (call, i);
|
| @@ -1352,20 +1350,20 @@ check_call (gimple call)
|
| last_arg_type = TREE_VALUE(arg_type);
|
| check_cast (last_arg_type, operand);
|
| }
|
| - else
|
| + else
|
| /* The code reaches here for some unfortunate
|
| builtin functions that do not have a list of
|
| argument types. */
|
| - break;
|
| + break;
|
| }
|
| - }
|
| - else
|
| - {
|
| + }
|
| + else
|
| + {
|
| /* FIXME - According to Geoff Keating, we should never
|
| have to do this; the front ends should always process
|
| the arg list from the TYPE_ARG_LIST. */
|
| for (arg_type = DECL_ARGUMENTS (callee_t), i = 0;
|
| - arg_type;
|
| + arg_type && i < gimple_call_num_args (call);
|
| arg_type = TREE_CHAIN (arg_type), i++)
|
| {
|
| tree operand = gimple_call_arg (call, i);
|
| @@ -1373,15 +1371,15 @@ check_call (gimple call)
|
| {
|
| last_arg_type = TREE_TYPE (arg_type);
|
| check_cast (last_arg_type, operand);
|
| - }
|
| - else
|
| + }
|
| + else
|
| /* The code reaches here for some unfortunate
|
| builtin functions that do not have a list of
|
| argument types. */
|
| - break;
|
| + break;
|
| }
|
| }
|
| -
|
| +
|
| /* In the case where we have a var_args function, we need to
|
| check the remaining parameters against the last argument. */
|
| arg_type = last_arg_type;
|
| @@ -1390,7 +1388,7 @@ check_call (gimple call)
|
| tree operand = gimple_call_arg (call, i);
|
| if (arg_type)
|
| check_cast (arg_type, operand);
|
| - else
|
| + else
|
| {
|
| /* The code reaches here for some unfortunate
|
| builtin functions that do not have a list of
|
| @@ -1418,10 +1416,10 @@ check_call (gimple call)
|
| tree type = get_canon_type (TREE_TYPE (operand), false, false);
|
| mark_interesting_type (type, EXPOSED_PARAMETER);
|
| }
|
| -
|
| - if (callee_t)
|
| +
|
| + if (callee_t)
|
| {
|
| - tree type =
|
| + tree type =
|
| get_canon_type (TREE_TYPE (TREE_TYPE (callee_t)), false, false);
|
| mark_interesting_type (type, EXPOSED_PARAMETER);
|
| }
|
| @@ -1430,7 +1428,7 @@ check_call (gimple call)
|
|
|
| /* CODE is the operation on OP0 and OP1. OP0 is the operand that we
|
| *know* is a pointer type. OP1 may be a pointer type. */
|
| -static bool
|
| +static bool
|
| okay_pointer_operation (enum tree_code code, tree op0, tree op1)
|
| {
|
| tree op0type = TYPE_MAIN_VARIANT (TREE_TYPE (op0));
|
| @@ -1449,28 +1447,28 @@ okay_pointer_operation (enum tree_code code, tree op0, tree op1)
|
| gimple offset_cast_stmt;
|
|
|
| if (POINTER_TYPE_P (op0type)
|
| - && TREE_CODE (op0) == SSA_NAME
|
| - && TREE_CODE (op1) == SSA_NAME
|
| - && is_array_access_through_pointer_and_index (code, op0, op1,
|
| - &base,
|
| - &offset,
|
| + && TREE_CODE (op0) == SSA_NAME
|
| + && TREE_CODE (op1) == SSA_NAME
|
| + && is_array_access_through_pointer_and_index (code, op0, op1,
|
| + &base,
|
| + &offset,
|
| &offset_cast_stmt))
|
| return true;
|
| else
|
| {
|
| tree size_of_op0_points_to = TYPE_SIZE_UNIT (TREE_TYPE (op0type));
|
| -
|
| +
|
| if (CONSTANT_CLASS_P (op1)
|
| && size_of_op0_points_to
|
| - && multiple_of_p (TREE_TYPE (size_of_op0_points_to),
|
| + && multiple_of_p (TREE_TYPE (size_of_op0_points_to),
|
| op1, size_of_op0_points_to))
|
| return true;
|
|
|
| - if (CONSTANT_CLASS_P (op0)
|
| + if (CONSTANT_CLASS_P (op0)
|
| && size_of_op0_points_to
|
| - && multiple_of_p (TREE_TYPE (size_of_op0_points_to),
|
| + && multiple_of_p (TREE_TYPE (size_of_op0_points_to),
|
| op0, size_of_op0_points_to))
|
| - return true;
|
| + return true;
|
| }
|
| }
|
| break;
|
| @@ -1496,7 +1494,7 @@ check_assign (gimple t)
|
| /* Next check the operands on the rhs to see if they are ok. */
|
| switch (TREE_CODE_CLASS (gimple_assign_rhs_code (t)))
|
| {
|
| - case tcc_binary:
|
| + case tcc_binary:
|
| {
|
| tree op0 = gimple_assign_rhs1 (t);
|
| tree type0 = get_canon_type (TREE_TYPE (op0), false, false);
|
| @@ -1577,22 +1575,22 @@ check_assign (gimple t)
|
| static void
|
| scan_for_refs (gimple t)
|
| {
|
| - switch (gimple_code (t))
|
| + switch (gimple_code (t))
|
| {
|
| case GIMPLE_ASSIGN:
|
| check_assign (t);
|
| break;
|
|
|
| - case GIMPLE_CALL:
|
| + case GIMPLE_CALL:
|
| /* If this is a call to malloc, squirrel away the result so we
|
| do mark the resulting cast as being bad. */
|
| check_call (t);
|
| break;
|
| -
|
| +
|
| case GIMPLE_ASM:
|
| check_asm (t);
|
| break;
|
| -
|
| +
|
| default:
|
| break;
|
| }
|
| @@ -1603,8 +1601,8 @@ scan_for_refs (gimple t)
|
|
|
| /* The init routine for analyzing global static variable usage. See
|
| comments at top for description. */
|
| -static void
|
| -ipa_init (void)
|
| +static void
|
| +ipa_init (void)
|
| {
|
| bitmap_obstack_initialize (&ipa_obstack);
|
| global_types_exposed_parameter = BITMAP_ALLOC (&ipa_obstack);
|
| @@ -1632,7 +1630,7 @@ ipa_init (void)
|
| compilation unit but their right hand sides may contain references
|
| to variables defined within this unit. */
|
|
|
| -static void
|
| +static void
|
| analyze_variable (struct varpool_node *vnode)
|
| {
|
| tree global = vnode->decl;
|
| @@ -1657,11 +1655,11 @@ static void
|
| analyze_function (struct cgraph_node *fn)
|
| {
|
| tree decl = fn->decl;
|
| - check_function_parameter_and_return_types (decl,
|
| + check_function_parameter_and_return_types (decl,
|
| fn->local.externally_visible);
|
| if (dump_file)
|
| fprintf (dump_file, "\n local analysis of %s", cgraph_node_name (fn));
|
| -
|
| +
|
| {
|
| struct function *this_cfun = DECL_STRUCT_FUNCTION (decl);
|
| basic_block this_block;
|
| @@ -1683,7 +1681,7 @@ analyze_function (struct cgraph_node *fn)
|
| step = TREE_CHAIN (step))
|
| {
|
| tree var = TREE_VALUE (step);
|
| - if (TREE_CODE (var) == VAR_DECL
|
| + if (TREE_CODE (var) == VAR_DECL
|
| && DECL_INITIAL (var)
|
| && !TREE_STATIC (var))
|
| check_tree (DECL_INITIAL (var));
|
| @@ -1698,31 +1696,31 @@ analyze_function (struct cgraph_node *fn)
|
| static tree
|
| type_for_uid (int uid)
|
| {
|
| - splay_tree_node result =
|
| + splay_tree_node result =
|
| splay_tree_lookup (uid_to_canon_type, (splay_tree_key) uid);
|
| -
|
| +
|
| if (result)
|
| - return (tree) result->value;
|
| + return (tree) result->value;
|
| else return NULL;
|
| }
|
|
|
| /* Return a bitmap with the subtypes of the type for UID. If it
|
| does not exist, return either NULL or a new bitmap depending on the
|
| - value of CREATE. */
|
| + value of CREATE. */
|
|
|
| static bitmap
|
| subtype_map_for_uid (int uid, bool create)
|
| {
|
| - splay_tree_node result = splay_tree_lookup (uid_to_subtype_map,
|
| + splay_tree_node result = splay_tree_lookup (uid_to_subtype_map,
|
| (splay_tree_key) uid);
|
| -
|
| - if (result)
|
| - return (bitmap) result->value;
|
| +
|
| + if (result)
|
| + return (bitmap) result->value;
|
| else if (create)
|
| {
|
| bitmap subtype_map = BITMAP_ALLOC (&ipa_obstack);
|
| splay_tree_insert (uid_to_subtype_map,
|
| - uid,
|
| + uid,
|
| (splay_tree_value)subtype_map);
|
| return subtype_map;
|
| }
|
| @@ -1754,17 +1752,17 @@ close_type_seen (tree type)
|
|
|
| /* If we are doing a language with a type hierarchy, mark all of
|
| the superclasses. */
|
| - if (TYPE_BINFO (type))
|
| + if (TYPE_BINFO (type))
|
| for (binfo = TYPE_BINFO (type), i = 0;
|
| BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
|
| {
|
| tree binfo_type = BINFO_TYPE (base_binfo);
|
| - bitmap subtype_map = subtype_map_for_uid
|
| + bitmap subtype_map = subtype_map_for_uid
|
| (TYPE_UID (TYPE_MAIN_VARIANT (binfo_type)), true);
|
| bitmap_set_bit (subtype_map, uid);
|
| close_type_seen (get_canon_type (binfo_type, true, true));
|
| }
|
| -
|
| +
|
| /* If the field is a struct or union type, mark all of the
|
| subfields. */
|
| for (field = TYPE_FIELDS (type);
|
| @@ -1784,7 +1782,7 @@ close_type_seen (tree type)
|
| /* Take a TYPE that has been passed by value to an external function
|
| and mark all of the fields that have pointer types as escaping. For
|
| any of the non pointer types that are structures or unions,
|
| - recurse. TYPE is never a pointer type. */
|
| + recurse. TYPE is never a pointer type. */
|
|
|
| static void
|
| close_type_exposed_parameter (tree type)
|
| @@ -1817,13 +1815,13 @@ close_type_exposed_parameter (tree type)
|
| mark_interesting_type (field_type, EXPOSED_PARAMETER);
|
|
|
| /* Only recurse for non pointer types of structures and unions. */
|
| - if (ipa_type_escape_star_count_of_interesting_type (field_type) == 0)
|
| + if (ipa_type_escape_star_count_of_interesting_type (field_type) == 0)
|
| close_type_exposed_parameter (field_type);
|
| }
|
| }
|
|
|
| /* The next function handles the case where a type fully escapes.
|
| - This means that not only does the type itself escape,
|
| + This means that not only does the type itself escape,
|
|
|
| a) the type of every field recursively escapes
|
| b) the type of every subtype escapes as well as the super as well
|
| @@ -1834,7 +1832,7 @@ close_type_exposed_parameter (tree type)
|
|
|
| Take a TYPE that has had the address taken for an instance of it
|
| and mark all of the types for its fields as having their addresses
|
| - taken. */
|
| + taken. */
|
|
|
| static void
|
| close_type_full_escape (tree type)
|
| @@ -1845,7 +1843,7 @@ close_type_full_escape (tree type)
|
| tree binfo, base_binfo;
|
| bitmap_iterator bi;
|
| bitmap subtype_map;
|
| - splay_tree_node address_result;
|
| + splay_tree_node address_result;
|
|
|
| /* Strip off any pointer or array types. */
|
| type = get_canon_type (type, true, true);
|
| @@ -1861,7 +1859,7 @@ close_type_full_escape (tree type)
|
|
|
| /* If we are doing a language with a type hierarchy, mark all of
|
| the superclasses. */
|
| - if (TYPE_BINFO (type))
|
| + if (TYPE_BINFO (type))
|
| for (binfo = TYPE_BINFO (type), i = 0;
|
| BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
|
| {
|
| @@ -1869,13 +1867,13 @@ close_type_full_escape (tree type)
|
| binfotype = mark_type (binfotype, FULL_ESCAPE);
|
| close_type_full_escape (binfotype);
|
| }
|
| -
|
| +
|
| /* Mark as escaped any types that have been down casted to
|
| this type. */
|
| if (subtype_map)
|
| EXECUTE_IF_SET_IN_BITMAP (subtype_map, 0, i, bi)
|
| {
|
| - tree subtype = type_for_uid (i);
|
| + tree subtype = type_for_uid (i);
|
| subtype = mark_type (subtype, FULL_ESCAPE);
|
| close_type_full_escape (subtype);
|
| }
|
| @@ -1900,7 +1898,7 @@ close_type_full_escape (tree type)
|
|
|
| /* For all of the types A that contain this type B and were part of
|
| an expression like "&...A.B...", mark the A's as escaping. */
|
| - address_result = splay_tree_lookup (uid_to_addressof_up_map,
|
| + address_result = splay_tree_lookup (uid_to_addressof_up_map,
|
| (splay_tree_key) uid);
|
| if (address_result)
|
| {
|
| @@ -1914,21 +1912,21 @@ close_type_full_escape (tree type)
|
|
|
| /* Transitively close the addressof bitmap for the type with UID.
|
| This means that if we had a.b and b.c, a would have both b and c in
|
| - its maps. */
|
| + its maps. */
|
|
|
| static bitmap
|
| -close_addressof_down (int uid)
|
| +close_addressof_down (int uid)
|
| {
|
| bitmap_iterator bi;
|
| - splay_tree_node result =
|
| + splay_tree_node result =
|
| splay_tree_lookup (uid_to_addressof_down_map, (splay_tree_key) uid);
|
| bitmap map = NULL;
|
| bitmap new_map;
|
| unsigned int i;
|
| -
|
| - if (result)
|
| +
|
| + if (result)
|
| map = (bitmap) result->value;
|
| - else
|
| + else
|
| return NULL;
|
|
|
| if (bitmap_bit_p (been_there_done_that, uid))
|
| @@ -1952,9 +1950,9 @@ close_addressof_down (int uid)
|
| {
|
| bitmap submap = close_addressof_down (i);
|
| bitmap_set_bit (new_map, i);
|
| - if (submap)
|
| + if (submap)
|
| bitmap_ior_into (new_map, submap);
|
| - }
|
| + }
|
| result->value = (splay_tree_value) new_map;
|
|
|
| BITMAP_FREE (map);
|
| @@ -1984,12 +1982,10 @@ type_escape_execute (void)
|
| We do not want to process any of the clones so we check that this
|
| is a master clone. However, we do need to process any
|
| AVAIL_OVERWRITABLE functions (these are never clones) because
|
| - they may cause a type variable to escape.
|
| + they may cause a type variable to escape.
|
| */
|
| for (node = cgraph_nodes; node; node = node->next)
|
| - if (node->analyzed
|
| - && (cgraph_is_master_clone (node)
|
| - || (cgraph_function_body_availability (node) == AVAIL_OVERWRITABLE)))
|
| + if (node->analyzed && !node->clone_of)
|
| analyze_function (node);
|
|
|
|
|
| @@ -2037,7 +2033,7 @@ type_escape_execute (void)
|
| contained an entry for Y if there had been an operation of the
|
| form &X.Y. This step adds all of the fields contained within Y
|
| (recursively) to X's map. */
|
| -
|
| +
|
| result = splay_tree_min (uid_to_addressof_down_map);
|
| while (result)
|
| {
|
| @@ -2055,7 +2051,7 @@ type_escape_execute (void)
|
| {
|
| tree type = (tree) result->value;
|
| tree key = (tree) result->key;
|
| - if (POINTER_TYPE_P (type)
|
| + if (POINTER_TYPE_P (type)
|
| || TREE_CODE (type) == ARRAY_TYPE)
|
| {
|
| splay_tree_remove (all_canon_types, (splay_tree_key) result->key);
|
| @@ -2067,7 +2063,7 @@ type_escape_execute (void)
|
| }
|
|
|
| if (dump_file)
|
| - {
|
| + {
|
| EXECUTE_IF_SET_IN_BITMAP (global_types_seen, 0, i, bi)
|
| {
|
| /* The pointer types are in the global_types_full_escape
|
| @@ -2078,7 +2074,7 @@ type_escape_execute (void)
|
| print_generic_expr (dump_file, type, 0);
|
| if (bitmap_bit_p (global_types_full_escape, i))
|
| fprintf(dump_file, " escaped\n");
|
| - else
|
| + else
|
| fprintf(dump_file, " contained\n");
|
| }
|
| }
|
|
|