diff mbox

Merge cgraph_get_create_node and cgraph_get_create_real_symbol_node

Message ID CAFULd4ZrmD5jXytAadVX1-LmbfMyaWz5tdonfmfzvAK_ai-ieQ@mail.gmail.com
State New
Headers show

Commit Message

Uros Bizjak Nov. 14, 2013, 6:16 p.m. UTC
On Thu, Nov 14, 2013 at 8:51 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
> On Wed, Nov 13, 2013 at 6:18 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
>
>>> as discussed with Honza on many occasions, all users of
>>> cgraph_get_create_node really want cgraph_get_create_real_symbol_node,
>>> i.e. they are not interested in inline nodes and should get a
>>> standalone node instead.  So this patch changes cgraph_get_create_node
>>> to do what cgraph_get_create_real_symbol_node currently does and
>>> removes the latter altogether.
>>>
>>> I had to change a call to cgraph_get_create_node to cgraph_get_node in
>>> lto-streamer-in.c so that it does not make the node it operates on a
>>> clone of another one because this made ipa_pta_execute abort on assert
>>> after calling cgraph_get_body (visionary points to Richi for putting
>>> the assert there).
>>>
>>> The patch successfully passed bootstrap and testing ("all" languages +
>>> Ada) and LTO-bootstrap (C and C++ only) on x86_64-linux.
>>>
>>> 2013-11-12  Martin Jambor  <mjambor@suse.cz>
>>>
>>> * cgraph.c (cgraph_get_create_node): Do what
>>> cgraph_get_create_real_symbol_node used to do.
>>> (cgraph_get_create_real_symbol_node): Removed.  Changed all users to
>>> call cgraph_get_create_node.
>>> * cgraph.h (cgraph_get_create_real_symbol_node): Removed.
>>> * lto-streamer-in.c (input_function): Call cgraph_get_node instead of
>>> cgraph_get_create_node.  Assert we get a node.
>>
>> This patch breaks lto-profiledbootstrap on x86_64-pc-linux-gnu with:
>>
>> In function ‘colorize_start’:
>> lto1: internal compiler error: in input_function, at lto-streamer-in.c:919
>> 0xa585c1 input_function
>>         /home/uros/gcc-svn/trunk/gcc/lto-streamer-in.c:919
>> 0xa585c1 lto_read_body
>>         /home/uros/gcc-svn/trunk/gcc/lto-streamer-in.c:1067
>> 0xa585c1 lto_input_function_body(lto_file_decl_data*, cgraph_node*, char const*)
>>         /home/uros/gcc-svn/trunk/gcc/lto-streamer-in.c:1109
>> 0x66eb2c cgraph_get_body(cgraph_node*)
>>         /home/uros/gcc-svn/trunk/gcc/cgraph.c:2967
>> 0x999339 ipa_merge_profiles(cgraph_node*, cgraph_node*)
>>         /home/uros/gcc-svn/trunk/gcc/ipa-utils.c:699
>> 0x5979a6 lto_cgraph_replace_node
>>         /home/uros/gcc-svn/trunk/gcc/lto/lto-symtab.c:82
>> 0x598079 lto_symtab_merge_symbols_1
>>         /home/uros/gcc-svn/trunk/gcc/lto/lto-symtab.c:561
>> 0x598079 lto_symtab_merge_symbols()
>>         /home/uros/gcc-svn/trunk/gcc/lto/lto-symtab.c:589
>> 0x586fad read_cgraph_and_symbols
>>         /home/uros/gcc-svn/trunk/gcc/lto/lto.c:2945
>> 0x586fad lto_main()
>>         /home/uros/gcc-svn/trunk/gcc/lto/lto.c:3254
>>
>> You will need patches from Teresa [1],[2] to get up to there in the
>> lto-profiledbootstrap.
>
> These patches are now in mainline, the failure is confirmed by HJ's
> buildboot at http://gcc.gnu.org/ml/gcc-regression/2013-11/msg00350.html

I was able to finish LTO profiledbootstrap with a partial revert of:

        * lto-streamer-in.c (input_function): Call cgraph_get_node instead of
          cgraph_get_create_node.  Assert we get a node.

But it looks that this blind revert introduced a couple of failures in
the testsuite:

FAIL: gcc.dg/torture/pr43879_1.c  -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  (internal compiler error)
FAIL: gcc.dg/torture/pr43879_1.c  -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  (test for excess errors)
UNRESOLVED: gcc.dg/torture/pr43879_1.c  -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  compilation failed to produce executable
FAIL: gcc.dg/torture/pr47426-1.c  -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  (internal compiler error)
FAIL: gcc.dg/torture/pr47426-1.c  -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  (test for excess errors)
UNRESOLVED: gcc.dg/torture/pr47426-1.c  -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  compilation failed to produce executable

FAIL: g++.dg/torture/pr43879-1_1.C  -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  (internal compiler error)
FAIL: g++.dg/torture/pr43879-1_1.C  -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  (test for excess errors)
UNRESOLVED: g++.dg/torture/pr43879-1_1.C  -O2 -flto
-fuse-linker-plugin -fno-fat-lto-objects  compilation failed to
produce executable
FAIL: g++.dg/torture/pr49394.C  -O2 -flto -fno-use-linker-plugin
-flto-partition=none  (internal compiler error)
FAIL: g++.dg/torture/pr49394.C  -O2 -flto -fno-use-linker-plugin
-flto-partition=none  (test for excess errors)
FAIL: g++.dg/torture/pr49394.C  -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  (internal compiler error)
FAIL: g++.dg/torture/pr49394.C  -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  (test for excess errors)
UNRESOLVED: g++.dg/torture/pr49394.C  -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  compilation failed to produce executable

lto1: internal compiler error: in ipa_pta_execute, at
tree-ssa-structalias.c:7099
0x6cdbcc ipa_pta_execute
    /home/uros/gcc-svn/trunk/gcc/tree-ssa-structalias.c:7099
0x6cdbcc (anonymous namespace)::pass_ipa_pta::execute() [clone .lto_priv.9848]
    /home/uros/gcc-svn/trunk/gcc/tree-ssa-structalias.c:7427

Uros.

Comments

Richard Biener Nov. 15, 2013, 9:28 a.m. UTC | #1
On Thu, Nov 14, 2013 at 7:16 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
> On Thu, Nov 14, 2013 at 8:51 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
>> On Wed, Nov 13, 2013 at 6:18 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
>>
>>>> as discussed with Honza on many occasions, all users of
>>>> cgraph_get_create_node really want cgraph_get_create_real_symbol_node,
>>>> i.e. they are not interested in inline nodes and should get a
>>>> standalone node instead.  So this patch changes cgraph_get_create_node
>>>> to do what cgraph_get_create_real_symbol_node currently does and
>>>> removes the latter altogether.
>>>>
>>>> I had to change a call to cgraph_get_create_node to cgraph_get_node in
>>>> lto-streamer-in.c so that it does not make the node it operates on a
>>>> clone of another one because this made ipa_pta_execute abort on assert
>>>> after calling cgraph_get_body (visionary points to Richi for putting
>>>> the assert there).
>>>>
>>>> The patch successfully passed bootstrap and testing ("all" languages +
>>>> Ada) and LTO-bootstrap (C and C++ only) on x86_64-linux.
>>>>
>>>> 2013-11-12  Martin Jambor  <mjambor@suse.cz>
>>>>
>>>> * cgraph.c (cgraph_get_create_node): Do what
>>>> cgraph_get_create_real_symbol_node used to do.
>>>> (cgraph_get_create_real_symbol_node): Removed.  Changed all users to
>>>> call cgraph_get_create_node.
>>>> * cgraph.h (cgraph_get_create_real_symbol_node): Removed.
>>>> * lto-streamer-in.c (input_function): Call cgraph_get_node instead of
>>>> cgraph_get_create_node.  Assert we get a node.
>>>
>>> This patch breaks lto-profiledbootstrap on x86_64-pc-linux-gnu with:
>>>
>>> In function ‘colorize_start’:
>>> lto1: internal compiler error: in input_function, at lto-streamer-in.c:919
>>> 0xa585c1 input_function
>>>         /home/uros/gcc-svn/trunk/gcc/lto-streamer-in.c:919
>>> 0xa585c1 lto_read_body
>>>         /home/uros/gcc-svn/trunk/gcc/lto-streamer-in.c:1067
>>> 0xa585c1 lto_input_function_body(lto_file_decl_data*, cgraph_node*, char const*)
>>>         /home/uros/gcc-svn/trunk/gcc/lto-streamer-in.c:1109
>>> 0x66eb2c cgraph_get_body(cgraph_node*)
>>>         /home/uros/gcc-svn/trunk/gcc/cgraph.c:2967
>>> 0x999339 ipa_merge_profiles(cgraph_node*, cgraph_node*)
>>>         /home/uros/gcc-svn/trunk/gcc/ipa-utils.c:699
>>> 0x5979a6 lto_cgraph_replace_node
>>>         /home/uros/gcc-svn/trunk/gcc/lto/lto-symtab.c:82
>>> 0x598079 lto_symtab_merge_symbols_1
>>>         /home/uros/gcc-svn/trunk/gcc/lto/lto-symtab.c:561
>>> 0x598079 lto_symtab_merge_symbols()
>>>         /home/uros/gcc-svn/trunk/gcc/lto/lto-symtab.c:589
>>> 0x586fad read_cgraph_and_symbols
>>>         /home/uros/gcc-svn/trunk/gcc/lto/lto.c:2945
>>> 0x586fad lto_main()
>>>         /home/uros/gcc-svn/trunk/gcc/lto/lto.c:3254
>>>
>>> You will need patches from Teresa [1],[2] to get up to there in the
>>> lto-profiledbootstrap.
>>
>> These patches are now in mainline, the failure is confirmed by HJ's
>> buildboot at http://gcc.gnu.org/ml/gcc-regression/2013-11/msg00350.html
>
> I was able to finish LTO profiledbootstrap with a partial revert of:
>
>         * lto-streamer-in.c (input_function): Call cgraph_get_node instead of
>           cgraph_get_create_node.  Assert we get a node.
>
> Index: lto-streamer-in.c
> ===================================================================
> --- lto-streamer-in.c   (revision 204792)
> +++ lto-streamer-in.c   (working copy)
> @@ -916,8 +916,7 @@ input_function (tree fn_decl, struct data_in *data
>
>    gimple_register_cfg_hooks ();
>
> -  node = cgraph_get_node (fn_decl);
> -  gcc_checking_assert (node);
> +  node = cgraph_get_create_node (fn_decl);
>    input_struct_function_base (fn, data_in, ib);
>    input_cfg (ib_cfg, fn, node->count_materialization_scale);

This would mean that cgraph merging is broken.

> But it looks that this blind revert introduced a couple of failures in
> the testsuite:
>
> FAIL: gcc.dg/torture/pr43879_1.c  -O2 -flto -fuse-linker-plugin
> -fno-fat-lto-objects  (internal compiler error)
> FAIL: gcc.dg/torture/pr43879_1.c  -O2 -flto -fuse-linker-plugin
> -fno-fat-lto-objects  (test for excess errors)
> UNRESOLVED: gcc.dg/torture/pr43879_1.c  -O2 -flto -fuse-linker-plugin
> -fno-fat-lto-objects  compilation failed to produce executable
> FAIL: gcc.dg/torture/pr47426-1.c  -O2 -flto -fuse-linker-plugin
> -fno-fat-lto-objects  (internal compiler error)
> FAIL: gcc.dg/torture/pr47426-1.c  -O2 -flto -fuse-linker-plugin
> -fno-fat-lto-objects  (test for excess errors)
> UNRESOLVED: gcc.dg/torture/pr47426-1.c  -O2 -flto -fuse-linker-plugin
> -fno-fat-lto-objects  compilation failed to produce executable
>
> FAIL: g++.dg/torture/pr43879-1_1.C  -O2 -flto -fuse-linker-plugin
> -fno-fat-lto-objects  (internal compiler error)
> FAIL: g++.dg/torture/pr43879-1_1.C  -O2 -flto -fuse-linker-plugin
> -fno-fat-lto-objects  (test for excess errors)
> UNRESOLVED: g++.dg/torture/pr43879-1_1.C  -O2 -flto
> -fuse-linker-plugin -fno-fat-lto-objects  compilation failed to
> produce executable
> FAIL: g++.dg/torture/pr49394.C  -O2 -flto -fno-use-linker-plugin
> -flto-partition=none  (internal compiler error)
> FAIL: g++.dg/torture/pr49394.C  -O2 -flto -fno-use-linker-plugin
> -flto-partition=none  (test for excess errors)
> FAIL: g++.dg/torture/pr49394.C  -O2 -flto -fuse-linker-plugin
> -fno-fat-lto-objects  (internal compiler error)
> FAIL: g++.dg/torture/pr49394.C  -O2 -flto -fuse-linker-plugin
> -fno-fat-lto-objects  (test for excess errors)
> UNRESOLVED: g++.dg/torture/pr49394.C  -O2 -flto -fuse-linker-plugin
> -fno-fat-lto-objects  compilation failed to produce executable
>
> lto1: internal compiler error: in ipa_pta_execute, at
> tree-ssa-structalias.c:7099
> 0x6cdbcc ipa_pta_execute
>     /home/uros/gcc-svn/trunk/gcc/tree-ssa-structalias.c:7099
> 0x6cdbcc (anonymous namespace)::pass_ipa_pta::execute() [clone .lto_priv.9848]
>     /home/uros/gcc-svn/trunk/gcc/tree-ssa-structalias.c:7427
>
> Uros.
Uros Bizjak Nov. 15, 2013, 9:32 a.m. UTC | #2
Hello!

>>>>> as discussed with Honza on many occasions, all users of
>>>>> cgraph_get_create_node really want cgraph_get_create_real_symbol_node,
>>>>> i.e. they are not interested in inline nodes and should get a
>>>>> standalone node instead.  So this patch changes cgraph_get_create_node
>>>>> to do what cgraph_get_create_real_symbol_node currently does and
>>>>> removes the latter altogether.
>>>>>
>>>>> I had to change a call to cgraph_get_create_node to cgraph_get_node in
>>>>> lto-streamer-in.c so that it does not make the node it operates on a
>>>>> clone of another one because this made ipa_pta_execute abort on assert
>>>>> after calling cgraph_get_body (visionary points to Richi for putting
>>>>> the assert there).
>>>>>
>>>>> The patch successfully passed bootstrap and testing ("all" languages +
>>>>> Ada) and LTO-bootstrap (C and C++ only) on x86_64-linux.
>>>>>
>>>>> 2013-11-12  Martin Jambor  <mjambor@suse.cz>
>>>>>
>>>>> * cgraph.c (cgraph_get_create_node): Do what
>>>>> cgraph_get_create_real_symbol_node used to do.
>>>>> (cgraph_get_create_real_symbol_node): Removed.  Changed all users to
>>>>> call cgraph_get_create_node.
>>>>> * cgraph.h (cgraph_get_create_real_symbol_node): Removed.
>>>>> * lto-streamer-in.c (input_function): Call cgraph_get_node instead of
>>>>> cgraph_get_create_node.  Assert we get a node.
>>>>
>>>> This patch breaks lto-profiledbootstrap on x86_64-pc-linux-gnu with:
>>>>
>>>> In function ‘colorize_start’:
>>>> lto1: internal compiler error: in input_function, at lto-streamer-in.c:919
>>>> 0xa585c1 input_function
>>>>         /home/uros/gcc-svn/trunk/gcc/lto-streamer-in.c:919
>>>> 0xa585c1 lto_read_body
>>>>         /home/uros/gcc-svn/trunk/gcc/lto-streamer-in.c:1067
>>>> 0xa585c1 lto_input_function_body(lto_file_decl_data*, cgraph_node*, char const*)
>>>>         /home/uros/gcc-svn/trunk/gcc/lto-streamer-in.c:1109
>>>> 0x66eb2c cgraph_get_body(cgraph_node*)
>>>>         /home/uros/gcc-svn/trunk/gcc/cgraph.c:2967
>>>> 0x999339 ipa_merge_profiles(cgraph_node*, cgraph_node*)
>>>>         /home/uros/gcc-svn/trunk/gcc/ipa-utils.c:699
>>>> 0x5979a6 lto_cgraph_replace_node
>>>>         /home/uros/gcc-svn/trunk/gcc/lto/lto-symtab.c:82
>>>> 0x598079 lto_symtab_merge_symbols_1
>>>>         /home/uros/gcc-svn/trunk/gcc/lto/lto-symtab.c:561
>>>> 0x598079 lto_symtab_merge_symbols()
>>>>         /home/uros/gcc-svn/trunk/gcc/lto/lto-symtab.c:589
>>>> 0x586fad read_cgraph_and_symbols
>>>>         /home/uros/gcc-svn/trunk/gcc/lto/lto.c:2945
>>>> 0x586fad lto_main()
>>>>         /home/uros/gcc-svn/trunk/gcc/lto/lto.c:3254
>>>>
>>>> You will need patches from Teresa [1],[2] to get up to there in the
>>>> lto-profiledbootstrap.
>>>
>>> These patches are now in mainline, the failure is confirmed by HJ's
>>> buildboot at http://gcc.gnu.org/ml/gcc-regression/2013-11/msg00350.html
>>
>> I was able to finish LTO profiledbootstrap with a partial revert of:
>>
>>         * lto-streamer-in.c (input_function): Call cgraph_get_node instead of
>>           cgraph_get_create_node.  Assert we get a node.
>>
>> Index: lto-streamer-in.c
>> ===================================================================
>> --- lto-streamer-in.c   (revision 204792)
>> +++ lto-streamer-in.c   (working copy)
>> @@ -916,8 +916,7 @@ input_function (tree fn_decl, struct data_in *data
>>
>>    gimple_register_cfg_hooks ();
>>
>> -  node = cgraph_get_node (fn_decl);
>> -  gcc_checking_assert (node);
>> +  node = cgraph_get_create_node (fn_decl);
>>    input_struct_function_base (fn, data_in, ib);
>>    input_cfg (ib_cfg, fn, node->count_materialization_scale);
>
> This would mean that cgraph merging is broken.

Please see updated patch [1] and Honza's comment in approval.

[1] http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01670.html

Uros.
diff mbox

Patch

Index: lto-streamer-in.c
===================================================================
--- lto-streamer-in.c   (revision 204792)
+++ lto-streamer-in.c   (working copy)
@@ -916,8 +916,7 @@  input_function (tree fn_decl, struct data_in *data

   gimple_register_cfg_hooks ();

-  node = cgraph_get_node (fn_decl);
-  gcc_checking_assert (node);
+  node = cgraph_get_create_node (fn_decl);
   input_struct_function_base (fn, data_in, ib);
   input_cfg (ib_cfg, fn, node->count_materialization_scale);