From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx.kolabnow.com (mx.kolabnow.com [212.103.80.155]) by sourceware.org (Postfix) with ESMTPS id 28FD63858C5F for ; Mon, 15 Apr 2024 09:03:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 28FD63858C5F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=lambda.is Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=lambda.is ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 28FD63858C5F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=212.103.80.155 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713171847; cv=none; b=Z2HC/YjPTH3GSnISYcIR5OYbtvSLUkAoMqGnBZOZLA6pomezwUrOAf8F21e4IysSAgorzRRipsGnUlszqu2Fw/8KPIO7RGFPTDEx1hayKxSlZ7cNyk+KiDi36egp3RlYEjpENi8GB+N7G7p/JU2rDSBGZuuWLYlBzWzz+/JHFDg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713171847; c=relaxed/simple; bh=Svq0DbSD0UdDe6MFAqRHkUhKQwHhWiuk+ScJ+F77fiQ=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=i3CXKY9s1R7XN0ay2U1gZ67hePgE0DJvh1XKjjYdbzxafDdy91G9wr4xme7VLipFFi1McN7+mD/eXuiOIdT2OLC76Vnz1zPNnzp98tT+ih/qsSmVIgJ8B3FMKORgLbzFpRtCd3PkS+GrU/RNWgmET0EH0EL88GviNfjAyZiphqQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from localhost (unknown [127.0.0.1]) by mx.kolabnow.com (Postfix) with ESMTP id 20E612096DF2; Mon, 15 Apr 2024 11:03:53 +0200 (CEST) Authentication-Results: ext-mx-out011.mykolab.com (amavis); dkim=pass (4096-bit key) reason="pass (just generated, assumed good)" header.d=kolabnow.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kolabnow.com; h= content-transfer-encoding:content-type:content-type:in-reply-to :from:from:content-language:references:subject:subject :mime-version:date:date:message-id:received:received:received; s=dkim20160331; t=1713171829; x=1714986230; bh=2Vv7lY8TQUEj51iI CXu6Q1QeG1l4AwDVvOsjvdo72Hw=; b=BaDoaA85Law/lQZp+Gdwx5pjgw6Xjm8M Cv3yjMViDlEjILD+kLY17JkDmKGB1FxJ5d9nXNA4qiMmH9hx+htGZwicRBWgEh6C FDoF26PaVxh2URaBgw+cqtbqCB4/4Ov8hYQjlCmkp8IaTsP4gK6Ab593uELbZ9Oz uTaISZUolhezMekuPMfPr9t02HRkJl+61vDt1tl4vRM6zm3S9yBpUdzBloOK45xx hglKHbNtoAWkB5Hcqz5/aXqiPIMRM0tBztJ60QYMrngKZk7k1EpyaquvDSLmOU3v 58pxRf538xyCJukJ68oeQMsf+3A/J1MYdeD/6ANnskiAoLWXF8hQx1vFePhBZyOx 1XkO3SjRKjV0WIWXkWBO1YAGNo6R3Bb6Hg/COE0ZqjbQWUen1y0vGHAnZg+Pdrz6 7UYqMwyDnANyuS5Tttp3EDp7uX8mlOjljftMnDNdzXtknx8bnnu/wTDZ1FGB3Oa1 yfyi7u7pS1MlD6m50kga06brn2E34Xi4Vy5QOAPOpcZ5ciVKkrq4PUxQwsVkTaf5 /nLScyA9I7orYDye8gpqbqkoZSAq3RPMENgy6g4xfO3pE/lITdRlsqaAR2b4L09U 5x7baOnKSQMhHe4JJwE9bSBm7EwihYcDSULazbKWDaNi2aZQaOjDKOXGcZ4FNnWX NWbKS+zwWP0= X-Virus-Scanned: amavis at mykolab.com X-Spam-Score: -1 X-Spam-Level: X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 Received: from mx.kolabnow.com ([127.0.0.1]) by localhost (ext-mx-out011.mykolab.com [127.0.0.1]) (amavis, port 10024) with ESMTP id 7MX-XzHtuEXG; Mon, 15 Apr 2024 11:03:49 +0200 (CEST) Received: from int-mx011.mykolab.com (unknown [10.9.13.11]) by mx.kolabnow.com (Postfix) with ESMTPS id D72592096DD7; Mon, 15 Apr 2024 11:03:47 +0200 (CEST) Received: from ext-subm010.mykolab.com (unknown [10.9.6.10]) by int-mx011.mykolab.com (Postfix) with ESMTPS id DF9D831236E1; Mon, 15 Apr 2024 11:03:46 +0200 (CEST) Message-ID: <0e471cb5-6a3d-44ea-ba5a-41176772dc7a@lambda.is> Date: Mon, 15 Apr 2024 11:03:45 +0200 MIME-Version: 1.0 Subject: Re: [PATCH v10 1/2] Add condition coverage (MC/DC) To: Rainer Orth Cc: Jan Hubicka , gcc-patches@gcc.gnu.org, richard.guenther@gmail.com References: <20240223111800.1209438-1-j@lambda.is> <7033a2f7-42de-4bb3-a99a-28a35995c4a2@lambda.is> Content-Language: en-US From: =?UTF-8?Q?J=C3=B8rgen_Kvalsvik?= In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 15/04/2024 10:53, Rainer Orth wrote: > Hi Jørgen, > >> On 04/04/2024 14:10, Jan Hubicka wrote: >>>> gcc/ChangeLog: >>>> >>>> * builtins.cc (expand_builtin_fork_or_exec): Check >>>> condition_coverage_flag. >>>> * collect2.cc (main): Add -fno-condition-coverage to OBSTACK. >>>> * common.opt: Add new options -fcondition-coverage and >>>> -Wcoverage-too-many-conditions. >>>> * doc/gcov.texi: Add --conditions documentation. >>>> * doc/invoke.texi: Add -fcondition-coverage documentation. >>>> * function.cc (free_after_compilation): Free cond_uids. >>>> * function.h (struct function): Add cond_uids. >>>> * gcc.cc: Link gcov on -fcondition-coverage. >>>> * gcov-counter.def (GCOV_COUNTER_CONDS): New. >>>> * gcov-dump.cc (tag_conditions): New. >>>> * gcov-io.h (GCOV_TAG_CONDS): New. >>>> (GCOV_TAG_CONDS_LENGTH): New. >>>> (GCOV_TAG_CONDS_NUM): New. >>>> * gcov.cc (class condition_info): New. >>>> (condition_info::condition_info): New. >>>> (condition_info::popcount): New. >>>> (struct coverage_info): New. >>>> (add_condition_counts): New. >>>> (output_conditions): New. >>>> (print_usage): Add -g, --conditions. >>>> (process_args): Likewise. >>>> (output_intermediate_json_line): Output conditions. >>>> (read_graph_file): Read condition counters. >>>> (read_count_file): Likewise. >>>> (file_summary): Print conditions. >>>> (accumulate_line_info): Accumulate conditions. >>>> (output_line_details): Print conditions. >>>> * gimplify.cc (next_cond_uid): New. >>>> (reset_cond_uid): New. >>>> (shortcut_cond_r): Set condition discriminator. >>>> (tag_shortcut_cond): New. >>>> (gimple_associate_condition_with_expr): New. >>>> (shortcut_cond_expr): Set condition discriminator. >>>> (gimplify_cond_expr): Likewise. >>>> (gimplify_function_tree): Call reset_cond_uid. >>>> * ipa-inline.cc (can_early_inline_edge_p): Check >>>> condition_coverage_flag. >>>> * ipa-split.cc (pass_split_functions::gate): Likewise. >>>> * passes.cc (finish_optimization_passes): Likewise. >>>> * profile.cc (struct condcov): New declaration. >>>> (cov_length): Likewise. >>>> (cov_blocks): Likewise. >>>> (cov_masks): Likewise. >>>> (cov_maps): Likewise. >>>> (cov_free): Likewise. >>>> (instrument_decisions): New. >>>> (read_thunk_profile): Control output to file. >>>> (branch_prob): Call find_conditions, instrument_decisions. >>>> (init_branch_prob): Add total_num_conds. >>>> (end_branch_prob): Likewise. >>>> * tree-core.h (struct tree_exp): Add condition_uid. >>>> * tree-profile.cc (struct conds_ctx): New. >>>> (CONDITIONS_MAX_TERMS): New. >>>> (EDGE_CONDITION): New. >>>> (topological_cmp): New. >>>> (index_of): New. >>>> (single_p): New. >>>> (single_edge): New. >>>> (contract_edge_up): New. >>>> (struct outcomes): New. >>>> (conditional_succs): New. >>>> (condition_index): New. >>>> (condition_uid): New. >>>> (masking_vectors): New. >>>> (emit_assign): New. >>>> (emit_bitwise_op): New. >>>> (make_top_index_visit): New. >>>> (make_top_index): New. >>>> (paths_between): New. >>>> (struct condcov): New. >>>> (cov_length): New. >>>> (cov_blocks): New. >>>> (cov_masks): New. >>>> (cov_maps): New. >>>> (cov_free): New. >>>> (find_conditions): New. >>>> (struct counters): New. >>>> (find_counters): New. >>>> (resolve_counter): New. >>>> (resolve_counters): New. >>>> (instrument_decisions): New. >>>> (tree_profiling): Check condition_coverage_flag. >>>> (pass_ipa_tree_profile::gate): Likewise. >>>> * tree.h (SET_EXPR_UID): New. >>>> (EXPR_COND_UID): New. >>>> >>>> libgcc/ChangeLog: >>>> >>>> * libgcov-merge.c (__gcov_merge_ior): New. >>>> >>>> gcc/testsuite/ChangeLog: >>>> >>>> * lib/gcov.exp: Add condition coverage test function. >>>> * g++.dg/gcov/gcov-18.C: New test. >>>> * gcc.misc-tests/gcov-19.c: New test. >>>> * gcc.misc-tests/gcov-20.c: New test. >>>> * gcc.misc-tests/gcov-21.c: New test. >>>> * gcc.misc-tests/gcov-22.c: New test. >>>> * gcc.misc-tests/gcov-23.c: New test. >>>> --- >>>> gcc/builtins.cc | 2 +- >>>> gcc/collect2.cc | 7 +- >>>> gcc/common.opt | 9 + >>>> gcc/doc/gcov.texi | 38 + >>>> gcc/doc/invoke.texi | 21 + >>>> gcc/function.cc | 1 + >>>> gcc/function.h | 4 + >>>> gcc/gcc.cc | 4 +- >>>> gcc/gcov-counter.def | 3 + >>>> gcc/gcov-dump.cc | 24 + >>>> gcc/gcov-io.h | 3 + >>>> gcc/gcov.cc | 209 ++- >>>> gcc/gimplify.cc | 123 +- >>>> gcc/ipa-inline.cc | 2 +- >>>> gcc/ipa-split.cc | 2 +- >>>> gcc/passes.cc | 3 +- >>>> gcc/profile.cc | 76 +- >>>> gcc/testsuite/g++.dg/gcov/gcov-18.C | 282 ++++ >>>> gcc/testsuite/gcc.misc-tests/gcov-19.c | 1737 ++++++++++++++++++++++++ >>>> gcc/testsuite/gcc.misc-tests/gcov-20.c | 22 + >>>> gcc/testsuite/gcc.misc-tests/gcov-21.c | 16 + >>>> gcc/testsuite/gcc.misc-tests/gcov-22.c | 103 ++ >>>> gcc/testsuite/gcc.misc-tests/gcov-23.c | 361 +++++ >>>> gcc/testsuite/lib/gcov.exp | 259 +++- >>>> gcc/tree-core.h | 3 + >>>> gcc/tree-profile.cc | 1058 ++++++++++++++- >>>> gcc/tree.h | 4 + >>>> libgcc/libgcov-merge.c | 5 + >>>> 28 files changed, 4339 insertions(+), 42 deletions(-) >>>> create mode 100644 gcc/testsuite/g++.dg/gcov/gcov-18.C >>>> create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-19.c >>>> create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-20.c >>>> create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-21.c >>>> create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-22.c >>>> create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-23.c >>>> >>>> --- >>>> Changes since v9: >>>> >>>> * function->cond_uid is no longer in ggc memory >>>> * function->cond_uid and condition annotation is only done when coverage >>>> is requested >>>> * A few new test cases, notably interactions with C++ constexpr >>>> * Updated comments based on review feedback >>>> --- >>>> >>> >>>> diff --git a/gcc/ipa-inline.cc b/gcc/ipa-inline.cc >>>> index dc120e6da5a..9502a21c741 100644 >>>> --- a/gcc/ipa-inline.cc >>>> +++ b/gcc/ipa-inline.cc >>>> @@ -682,7 +682,7 @@ can_early_inline_edge_p (struct cgraph_edge *e) >>>> } >>>> gcc_assert (gimple_in_ssa_p (DECL_STRUCT_FUNCTION (e->caller->decl)) >>>> && gimple_in_ssa_p (DECL_STRUCT_FUNCTION (callee->decl))); >>>> - if (profile_arc_flag >>>> + if ((profile_arc_flag || condition_coverage_flag) >>>> && ((lookup_attribute ("no_profile_instrument_function", >>>> DECL_ATTRIBUTES (caller->decl)) == NULL_TREE) >>>> != (lookup_attribute ("no_profile_instrument_function", >>> tree-inline should also copy the cond tags, since always_inline >>> functions are inlined even at -O0. But I think this can be done >>> incrementally. >>> Patch is OK. >>> Thanks a lot and sorry for taking so long on this one. >>> Honza >> >> I guess you mean that since tree-inlining happen after gimplification (does >> it?) that the basic condition -> condition expression association should >> also fold in the now-inlined conditions? >> >> Thanks for the review - I'll do a final test run and install the patch. > > the new gcc.misc-tests/gcov-22.c test loops on SPARC (both Solaris and > Linux). I've filed PR gcov-profile/114720 for this, but couldn't find > any bugzilla account of yours to Cc: > > Rainer > > Thanks, I'll look into it right away.