diff options
author | Andi Kleen <ak@linux.intel.com> | 2016-06-23 14:34:16 +0000 |
---|---|---|
committer | Andi Kleen <ak@gcc.gnu.org> | 2016-06-23 14:34:16 +0000 |
commit | 277d7ee0c95456a21ef371aa025791cbef883169 (patch) | |
tree | a64cadd18e82bbd81f52a690484f43fc66291fdc /gcc/lto | |
parent | 7f586d904de25044a08f99669df5bc1ed2fa9f26 (diff) | |
download | gcc-277d7ee0c95456a21ef371aa025791cbef883169.zip gcc-277d7ee0c95456a21ef371aa025791cbef883169.tar.gz gcc-277d7ee0c95456a21ef371aa025791cbef883169.tar.bz2 |
Add make autoprofiledbootstrap
Add support for profiledbootstrap with autofdo. Will be useful
to get better testing coverage of autofdo.
This requires Linux perf and autofdo to be installed, only
really for x86_64 linux on Intel so far.
Profile the whole build process with perf, then convert the file,
and pass it back to the compiler in the feedback stage.
The conversion has to be done per language, as only that knows
the name of the binary. Currently we only do it for C and C++,
as the other languages don't have enough coverage during a normal
bootstrap.
For lto1 it is also disabled, because it would only be useful during a LTO
bootstrap, but right now autofdo and LTO are not working together due to
PR66229
For common backend files always the profile output of the C++ compiler
is used. In theory multiple inputs could be merged here, but so far
that is not implemented.
The method is not friendly to partial rebuilds, as only the profile
information from the current rebuild is used. So if an error
occurs it is best to clean and restart, otherwise the code
quality may be worse.
This patch is fairly large, but most of it is auto generated from
autogen in Makefile.in. for the new stage targets.
Passes profiledbootstrap and normal bootstrap on x86_64-linux.
autoprofiledbootstrap is currently not working due to
PR70427 (but it finishes with that worked around)
The autofdo'ed compiler is ~7% faster on insn-recog.i (vs ~11% for
profiledfeedback), and ~4% faster for tramp3d-v4 (vs 10% for
profiledfeedback) on a Sandy Bridge system.
gcc/lto/:
2016-06-23 Andi Kleen <ak@linux.intel.com>
* Make-lang.in: Add support for autofdo (disabled for now)
gcc/cp/:
2016-06-23 Andi Kleen <ak@linux.intel.com>
* Make-lang.in: Add support for autofdo.
gcc/:
2016-06-23 Andi Kleen <ak@linux.intel.com>
* Makefile.in: Regenerate.
* doc/install.texi: Document autoprofiledbootstrap.
/:
2016-06-23 Andi Kleen <ak@linux.intel.com>
* Makefile.def: Add autoprofiledbootstrap.
* Makefile.tpl: Dito.
* Makefile.in: Regenerate.
gcc/c/:
2016-06-23 Andi Kleen <ak@linux.intel.com>
* Make-lang.in: Add support for autofdo.
From-SVN: r237733
Diffstat (limited to 'gcc/lto')
-rw-r--r-- | gcc/lto/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/lto/Make-lang.in | 14 |
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 9323a255..f2e56a9 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,7 @@ +2016-06-23 Andi Kleen <ak@linux.intel.com> + + * Make-lang.in: Add support for autofdo (disabled for now) + 2016-06-10 Martin Sebor <msebor@redhat.com> PR c/71392 diff --git a/gcc/lto/Make-lang.in b/gcc/lto/Make-lang.in index 28fe675..9b95276 100644 --- a/gcc/lto/Make-lang.in +++ b/gcc/lto/Make-lang.in @@ -25,6 +25,15 @@ LTO_EXE = lto1$(exeext) LTO_OBJS = lto/lto-lang.o lto/lto.o lto/lto-object.o attribs.o lto/lto-partition.o lto/lto-symtab.o lto_OBJS = $(LTO_OBJS) +# this is only useful in a LTO bootstrap, but this does not work right +# now. Should reenable after this is fixed, but only when LTO bootstrap +# is enabled. + +#ifeq ($(shell cat ../stage_current),stageautofeedback) +#$(LTO_OBJS): CFLAGS += -fauto-profile=lto1.fda +#$(LTO_OBJS): lto1.fda +#endif + # Rules # These hooks are used by the main GCC Makefile. Consult that @@ -50,7 +59,7 @@ lto.srcinfo: lto.install-plugin: lto.mostlyclean: - rm -f $(LTO_OBJS) $(LTO_EXE) + rm -f $(LTO_OBJS) $(LTO_EXE) lto1.fda lto.clean: lto.distclean: @@ -71,5 +80,8 @@ $(LTO_EXE): $(LTO_OBJS) $(BACKEND) $(LIBDEPS) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ $(LTO_OBJS) $(BACKEND) $(BACKENDLIBS) $(LIBS) +lto1.fda: ../prev-gcc/lto1$(exeext) ../prev-gcc/$(PERF_DATA) + $(CREATE_GCOV) -binary ../prev-gcc/lto1$(exeext) -gcov lto1.fda -profile ../prev-gcc/$(PERF_DATA) -gcov_version 1 + # LTO testing is done as part of C/C++/Fortran etc. testing. check-lto: |