public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Biener <rguenther@suse.de>
To: Jeff Law <law@redhat.com>
Cc: gcc-patches@gcc.gnu.org
Subject: Re: [PATCH] Re-use cc1-checksum.c for stage-final
Date: Tue, 03 May 2016 10:32:00 -0000	[thread overview]
Message-ID: <alpine.LSU.2.11.1605031224320.13384@t29.fhfr.qr> (raw)
In-Reply-To: <alpine.LSU.2.11.1605031016490.13384@t29.fhfr.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; \

  reply	other threads:[~2016-05-03 10:32 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-28  8:50 Richard Biener
2016-04-28 22:21 ` Jeff Law
2016-04-29 11:36   ` Richard Biener
2016-05-02 15:56     ` Jeff Law
2016-05-03  8:18       ` Richard Biener
2016-05-03 10:32         ` Richard Biener [this message]
2016-05-18 22:01           ` Jeff Law

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LSU.2.11.1605031224320.13384@t29.fhfr.qr \
    --to=rguenther@suse.de \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=law@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).