Chromium: LTO
Jan Hubicka
hubicka@ucw.cz
Sun Feb 15 22:33:00 GMT 2015
> Hi,
>
> > +symtab_node::iterate_direct_aliases (unsigned i, ipa_ref *&ref)
> > +{
> > + ref_list.referring.iterate (i, &ref);
> > +
> > + if (ref && ref->use != IPA_REF_ALIAS)
> > + return NULL;
> > +
> > + return ref;
> > +}
>
> it seems a little weird the out arg can return a non alias, and so if
> you only want to look at aliases you have to check the return value.
>
> > +
> > +/* Return true if list contains an alias. */
> > +
> > +inline bool
> > +symtab_node::has_aliases_p (void)
> > +{
> > + ipa_ref *ref = NULL;
> > + int i;
> > +
> > + for (i = 0; iterate_direct_aliases (i, ref); i++)
> > + if (ref->use == IPA_REF_ALIAS)
> > + return true;
> > + return false;
> > +}
>
> can it ever be true there is an alias in the list but it isn't the first
> thing? the function above suggests not.
Yeah, you are right here; I was not very cureful when simplifying the function.
>
> > +symtab_node::call_for_symbol_and_aliases (bool (*callback) (symtab_node *,
> > + void *),
> > + void *data,
> > + bool include_overwritable)
> > +{
> > + ipa_ref *ref;
> > +
> > + if (callback (this, data))
> > + return true;
> > + if (iterate_direct_aliases (0, ref))
>
> wouldn't has_aliases_p be a little more clear?
Indeed.
I commited the following cleanup that also cleans get_binfo_at_offset per
martin Jambor comments.
* cgraph.h (symtab_node::has_aliases_p): Simplify.
(symtab_node::call_for_symbol_and_aliases): Use has_aliases_p
* tree.c (lookup_binfo_at_offset): Make static.
(get_binfo_at_offset): Do not shadow offset; add explanatory
comment.
Index: cgraph.h
===================================================================
--- cgraph.h (revision 220709)
+++ cgraph.h (working copy)
@@ -2338,12 +2338,8 @@ inline bool
symtab_node::has_aliases_p (void)
{
ipa_ref *ref = NULL;
- int i;
- for (i = 0; iterate_direct_aliases (i, ref); i++)
- if (ref->use == IPA_REF_ALIAS)
- return true;
- return false;
+ return (iterate_direct_aliases (0, ref) != NULL);
}
/* Return true when RESOLUTION indicate that linker will use
@@ -2984,11 +2980,9 @@ symtab_node::call_for_symbol_and_aliases
void *data,
bool include_overwritable)
{
- ipa_ref *ref;
-
if (callback (this, data))
return true;
- if (iterate_direct_aliases (0, ref))
+ if (has_aliases_p ())
return call_for_symbol_and_aliases_1 (callback, data, include_overwritable);
return false;
}
@@ -3003,13 +2997,10 @@ cgraph_node::call_for_symbol_and_aliases
void *data,
bool include_overwritable)
{
- ipa_ref *ref;
-
if (callback (this, data))
return true;
- if (iterate_direct_aliases (0, ref))
+ if (has_aliases_p ())
return call_for_symbol_and_aliases_1 (callback, data, include_overwritable);
-
return false;
}
@@ -3023,13 +3014,10 @@ varpool_node::call_for_symbol_and_aliase
void *data,
bool include_overwritable)
{
- ipa_ref *ref;
-
if (callback (this, data))
return true;
- if (iterate_direct_aliases (0, ref))
+ if (has_aliases_p ())
return call_for_symbol_and_aliases_1 (callback, data, include_overwritable);
-
return false;
}
Index: tree.c
===================================================================
--- tree.c (revision 220709)
+++ tree.c (working copy)
@@ -11992,7 +11992,7 @@ type_in_anonymous_namespace_p (const_tre
/* Lookup sub-BINFO of BINFO of TYPE at offset POS. */
-tree
+static tree
lookup_binfo_at_offset (tree binfo, tree type, HOST_WIDE_INT pos)
{
unsigned int i;
@@ -12045,11 +12045,13 @@ get_binfo_at_offset (tree binfo, HOST_WI
else if (offset != 0)
{
tree found_binfo = NULL, base_binfo;
- int offset = (tree_to_shwi (BINFO_OFFSET (binfo)) + pos
- / BITS_PER_UNIT);
+ /* Offsets in BINFO are in bytes relative to the whole structure
+ while POS is in bits relative to the containing field. */
+ int binfo_offset = (tree_to_shwi (BINFO_OFFSET (binfo)) + pos
+ / BITS_PER_UNIT);
for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
- if (tree_to_shwi (BINFO_OFFSET (base_binfo)) == offset
+ if (tree_to_shwi (BINFO_OFFSET (base_binfo)) == binfo_offset
&& types_same_for_odr (TREE_TYPE (base_binfo), TREE_TYPE (fld)))
{
found_binfo = base_binfo;
@@ -12058,7 +12060,8 @@ get_binfo_at_offset (tree binfo, HOST_WI
if (found_binfo)
binfo = found_binfo;
else
- binfo = lookup_binfo_at_offset (binfo, TREE_TYPE (fld), offset);
+ binfo = lookup_binfo_at_offset (binfo, TREE_TYPE (fld),
+ binfo_offset);
}
type = TREE_TYPE (fld);
More information about the Gcc-patches
mailing list