From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 109441 invoked by alias); 1 Aug 2018 11:02:12 -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 109430 invoked by uid 89); 1 Aug 2018 11:02:10 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-6.9 required=5.0 tests=BAYES_00,GIT_PATCH_2,SPF_PASS autolearn=ham version=3.3.2 spammy=Hope, sk:ppc64le 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, 01 Aug 2018 11:02:09 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 48C76AF54; Wed, 1 Aug 2018 11:02:07 +0000 (UTC) Subject: Re: [PATCH] Fix target clones (PR gcov-profile/85370). To: Richard Biener Cc: GCC Patches , Nathan Sidwell References: <3a052338-1513-54d0-d7cb-b32ce5a5338e@suse.cz> <7fe6b033-8dc1-f57c-30e5-de4c9f03ca22@suse.cz> From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Message-ID: Date: Wed, 01 Aug 2018 11:02:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2018-08/txt/msg00040.txt.bz2 On 07/26/2018 11:00 AM, Richard Biener wrote: > On Thu, Jul 26, 2018 at 10:44 AM Martin Liška wrote: >> >> On 07/25/2018 03:50 PM, Richard Biener wrote: >>> On Wed, Jul 25, 2018 at 3:38 PM Martin Liška wrote: >>>> >>>> Hi. >>>> >>>> Target clones have DECL_ARTIFICIAL set to 1, but we want to >>>> provide --coverage for that. With patched GCC on can see: >>>> >>>> -: 0:Source:pr85370.c >>>> -: 0:Graph:pr85370.gcno >>>> -: 0:Data:pr85370.gcda >>>> -: 0:Runs:1 >>>> -: 0:Programs:1 >>>> -: 1:__attribute__((target_clones("arch=slm","default"))) >>>> 1: 2:int foo1 (int a, int b) { // executed #### wrongly >>>> 1: 3: return a + b; >>>> -: 4:} >>>> ------------------ >>>> foo1.arch_slm.0: >>>> 0: 2:int foo1 (int a, int b) { // executed #### wrongly >>>> 0: 3: return a + b; >>>> -: 4:} >>>> ------------------ >>>> foo1.default.1: >>>> 1: 2:int foo1 (int a, int b) { // executed #### wrongly >>>> 1: 3: return a + b; >>>> -: 4:} >>>> ------------------ >>>> -: 5: >>>> 1: 6:int foo2 (int a, int b) { >>>> 1: 7: return a + b; >>>> -: 8:} >>>> -: 9: >>>> 1: 10:int main() { >>>> 1: 11: foo1(1, 1); >>>> 1: 12: foo2(1, 1); >>>> 1: 13: return 1; >>>> -: 14:} >>>> >>>> Patch can bootstrap on ppc64le-redhat-linux and survives regression tests. >>>> Will install in couple of days if no objection. >>> >>> I wonder if representing the clones as artificial but have their body be >>> marked as inline instance of the original function works for gcov? >> >> Do you mean an inlined functions? If so, these are fine as gimple statements >> that were inlined still point to original source code. >> >> I think >>> it should for debuggers. A similar case is probably the >>> static_constructors_and_destructors >> >> Actually static_c_a_d were motivation for exclusion. They have location set >> to last line in source code and it's not intentional. Similarly implicit >> ctors/dtors (e.g. Centering<3>::Centering(Centering<3> const&)) are ignored >> as they don't have any real line of code in a source file. >> >>> function which has all ctors/dtors of static objects inlined into but itself is >>> of course artificial. Is that handled correctly? >> >> Hope I explained enough? > > The question is what you like to see - looking at your figure above it > looks like > you want to see separate coverage for the different clones even when they > are auto-generated by GCC? Probably yes, I don't have any strong opinion here. Isn't that inconsistent with for example > IPA-CP generated clones or inline instances? Manual multiversions > in source are already reported separately? Yes, that would be reported separately. Martin > > Richard. > >> Martin >> >>> >>> Richard. >>> >>>> Martin >>>> >>>> gcc/ChangeLog: >>>> >>>> 2018-07-25 Martin Liska >>>> >>>> PR gcov-profile/85370 >>>> * coverage.c (coverage_begin_function): Do not mark target >>>> clones as artificial functions. >>>> --- >>>> gcc/coverage.c | 3 ++- >>>> 1 file changed, 2 insertions(+), 1 deletion(-) >>>> >>>> >>