From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2614 invoked by alias); 30 Aug 2017 09:45:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 2182 invoked by uid 89); 30 Aug 2017 09:45:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS autolearn=ham version=3.3.2 spammy=spread, Hx-languages-length:4217, Hack X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 30 Aug 2017 09:45:25 +0000 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id A70A5ABBC; Wed, 30 Aug 2017 09:45:21 +0000 (UTC) Subject: [RFC] Make 4-stage PGO bootstrap really working To: Jan Hubicka Cc: Markus Trippelsdorf , GCC Patches , Richard Biener References: <20170529050407.GA15061@x4> <9203f3a8-3aa4-292b-1f2d-6749d3e6d0f7@suse.cz> <20170619103713.GB72026@kam.mff.cuni.cz> From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Message-ID: Date: Wed, 30 Aug 2017 10:44:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <20170619103713.GB72026@kam.mff.cuni.cz> Content-Type: multipart/mixed; boundary="------------0A14DD8C6D9D93B6C5E5D54A" X-IsSubscribed: yes X-SW-Source: 2017-08/txt/msg01707.txt.bz2 This is a multi-part message in MIME format. --------------0A14DD8C6D9D93B6C5E5D54A Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 7bit Content-length: 1008 Hi. This is follow up which I've just noticed. Main problem we have is that an instrumented compiler w/ -fprofile-generate (built in $OBJDIR/gcc subfolder) will generate all *.gcda files in a same dir as *.o files. That's problematic because we then have *.gcda files spread in 'profile' subfolder (because profile' compiler builds libgcc) and 'train' subfolder. Eventually in 'feedback' stage we don't load any *.gcda files :/ Well I really hope we need to set -fprofile-generate=$folder to a $folder. There comes second problem: all *.gcda files are created as $folder/$aux_base_name.gcda which makes it useless as we multiple same file names: $ find . -name expr.c ./libcpp/expr.c ./gcc/expr.c Thus I suggest patch #0001 that appends full path of current work dir. Patch #0002 sets a folder for PGO bootstrap. So far so good with a small exception: conftest.gcda files that trigger -Wcoverage-mismatch. Can we remove these before a stage? Do we do a similar thing somewhere? Thoughts? Thanks, Martin --------------0A14DD8C6D9D93B6C5E5D54A Content-Type: text/x-patch; name="0002-Hack-Makefile.tpl.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0002-Hack-Makefile.tpl.patch" Content-length: 1995 >From f00c6bd99b98df7c650bb3fcbbb983671c99caef Mon Sep 17 00:00:00 2001 From: marxin Date: Mon, 28 Aug 2017 11:58:47 +0200 Subject: [PATCH 2/2] Hack Makefile.tpl --- Makefile.in | 5 +++-- Makefile.tpl | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Makefile.in b/Makefile.in index 78db0982ba2..16b76906ad0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -529,13 +529,14 @@ STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \ --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \ --disable-build-format-warnings -STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate +profile_folder=`${PWD_COMMAND}`/gcov-profiles/ +STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate=$(profile_folder) STAGEprofile_TFLAGS = $(STAGE2_TFLAGS) STAGEtrain_CFLAGS = $(STAGE3_CFLAGS) STAGEtrain_TFLAGS = $(STAGE3_TFLAGS) -STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use +STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use=$(profile_folder) -fdump-ipa-profile STAGEfeedback_TFLAGS = $(STAGE4_TFLAGS) STAGEautoprofile_CFLAGS = $(STAGE2_CFLAGS) -g diff --git a/Makefile.tpl b/Makefile.tpl index 5fcd7e358d9..129175a579c 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -452,13 +452,14 @@ STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \ --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \ --disable-build-format-warnings -STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate +profile_folder=`${PWD_COMMAND}`/gcov-profiles/ +STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate=$(profile_folder) STAGEprofile_TFLAGS = $(STAGE2_TFLAGS) STAGEtrain_CFLAGS = $(STAGE3_CFLAGS) STAGEtrain_TFLAGS = $(STAGE3_TFLAGS) -STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use +STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use=$(profile_folder) -fdump-ipa-profile STAGEfeedback_TFLAGS = $(STAGE4_TFLAGS) STAGEautoprofile_CFLAGS = $(STAGE2_CFLAGS) -g -- 2.14.1 --------------0A14DD8C6D9D93B6C5E5D54A Content-Type: text/x-patch; name="0001-Append-PWD-to-path-when-using-fprofile-generate-some.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-Append-PWD-to-path-when-using-fprofile-generate-some.pa"; filename*1="tch" Content-length: 1262 >From 654ca05a0e1e0261a4477283ca2dd8678f62f1e7 Mon Sep 17 00:00:00 2001 From: marxin Date: Wed, 16 Aug 2017 10:22:57 +0200 Subject: [PATCH 1/2] Append PWD to path when using -fprofile-generate=/some/path. --- gcc/coverage.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/gcc/coverage.c b/gcc/coverage.c index ed469107e3e..5780e19bbc8 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -1220,8 +1220,24 @@ coverage_init (const char *filename) g->get_passes ()->get_pass_profile ()->static_pass_number; g->get_dumps ()->dump_start (profile_pass_num, NULL); - if (!profile_data_prefix && !IS_ABSOLUTE_PATH (filename)) - profile_data_prefix = getpwd (); + if (!IS_ABSOLUTE_PATH (filename)) + { + if (profile_data_prefix) + { + const char *pwd = getpwd (); + unsigned l1 = strlen (profile_data_prefix); + unsigned l2 = strlen (pwd); + + char *b = XNEWVEC (char, l1 + l2 + 2); + memcpy (b, profile_data_prefix, l1); + b[l1] = '/'; + memcpy (b + l1 + 1, pwd, l2); + b[l1 + l2 + 1] = '\0'; + profile_data_prefix = b; + } + else + profile_data_prefix = getpwd (); + } if (profile_data_prefix) prefix_len = strlen (profile_data_prefix); -- 2.14.1 --------------0A14DD8C6D9D93B6C5E5D54A--