On Fri, Nov 29, 2013 at 1:27 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > On Fri, Nov 29, 2013 at 2:26 AM, Richard Biener > <richard.guent...@gmail.com> wrote: >> On Thu, Nov 28, 2013 at 6:22 PM, H.J. Lu <hongjiu...@intel.com> wrote: >>> There is a bad interaction between inlined C++ member functions >>> and LTO + profiledbootstrap, which leads to >>> >>> LTO bootstrap to fail with bootstrap-profile: >>> >>> Existing SSA name for symbol marked for renaming: aloop_37 >>> In member function \u2018__base_ctor \u2019: >>> lto1: internal compiler error: SSA corruption >>> 0xcd84eb update_ssa(unsigned int) >>> /export/project/git/gcc-regression/gcc/gcc/tree-into-ssa.c:3246 >>> 0xa5814c input_function >>> /export/project/git/gcc-regression/gcc/gcc/lto-streamer-in.c:1006 >>> 0xa5814c lto_read_body >>> /export/project/git/gcc-regression/gcc/gcc/lto-streamer-in.c:1070 >>> 0xa5814c lto_input_function_body(lto_file_decl_data*, cgraph_node*, char >>> const*) >>> /export/project/git/gcc-regression/gcc/gcc/lto-streamer-in.c:1112 >>> 0x66d2bc cgraph_get_body(cgraph_node*) >>> /export/project/git/gcc-regression/gcc/gcc/cgraph.c:2981 >>> 0x99aa58 ipa_merge_profiles(cgraph_node*, cgraph_node*) >>> /export/project/git/gcc-regression/gcc/gcc/ipa-utils.c:699 >>> 0x595a86 lto_cgraph_replace_node >>> /export/project/git/gcc-regression/gcc/gcc/lto/lto-symtab.c:82 >>> 0x596159 lto_symtab_merge_symbols_1 >>> /export/project/git/gcc-regression/gcc/gcc/lto/lto-symtab.c:561 >>> 0x596159 lto_symtab_merge_symbols() >>> /export/project/git/gcc-regression/gcc/gcc/lto/lto-symtab.c:589 >>> 0x5850dd read_cgraph_and_symbols >>> /export/project/git/gcc-regression/gcc/gcc/lto/lto.c:2946 >>> 0x5850dd lto_main() >>> /export/project/git/gcc-regression/gcc/gcc/lto/lto.c:3255 >>> Please submit a full bug report, >>> with preprocessed source if appropriate. >>> Please include the complete backtrace with any bug report. >>> See <http://gcc.gnu.org/bugs.html> for instructions. >>> >>> There are only 2 files which don't inline all loop_iterator >>> member function and may be miscompiled: >>> >>> File: ipa-inline-analysis.o >>> >>> Symbol table '.symtab' contains 454 entries: >>> Num: Value Size Type Bind Vis Ndx Name >>> ... >>> 262: 0000000000000000 0 NOTYPE LOCAL DEFAULT 5 >>> loop_iterator::loop_iterator(loop**, unsigned int) >>> ... >>> 352: 0000000000000000 89 FUNC WEAK DEFAULT 27 >>> loop_iterator::next() >>> 353: 0000000000000000 748 FUNC WEAK DEFAULT 30 >>> loop_iterator::loop_iterator(loop**, unsigned int) >>> 354: 0000000000000000 748 FUNC WEAK DEFAULT 30 >>> loop_iterator::loop_iterator(loop**, unsigned int) >>> ... >>> >>> File: tree-cfg.o >>> >>> Symbol table '.symtab' contains 783 entries: >>> Num: Value Size Type Bind Vis Ndx Name >>> ... >>> 385: 0000000000000000 0 NOTYPE LOCAL DEFAULT 5 >>> loop_iterator::loop_iterator(loop**, unsigned int) >>> ... >>> 536: 0000000000000000 748 FUNC WEAK DEFAULT 34 >>> loop_iterator::loop_iterator(loop**, unsigned int) >>> ... >>> 538: 0000000000000000 748 FUNC WEAK DEFAULT 34 >>> loop_iterator::loop_iterator(loop**, unsigned int) >>> ... >>> >>> When either loop_iterator::next or loop_iterator::loop_iterator >>> inlined, bootstrap fails with the similar error. This patch >>> works around the problem by not inlining those 2 functions. >>> On Nehalem machine using "make -j8", without the patch, I got >>> >>> 17836.13user 638.12system 55:49.72elapsed >>> >>> for bootstrap and >>> >>> 32362.67user 4313.11system 1:29:59elapsed >>> >>> for running testsuite. With the patch, I got >>> >>> 7900.41user 640.39system 55:03.14elapsed > > It should be > > 17900.41user 640.39system 55:03.14elapsed > >>> for bootstrap and >>> >>> 31891.96user 4251.23system 1:31:41elapse >>> >>> for running testsuite. There is very little performance >>> difference and the binaries are also a little bit smaller: >>> >>> 16787252 34920 1098648 17920820 1117334 >>> build-x86_64-linux/gcc/cc1 >>> 16809748 34920 1098648 17943316 111cb14 >>> build-x86_64-linux.old/gcc/cc1 >>> 19188340 35008 1126552 20349900 13683cc >>> build-x86_64-linux/gcc/cc1objplus >>> 18865150 35008 1121848 20022006 13182f6 >>> build-x86_64-linux/gcc/cc1plus >>> 19210836 35008 1126552 20372396 136dbac >>> build-x86_64-linux.old/gcc/cc1objplus >>> 18887646 35008 1121848 20044502 131dad6 >>> build-x86_64-linux.old/gcc/cc1plus >>> 17274027 44056 1104024 18422107 119195b >>> build-x86_64-linux/gcc/f951 >>> 17296523 44056 1104024 18444603 119713b >>> build-x86_64-linux.old/gcc/f951 >>> 17354837 51424 1105752 18512013 11a788d >>> build-x86_64-linux/gcc/go1 >>> 17377333 51424 1105752 18534509 11ad06d >>> build-x86_64-linux.old/gcc/go1 >>> 20815529 43928 6289304 27148761 19e41d9 >>> build-x86_64-linux/gcc/gnat1 >>> 20838025 43928 6289304 27171257 19e99b9 >>> build-x86_64-linux.old/gcc/gnat1 >>> 15944305 35688 1095064 17075057 1048b71 >>> build-x86_64-linux/gcc/jc1 >>> 15966801 35688 1095064 17097553 104e351 >>> build-x86_64-linux.old/gcc/jc1 >>> >>> Should this patch be applied to restore LTO bootstrap with >>> bootstrap-profile? >> >> I'd rather fix the bug than moving those functions out-of-line. Is it enough >> to move the constructor and destructor out-of-line? > > No, it is independent of destructor. We need to move both constructor > and loop_iterator::next out of line.
Hm. The ICE is weird - I'm trying to reproduce now. I wonder whether we can and should move update_ssa before execute_all_ipa_stmt_fixups though. Or add two - likely the latter does something wrong. So disabling IPA-CP will likely fix this as well. Richard. > > -- > H.J.