On Tue, 3 May 2016, Richard Biener wrote: > On Mon, 2 May 2016, Jeff Law wrote: > > > On 04/29/2016 05:36 AM, Richard Biener wrote: > > > On Thu, 28 Apr 2016, Jeff Law wrote: > > > > > > > On 04/28/2016 02:49 AM, Richard Biener wrote: > > > > > > > > > > The following prototype patch re-uses cc1-checksum.c from the > > > > > previous stage when compiling stage-final. This eventually > > > > > allows to compare cc1 from the last two stages to fix the > > > > > lack of a true comparison when doing LTO bootstrap (it > > > > > compiles LTO bytecode from the compile-stage there, not the > > > > > final optimization result). > > > > > > > > > > Bootstrapped on x86_64-unknown-linux-gnu. > > > > > > > > > > When stripping gcc/cc1 and prev-gcc/cc1 after the bootstrap > > > > > they now compare identical (with LTO bootstrap it should > > > > > not require stripping as that doesn't do a bootstrap-debug AFAIK). > > > > > > > > > > Is sth like this acceptable? (consider it also done for > > > > > cp/Make-lang.in) > > > > > > > > > > In theory we can compare all stage1 languages but I guess comparing > > > > > the required ones for a LTO bootstrap, cc1, cc1plus and lto1 would > > > > > be sufficient (or even just comparing one binary in which case > > > > > comparing lto1 would not require any patches). > > > > > > > > > > This also gets rid of the annoying warning that cc1-checksum.o > > > > > differs (obviously). > > > > > > > > > > Thanks, > > > > > Richard. > > > > > > > > > > 2016-04-28 Richard Biener <rguent...@suse.de> > > > > > > > > > > c/ > > > > > * Make-lang.in (cc1-checksum.c): For stage-final re-use > > > > > the checksum from the previous stage. > > > > I won't object if you add a comment into the fragment indicating why > > > > you're > > > > doing this. > > > > > > So the following is a complete patch (not considering people may > > > add objc or obj-c++ to stage1 languages). Build with --disable-bootstrap, > > > bootstrapped and profilebootstrapped with verifying it works as > > > intended (looks like we don't compare with profiledbootstrap - huh, > > > we're building stagefeedback only once) > > > > > > Ok for trunk? > > > > > > Step 2 will now be to figure out how to also compare cc1 (for example) > > > when using bootstrap-lto ... (we don't want to do this unconditionally > > > as it is a waste of time when the objects are not only LTO bytecode). > > > > > > Thanks, > > > Richard. > > > > > > 2016-04-29 Richard Biener <rguent...@suse.de> > > > > > > c/ > > > * Make-lang.in (cc1-checksum.c): For stage-final re-use > > > the checksum from the previous stage. > > > > > > cp/ > > > * Make-lang.in (cc1plus-checksum.c): For stage-final re-use > > > the checksum from the previous stage. > > LGTM. > > jeff > > Thanks - applied as rev. 235804. > > I'll now play with some way to add additional compare objects. Thinking > of adding sth like > > EXTRA_COMPARE_OBJS = lto1 cc1 cc1plus > > to bootstrap-lto.mk for example.
To my surprise this works. LTO bootstrapped on x86_64-unknown-linux-gnu - I've added an additional echo comparing $$f1 $$f2 which then shows ... comparing /abuild/rguenther/obj/stage2-zlib/libz_a-inftrees.o /abuild/rguenther/obj/stage3-zlib/libz_a-inftrees.o comparing /abuild/rguenther/obj/stage2-cc1 /abuild/rguenther/obj/stage3-cc1 comparing /abuild/rguenther/obj/stage2-cc1plus /abuild/rguenther/obj/stage3-cc1plus comparing /abuild/rguenther/obj/stage2-lto1 /abuild/rguenther/obj/stage3-lto1 Comparison successful. Ok for trunk? This probably slows down the compare phase for LTO bootstrap a bit (and LTO IL of the .o files is still compared). I'm also not 100% sure that what works on .o files works on executables on all targets (hmm, and I suppose I might miss some exec-suffix? Ah, there is $(exeext) but not available in the toplevel makefile yet.). Thanks, Richard. 2016-05-03 Richard Biener <rguent...@suse.de> * Makefile.tpl: Also compare EXTRA_COMPARE_OBJS. * Makefile.in: Regenerate. config/ * bootstrap-lto.mk: Add cc1, cc1plus and lto1 to EXTRA_COMPARE_OBJS. Index: Makefile.tpl =================================================================== *** Makefile.tpl (revision 235804) --- Makefile.tpl (working copy) *************** do-clean: clean-stage[+id+] *** 1630,1636 **** sed=`echo stage[+id+] | sed 's,^stage,,;s,.,.,g'`; \ files=`find stage[+id+]-* -name "*$(objext)" -print | \ sed -n s,^stage$$sed-,,p`; \ ! for file in $${files}; do \ f1=$$r/stage[+prev+]-$$file; f2=$$r/stage[+id+]-$$file; \ if test ! -f $$f1; then continue; fi; \ $(do-[+compare-target+]) > /dev/null 2>&1; \ --- 1630,1636 ---- sed=`echo stage[+id+] | sed 's,^stage,,;s,.,.,g'`; \ files=`find stage[+id+]-* -name "*$(objext)" -print | \ sed -n s,^stage$$sed-,,p`; \ ! for file in $${files} $(EXTRA_COMPARE_OBJS); do \ f1=$$r/stage[+prev+]-$$file; f2=$$r/stage[+id+]-$$file; \ if test ! -f $$f1; then continue; fi; \ $(do-[+compare-target+]) > /dev/null 2>&1; \ Index: config/bootstrap-lto.mk =================================================================== *** config/bootstrap-lto.mk (revision 235804) --- config/bootstrap-lto.mk (working copy) *************** LTO_RANLIB = $$r/$(HOST_SUBDIR)/prev-gcc *** 11,13 **** --- 11,15 ---- LTO_EXPORTS = AR="$(LTO_AR)"; export AR; \ RANLIB="$(LTO_RANLIB)"; export RANLIB; LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)" + + EXTRA_COMPARE_OBJS = cc1 cc1plus lto1 Index: Makefile.in =================================================================== *** Makefile.in (revision 235804) --- Makefile.in (working copy) *************** compare: *** 48785,48791 **** sed=`echo stage3 | sed 's,^stage,,;s,.,.,g'`; \ files=`find stage3-* -name "*$(objext)" -print | \ sed -n s,^stage$$sed-,,p`; \ ! for file in $${files}; do \ f1=$$r/stage2-$$file; f2=$$r/stage3-$$file; \ if test ! -f $$f1; then continue; fi; \ $(do-compare) > /dev/null 2>&1; \ --- 48785,48791 ---- sed=`echo stage3 | sed 's,^stage,,;s,.,.,g'`; \ files=`find stage3-* -name "*$(objext)" -print | \ sed -n s,^stage$$sed-,,p`; \ ! for file in $${files} $(EXTRA_COMPARE_OBJS); do \ f1=$$r/stage2-$$file; f2=$$r/stage3-$$file; \ if test ! -f $$f1; then continue; fi; \ $(do-compare) > /dev/null 2>&1; \ *************** compare3: *** 49183,49189 **** sed=`echo stage4 | sed 's,^stage,,;s,.,.,g'`; \ files=`find stage4-* -name "*$(objext)" -print | \ sed -n s,^stage$$sed-,,p`; \ ! for file in $${files}; do \ f1=$$r/stage3-$$file; f2=$$r/stage4-$$file; \ if test ! -f $$f1; then continue; fi; \ $(do-compare3) > /dev/null 2>&1; \ --- 49183,49189 ---- sed=`echo stage4 | sed 's,^stage,,;s,.,.,g'`; \ files=`find stage4-* -name "*$(objext)" -print | \ sed -n s,^stage$$sed-,,p`; \ ! for file in $${files} $(EXTRA_COMPARE_OBJS); do \ f1=$$r/stage3-$$file; f2=$$r/stage4-$$file; \ if test ! -f $$f1; then continue; fi; \ $(do-compare3) > /dev/null 2>&1; \