On Thu, Jul 26, 2018 at 10:44 AM Martin Liška <mli...@suse.cz> wrote: > > On 07/25/2018 03:50 PM, Richard Biener wrote: > > On Wed, Jul 25, 2018 at 3:38 PM Martin Liška <mli...@suse.cz> 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? Isn't that inconsistent with for example IPA-CP generated clones or inline instances? Manual multiversions in source are already reported separately? Richard. > Martin > > > > > Richard. > > > >> Martin > >> > >> gcc/ChangeLog: > >> > >> 2018-07-25 Martin Liska <mli...@suse.cz> > >> > >> 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(-) > >> > >> >