This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Re-use cc1-checksum.c for stage-final
- From: Richard Biener <rguenther at suse dot de>
- To: Jeff Law <law at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Tue, 3 May 2016 12:32:25 +0200 (CEST)
- Subject: Re: [PATCH] Re-use cc1-checksum.c for stage-final
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot LSU dot 2 dot 11 dot 1604281043180 dot 13384 at t29 dot fhfr dot qr> <e4aa1967-6af2-e6cf-aa1e-632e9f41a097 at redhat dot com> <alpine dot LSU dot 2 dot 11 dot 1604291325310 dot 13384 at t29 dot fhfr dot qr> <6169754e-569f-38b1-53e6-4d0248dda968 at redhat dot com> <alpine dot LSU dot 2 dot 11 dot 1605031016490 dot 13384 at t29 dot fhfr dot qr>
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 <rguenther@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 <rguenther@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 <rguenther@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; \