On Mon, Nov 28, 2011 at 7:02 PM, Richard Henderson <[email protected]> wrote:
> On 11/28/2011 03:54 PM, David Edelsohn wrote:
>> On Wed, Nov 23, 2011 at 8:57 AM, Jakub Jelinek <[email protected]> wrote:
>>> On Wed, Nov 23, 2011 at 07:47:46AM -0600, Aldy Hernandez wrote:
>>>>>> @@ -4198,7 +4198,7 @@ ipa_tm_create_version_alias (struct cgra
>>>>>> TREE_SYMBOL_REFERENCED (tm_name) = 1;
>>>>>>
>>>>>> /* Perform the same remapping to the comdat group. */
>>>>>> - if (DECL_COMDAT (new_decl))
>>>>>> + if (HAVE_COMDAT_GROUP&& DECL_COMDAT (new_decl))
>>>>>> DECL_COMDAT_GROUP (new_decl) = tm_mangle (DECL_COMDAT_GROUP
>>>>>> (old_decl));
>>>>>>
>>>>>> new_node = cgraph_same_body_alias (NULL, new_decl, info->new_decl);
>>>
>>> Wouldn't it be better to test if (DECL_ONE_ONLY (new_decl))
>>> instead? That is actually test for non-NULL DECL_COMDAT_GROUP
>>> and is what e.g. cp/ uses as guards on tweaking DECL_COMDAT_GROUP.
>>>
>>> BTW, the formatting is wrong above, no space before && and two spaces after
>>> it.
>>
>> That will work as well.
>>
>> Which solution should be committed?
>
> Please use the DECL_ONE_ONLY test.
A patch using DECL_ONE_ONLY works for me as well. Can someone approve
that version of the patch?
* trans-mem.c (ipa_tm_create_version_alias): Mangle new_decl
if DECL_ONE_ONLY.
(ipa_tm_create_version): Same.
Thanks, David
Index: trans-mem.c
===================================================================
--- trans-mem.c (revision 181793)
+++ trans-mem.c (working copy)
@@ -4213,7 +4213,7 @@ ipa_tm_create_version_alias (struct cgra
TREE_SYMBOL_REFERENCED (tm_name) = 1;
/* Perform the same remapping to the comdat group. */
- if (DECL_COMDAT (new_decl))
+ if (DECL_ONE_ONLY (new_decl))
DECL_COMDAT_GROUP (new_decl) = tm_mangle (DECL_COMDAT_GROUP (old_decl));
new_node = cgraph_same_body_alias (NULL, new_decl, info->new_decl);
@@ -4248,7 +4248,7 @@ ipa_tm_create_version (struct cgraph_nod
TREE_SYMBOL_REFERENCED (tm_name) = 1;
/* Perform the same remapping to the comdat group. */
- if (DECL_COMDAT (new_decl))
+ if (DECL_ONE_ONLY (new_decl))
DECL_COMDAT_GROUP (new_decl) = tm_mangle (DECL_COMDAT_GROUP (old_decl));
new_node = cgraph_copy_node_for_versioning (old_node, new_decl, NULL, NULL);