From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7840) id AF6323858CDB; Fri, 28 Apr 2023 20:20:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AF6323858CDB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1682713222; bh=aF7BbSMa7wTb44Bvui3Jr4AkAw8/8bicwhYHJOaw4Zc=; h=From:To:Subject:Date:From; b=FqF2JiIt8ScLCsSRgD0cvVpXQG6gDAj980RNvJC1K9fd1DHpjcVMJpl534NUdWW0w mH1xynm/nRq5ZrABnNsqDIrZbZcznjp82ufyOj6xqAEnm9eYoKvJuZyyII4tFsJfGS bivR066OCiTguZH66rYu7JlZGviotKiFIOeYduqI= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Eugene Rozenfeld To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-343] Fix autoprofiledbootstrap build X-Act-Checkin: gcc X-Git-Author: Eugene Rozenfeld X-Git-Refname: refs/heads/master X-Git-Oldrev: 065be0ffbcd676b635d492f4679e635b6ece4fe4 X-Git-Newrev: 0c77a0909456034d34036aa22a8dfcf0258cfa2d Message-Id: <20230428202022.AF6323858CDB@sourceware.org> Date: Fri, 28 Apr 2023 20:20:22 +0000 (GMT) List-Id: https://gcc.gnu.org/g:0c77a0909456034d34036aa22a8dfcf0258cfa2d commit r14-343-g0c77a0909456034d34036aa22a8dfcf0258cfa2d Author: Eugene Rozenfeld Date: Mon Nov 21 13:33:38 2022 -0800 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 Diff: --- Makefile.in | 4 +++- Makefile.tpl | 4 +++- gcc/c/Make-lang.in | 32 +++++++++++++++++++++++++++++--- gcc/cp/Make-lang.in | 33 +++++++++++++++++++++++++++++---- gcc/doc/install.texi | 2 +- gcc/lto/Make-lang.in | 32 +++++++++++++++++++++++++++++--- 6 files changed, 94 insertions(+), 13 deletions(-) diff --git a/Makefile.in b/Makefile.in index 06a9398e172..33f3c862557 100644 --- a/Makefile.in +++ b/Makefile.in @@ -491,6 +491,7 @@ PGO-TRAINING-TARGETS = binutils gas gdb ld sim PGO_BUILD_TRAINING = $(addprefix maybe-check-,$(PGO-TRAINING-TARGETS)) CREATE_GCOV = create_gcov +PROFILE_MERGER = profile_merger TFLAGS = @@ -971,7 +972,8 @@ EXTRA_HOST_FLAGS = \ 'STRIP=$(STRIP)' \ 'WINDRES=$(WINDRES)' \ 'WINDMC=$(WINDMC)' \ - 'CREATE_GCOV=$(CREATE_GCOV)' + 'CREATE_GCOV=$(CREATE_GCOV)' \ + 'PROFILE_MERGER=$(PROFILE_MERGER)' FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) diff --git a/Makefile.tpl b/Makefile.tpl index dfbd74b68f8..9d8ef9cf678 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -494,6 +494,7 @@ PGO-TRAINING-TARGETS = binutils gas gdb ld sim PGO_BUILD_TRAINING = $(addprefix maybe-check-,$(PGO-TRAINING-TARGETS)) CREATE_GCOV = create_gcov +PROFILE_MERGER = profile_merger TFLAGS = @@ -728,7 +729,8 @@ EXTRA_HOST_FLAGS = \ 'STRIP=$(STRIP)' \ 'WINDRES=$(WINDRES)' \ 'WINDMC=$(WINDMC)' \ - 'CREATE_GCOV=$(CREATE_GCOV)' + 'CREATE_GCOV=$(CREATE_GCOV)' \ + 'PROFILE_MERGER=$(PROFILE_MERGER)' FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) diff --git a/gcc/c/Make-lang.in b/gcc/c/Make-lang.in index b3b12dcffee..20840aceab6 100644 --- a/gcc/c/Make-lang.in +++ b/gcc/c/Make-lang.in @@ -88,9 +88,34 @@ cc1$(exeext): $(C_OBJS) cc1-checksum.o $(BACKEND) $(LIBDEPS) cc1-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS) @$(call LINK_PROGRESS,$(INDEX.c),end) -cc1.fda: ../stage1-gcc/cc1$(exeext) ../prev-gcc/$(PERF_DATA) - $(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov cc1.fda -profile ../prev-gcc/$(PERF_DATA) -gcov_version 1 - +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" +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: @@ -181,6 +206,7 @@ c.mostlyclean: -rm -f c/*$(objext) -rm -f c/*$(coverageexts) -rm -f cc1.fda + -rm -f cc1_*.fda c.clean: c.distclean: -rm -f c/config.status c/Makefile diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index 4ee26fad93d..c08ee91447e 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -186,9 +186,34 @@ endif # This is the file that depends on the generated header file. cp/name-lookup.o: $(srcdir)/cp/std-name-hint.h -cc1plus.fda: ../stage1-gcc/cc1plus$(exeext) ../prev-gcc/$(PERF_DATA) - $(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov cc1plus.fda -profile ../prev-gcc/$(PERF_DATA) -gcov_version 1 - +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" +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: @@ -335,7 +360,7 @@ c++.mostlyclean: -rm -f doc/g++.1 -rm -f cp/*$(objext) -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++.distclean: -rm -f cp/config.status cp/Makefile diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 928fc6b6d4b..fa91ce1953d 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -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 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. Linux perf and the @code{autofdo} toolkit needs to be installed for this. diff --git a/gcc/lto/Make-lang.in b/gcc/lto/Make-lang.in index b3b965e44f7..4f6025100a3 100644 --- a/gcc/lto/Make-lang.in +++ b/gcc/lto/Make-lang.in @@ -74,7 +74,7 @@ lto.srcinfo: lto.install-plugin: 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.distclean: @@ -105,8 +105,34 @@ $(LTO_DUMP_EXE): $(LTO_DUMP_OBJS) $(BACKEND) $(LIBDEPS) $(lto2.prev) lto/lto-dump.o: $(LTO_OBJS) -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 +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" +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. check-lto: