Fix autoprofiledbootstrap build

1. Fix gcov version
2. Merge perf data collected when compiling the compiler and runtime libraries
3. Fix documentation typo

Tested on x86_64-pc-linux-gnu.

ChangeLog:

	* Makefile.in: Define PROFILE_MERGER
	* Makefile.tpl: Define PROFILE_MERGER

gcc/c/ChangeLog:

	* Make-lang.in: Merge perf data collected when compiling cc1 and runtime libraries

gcc/cp/ChangeLog:

	* Make-lang.in: Merge perf data collected when compiling cc1plus and runtime libraries

gcc/lto/ChangeLog:

	* Make-lang.in: Merge perf data collected when compiling lto1 and runtime libraries

gcc/ChangeLog:

	* doc/install.texi: Fix documentation typo
This commit is contained in:
Eugene Rozenfeld 2022-11-21 13:33:38 -08:00
parent 065be0ffbc
commit 0c77a09094
6 changed files with 92 additions and 11 deletions

View File

@ -491,6 +491,7 @@ PGO-TRAINING-TARGETS = binutils gas gdb ld sim
PGO_BUILD_TRAINING = $(addprefix maybe-check-,$(PGO-TRAINING-TARGETS)) PGO_BUILD_TRAINING = $(addprefix maybe-check-,$(PGO-TRAINING-TARGETS))
CREATE_GCOV = create_gcov CREATE_GCOV = create_gcov
PROFILE_MERGER = profile_merger
TFLAGS = TFLAGS =
@ -971,7 +972,8 @@ EXTRA_HOST_FLAGS = \
'STRIP=$(STRIP)' \ 'STRIP=$(STRIP)' \
'WINDRES=$(WINDRES)' \ 'WINDRES=$(WINDRES)' \
'WINDMC=$(WINDMC)' \ 'WINDMC=$(WINDMC)' \
'CREATE_GCOV=$(CREATE_GCOV)' 'CREATE_GCOV=$(CREATE_GCOV)' \
'PROFILE_MERGER=$(PROFILE_MERGER)'
FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)

View File

@ -494,6 +494,7 @@ PGO-TRAINING-TARGETS = binutils gas gdb ld sim
PGO_BUILD_TRAINING = $(addprefix maybe-check-,$(PGO-TRAINING-TARGETS)) PGO_BUILD_TRAINING = $(addprefix maybe-check-,$(PGO-TRAINING-TARGETS))
CREATE_GCOV = create_gcov CREATE_GCOV = create_gcov
PROFILE_MERGER = profile_merger
TFLAGS = TFLAGS =
@ -728,7 +729,8 @@ EXTRA_HOST_FLAGS = \
'STRIP=$(STRIP)' \ 'STRIP=$(STRIP)' \
'WINDRES=$(WINDRES)' \ 'WINDRES=$(WINDRES)' \
'WINDMC=$(WINDMC)' \ 'WINDMC=$(WINDMC)' \
'CREATE_GCOV=$(CREATE_GCOV)' 'CREATE_GCOV=$(CREATE_GCOV)' \
'PROFILE_MERGER=$(PROFILE_MERGER)'
FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)

View File

@ -88,9 +88,34 @@ cc1$(exeext): $(C_OBJS) cc1-checksum.o $(BACKEND) $(LIBDEPS)
cc1-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS) cc1-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS)
@$(call LINK_PROGRESS,$(INDEX.c),end) @$(call LINK_PROGRESS,$(INDEX.c),end)
cc1.fda: ../stage1-gcc/cc1$(exeext) ../prev-gcc/$(PERF_DATA) components_in_prev = "bfd opcodes binutils fixincludes gas gcc gmp mpfr mpc isl gold intl ld libbacktrace libcpp libcody libdecnumber libiberty libiberty-linker-plugin libiconv zlib lto-plugin libctf libsframe"
$(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov cc1.fda -profile ../prev-gcc/$(PERF_DATA) -gcov_version 1 components_in_prev_target = "libstdc++-v3 libsanitizer libvtv libgcc libbacktrace libphobos zlib libgomp libatomic"
.PHONY: create_fdas_for_cc1
cc1.fda: create_fdas_for_cc1
$(PROFILE_MERGER) $(shell ls -ha cc1_*.fda) --output_file cc1.fda -gcov_version 2
create_fdas_for_cc1: ../stage1-gcc/cc1$(exeext) ../prev-gcc/$(PERF_DATA)
for component_in_prev in "$(components_in_prev)"; do \
perf_path=../prev-$$component_in_prev/$(PERF_DATA); \
echo "Perf path:"; \
echo $$perf_path; \
if [ -f $$perf_path ]; then \
profile_name=cc1_$$component_in_prev.fda; \
$(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \
fi; \
done;
for component_in_prev_target in "$(components_in_prev_target)"; do \
perf_path=../prev-$(TARGET_SUBDIR)/$$component_in_prev_target/$(PERF_DATA); \
echo "Perf path:"; \
echo $$perf_path; \
if [ -f $$perf_path ]; then \
profile_name=cc1_$$component_in_prev_target.fda; \
$(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \
fi; \
done;
# #
# Build hooks: # Build hooks:
@ -181,6 +206,7 @@ c.mostlyclean:
-rm -f c/*$(objext) -rm -f c/*$(objext)
-rm -f c/*$(coverageexts) -rm -f c/*$(coverageexts)
-rm -f cc1.fda -rm -f cc1.fda
-rm -f cc1_*.fda
c.clean: c.clean:
c.distclean: c.distclean:
-rm -f c/config.status c/Makefile -rm -f c/config.status c/Makefile

View File

@ -186,9 +186,34 @@ endif
# This is the file that depends on the generated header file. # This is the file that depends on the generated header file.
cp/name-lookup.o: $(srcdir)/cp/std-name-hint.h cp/name-lookup.o: $(srcdir)/cp/std-name-hint.h
cc1plus.fda: ../stage1-gcc/cc1plus$(exeext) ../prev-gcc/$(PERF_DATA) components_in_prev = "bfd opcodes binutils fixincludes gas gcc gmp mpfr mpc isl gold intl ld libbacktrace libcpp libcody libdecnumber libiberty libiberty-linker-plugin libiconv zlib lto-plugin libctf libsframe"
$(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov cc1plus.fda -profile ../prev-gcc/$(PERF_DATA) -gcov_version 1 components_in_prev_target = "libstdc++-v3 libsanitizer libvtv libgcc libbacktrace libphobos zlib libgomp libatomic"
.PHONY: create_fdas_for_cc1plus
cc1plus.fda: create_fdas_for_cc1plus
$(PROFILE_MERGER) $(shell ls -ha cc1plus_*.fda) --output_file cc1plus.fda -gcov_version 2
create_fdas_for_cc1plus: ../stage1-gcc/cc1plus$(exeext) ../prev-gcc/$(PERF_DATA)
for component_in_prev in "$(components_in_prev)"; do \
perf_path=../prev-$$component_in_prev/$(PERF_DATA); \
echo "Perf path:"; \
echo $$perf_path; \
if [ -f $$perf_path ]; then \
profile_name=cc1plus_$$component_in_prev.fda; \
$(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \
fi; \
done;
for component_in_prev_target in "$(components_in_prev_target)"; do \
perf_path=../prev-$(TARGET_SUBDIR)/$$component_in_prev_target/$(PERF_DATA); \
echo "Perf path:"; \
echo $$perf_path; \
if [ -f $$perf_path ]; then \
profile_name=cc1plus_$$component_in_prev_target.fda; \
$(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \
fi; \
done;
# #
# Build hooks: # Build hooks:
@ -335,7 +360,7 @@ c++.mostlyclean:
-rm -f doc/g++.1 -rm -f doc/g++.1
-rm -f cp/*$(objext) -rm -f cp/*$(objext)
-rm -f cp/*$(coverageexts) -rm -f cp/*$(coverageexts)
-rm -f xg++$(exeext) g++-cross$(exeext) cc1plus$(exeext) cc1plus.fda -rm -f xg++$(exeext) g++-cross$(exeext) cc1plus$(exeext) cc1plus*.fda
c++.clean: c++.clean:
c++.distclean: c++.distclean:
-rm -f cp/config.status cp/Makefile -rm -f cp/config.status cp/Makefile

View File

@ -3119,7 +3119,7 @@ It is recommended to only use GCC for this.
On Linux/x86_64 hosts with some restrictions (no virtualization) it is On Linux/x86_64 hosts with some restrictions (no virtualization) it is
also possible to do autofdo build with @samp{make also possible to do autofdo build with @samp{make
autoprofiledback}. This uses Linux perf to sample branches in the autoprofiledbootstrap}. This uses Linux perf to sample branches in the
binary and then rebuild it with feedback derived from the profile. binary and then rebuild it with feedback derived from the profile.
Linux perf and the @code{autofdo} toolkit needs to be installed for Linux perf and the @code{autofdo} toolkit needs to be installed for
this. this.

View File

@ -74,7 +74,7 @@ lto.srcinfo:
lto.install-plugin: lto.install-plugin:
lto.mostlyclean: lto.mostlyclean:
rm -f $(LTO_OBJS) $(LTO_EXE) lto1.fda $(LTO_DUMP_OBJS) $(LTO_DUMP_EXE) lto-dump.fda rm -f $(LTO_OBJS) $(LTO_EXE) lto1*.fda $(LTO_DUMP_OBJS) $(LTO_DUMP_EXE) lto-dump.fda
lto.clean: lto.clean:
lto.distclean: lto.distclean:
@ -105,8 +105,34 @@ $(LTO_DUMP_EXE): $(LTO_DUMP_OBJS) $(BACKEND) $(LIBDEPS) $(lto2.prev)
lto/lto-dump.o: $(LTO_OBJS) lto/lto-dump.o: $(LTO_OBJS)
lto1.fda: ../prev-gcc/lto1$(exeext) ../prev-gcc/$(PERF_DATA) components_in_prev = "bfd opcodes binutils fixincludes gas gcc gmp mpfr mpc isl gold intl ld libbacktrace libcpp libcody libdecnumber libiberty libiberty-linker-plugin libiconv zlib lto-plugin libctf libsframe"
$(CREATE_GCOV) -binary ../prev-gcc/lto1$(exeext) -gcov lto1.fda -profile ../prev-gcc/$(PERF_DATA) -gcov_version 1 components_in_prev_target = "libstdc++-v3 libsanitizer libvtv libgcc libbacktrace libphobos zlib libgomp libatomic"
.PHONY: create_fdas_for_lto1
lto1.fda: create_fdas_for_lto1
$(PROFILE_MERGER) $(shell ls -ha lto1_*.fda) --output_file lto1.fda -gcov_version 2
create_fdas_for_lto1: ../stage1-gcc/lto1$(exeext) ../prev-gcc/$(PERF_DATA)
for component_in_prev in "$(components_in_prev)"; do \
perf_path=../prev-$$component_in_prev/$(PERF_DATA); \
echo "Perf path:"; \
echo $$perf_path; \
if [ -f $$perf_path ]; then \
profile_name=lto1_$$component_in_prev.fda; \
$(CREATE_GCOV) -binary ../stage1-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \
fi; \
done;
for component_in_prev_target in "$(components_in_prev_target)"; do \
perf_path=../prev-$(TARGET_SUBDIR)/$$component_in_prev_target/$(PERF_DATA); \
echo "Perf path:"; \
echo $$perf_path; \
if [ -f $$perf_path ]; then \
profile_name=lto1_$$component_in_prev_target.fda; \
$(CREATE_GCOV) -binary ../stage1-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \
fi; \
done;
# LTO testing is done as part of C/C++/Fortran etc. testing. # LTO testing is done as part of C/C++/Fortran etc. testing.
check-lto: check-lto: