On Thu, Nov 14, 2013 at 7:16 PM, Uros Bizjak <ubiz...@gmail.com> wrote: > On Thu, Nov 14, 2013 at 8:51 AM, Uros Bizjak <ubiz...@gmail.com> wrote: >> On Wed, Nov 13, 2013 at 6:18 PM, Uros Bizjak <ubiz...@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 <mjam...@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.