Message ID | 20110612164059.GE19441@kam.mff.cuni.cz |
---|---|
State | New |
Headers | show |
On Sun, Jun 12, 2011 at 9:40 AM, Jan Hubicka <hubicka@ucw.cz> wrote: > Hi, > this is the fix (or rather a workaround) i comitted. Thanks! > > Index: ChangeLog > =================================================================== > --- ChangeLog (revision 174968) > +++ ChangeLog (working copy) > @@ -1,3 +1,9 @@ > +2011-06-11 Jan Hubicka <jh@suse.cz> > + > + PR middle-end/49378 > + * ipa.c (cgraph_non_local_node_p_1, cgraph_local_node_p): Rule out > + aliases and thunks. > + > 2011-06-12 Ira Rosen <ira.rosen@linaro.org> > > * tree-vect-data-refs.c (vect_peeling_hash_get_most_frequent): > Index: ipa.c > =================================================================== > --- ipa.c (revision 174958) > +++ ipa.c (working copy) > @@ -119,7 +119,9 @@ process_references (struct ipa_ref_list > static bool > cgraph_non_local_node_p_1 (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED) > { > + /* FIXME: Aliases can be local, but i386 gets thunks wrong then. */ > return !(cgraph_only_called_directly_or_aliased_p (node) > + && !ipa_ref_has_aliases_p (&node->ref_list) > && node->analyzed > && !DECL_EXTERNAL (node->decl) > && !node->local.externally_visible > @@ -132,7 +134,13 @@ cgraph_non_local_node_p_1 (struct cgraph > static bool > cgraph_local_node_p (struct cgraph_node *node) > { > - return !cgraph_for_node_and_aliases (cgraph_function_or_thunk_node (node, NULL), > + struct cgraph_node *n = cgraph_function_or_thunk_node (node, NULL); > + > + /* FIXME: thunks can be considered local, but we need prevent i386 > + from attempting to change calling convention of them. */ > + if (n->thunk.thunk_p) > + return false; > + return !cgraph_for_node_and_aliases (n, > cgraph_non_local_node_p_1, NULL, true); > > } > I think the thunk local binding is another problem related to: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35513
Index: ChangeLog =================================================================== --- ChangeLog (revision 174968) +++ ChangeLog (working copy) @@ -1,3 +1,9 @@ +2011-06-11 Jan Hubicka <jh@suse.cz> + + PR middle-end/49378 + * ipa.c (cgraph_non_local_node_p_1, cgraph_local_node_p): Rule out + aliases and thunks. + 2011-06-12 Ira Rosen <ira.rosen@linaro.org> * tree-vect-data-refs.c (vect_peeling_hash_get_most_frequent): Index: ipa.c =================================================================== --- ipa.c (revision 174958) +++ ipa.c (working copy) @@ -119,7 +119,9 @@ process_references (struct ipa_ref_list static bool cgraph_non_local_node_p_1 (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED) { + /* FIXME: Aliases can be local, but i386 gets thunks wrong then. */ return !(cgraph_only_called_directly_or_aliased_p (node) + && !ipa_ref_has_aliases_p (&node->ref_list) && node->analyzed && !DECL_EXTERNAL (node->decl) && !node->local.externally_visible @@ -132,7 +134,13 @@ cgraph_non_local_node_p_1 (struct cgraph static bool cgraph_local_node_p (struct cgraph_node *node) { - return !cgraph_for_node_and_aliases (cgraph_function_or_thunk_node (node, NULL), + struct cgraph_node *n = cgraph_function_or_thunk_node (node, NULL); + + /* FIXME: thunks can be considered local, but we need prevent i386 + from attempting to change calling convention of them. */ + if (n->thunk.thunk_p) + return false; + return !cgraph_for_node_and_aliases (n, cgraph_non_local_node_p_1, NULL, true); }