From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.CeBiTec.Uni-Bielefeld.DE (smtp.CeBiTec.Uni-Bielefeld.DE [129.70.160.84]) by sourceware.org (Postfix) with ESMTPS id F3D2038460A2 for ; Fri, 5 Apr 2024 13:00:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F3D2038460A2 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=CeBiTec.Uni-Bielefeld.DE Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=cebitec.uni-bielefeld.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F3D2038460A2 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=129.70.160.84 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712322008; cv=none; b=vito5Lno0Ta1RXrk8lpwy+oFk3X4lVZtZfvrcPRZR0gjkT1VIgCihGUV/4PKDKuU2EsccPUDkdyvSBWRgrQIJyJs1XZr3Txe+2E31kdqi1TQV8pOLYt4uQMgmQ96jSo6OSueEjEr1wS9E+3DDfqayB9SDUjZxFM4WQm8KlqAi0k= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712322008; c=relaxed/simple; bh=RhQo2Ush/22pKeFpAmL6yLtsakBJjT54B21CZL5Axck=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=b/4bgyK/jB/jjCgEpuVgFYUnh3KHq/TOrRR5UKBxwqkNpa1lPsvmeqEvuGf3xX0NBExNWbFCNKAPQ6BHXIlefCZAKihTjxg/v778tg/kDDX469Br9XZbftFd7HcwwcLJDY9ELV21AuWNla2X+HJOnvna3DmFF2aAM5NyQ8sGfx0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from localhost (localhost [127.0.0.1]) by smtp.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTP id 0665CB5873; Fri, 5 Apr 2024 15:00:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d= cebitec.uni-bielefeld.de; h=content-transfer-encoding :content-type:content-type:mime-version:user-agent:message-id :in-reply-to:date:date:references:subject:subject:from:from :received:received; s=20200306; t=1712322001; bh=RhQo2Ush/22pKeF pAmL6yLtsakBJjT54B21CZL5Axck=; b=OX1kFq7m4yGJg3dYsaLG1MiZ8Yo1nFa 8T48qPGi73wODJGOQz3m5wrk8RFc3gcxDbqfVhhblnBnZQGvbaEnsbkyk+G5MbMQ ZgcFRLPuDT7lO3av6Ix7JbUYQ4VqTPSwy9CCXEy+SITwuMVH+kz3440QORckpB0z wHvkB53oz1+J9SY1o3a60cs1B4YGOPp0l7I5az9T69Khe6EnfjqUP66VOhcEV5Lc 5HrAP/pPyx0+v8E1HrakIqiG74z/ZolAfxLORJUw+kTmiSVq7UlG0BiKP1KsYL/9 h1vkCnLHh+sWMOr5ah5t524GYNCXClAIUKD8I2Cc/LlYj+BSaH9Pidw== X-Virus-Scanned: amavisd-new at cebitec.uni-bielefeld.de Received: from smtp.CeBiTec.Uni-Bielefeld.DE ([127.0.0.1]) by localhost (smtp.cebitec.uni-bielefeld.de [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id MlKkHVfcR57C; Fri, 5 Apr 2024 15:00:01 +0200 (CEST) Received: from manam.CeBiTec.Uni-Bielefeld.DE (p4fddb77e.dip0.t-ipconnect.de [79.221.183.126]) (Authenticated sender: ro) by smtp.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTPSA id 428BDB5C6C; Fri, 5 Apr 2024 15:00:01 +0200 (CEST) From: Rainer Orth To: =?utf-8?Q?J=C3=B8rgen?= Kvalsvik Cc: Jan Hubicka , gcc-patches@gcc.gnu.org, richard.guenther@gmail.com Subject: Re: [PATCH v10 1/2] Add condition coverage (MC/DC) References: <20240223111800.1209438-1-j@lambda.is> <7033a2f7-42de-4bb3-a99a-28a35995c4a2@lambda.is> Date: Fri, 05 Apr 2024 15:00:00 +0200 In-Reply-To: <7033a2f7-42de-4bb3-a99a-28a35995c4a2@lambda.is> (=?utf-8?Q?=22J=C3=B8rgen?= Kvalsvik"'s message of "Thu, 4 Apr 2024 14:54:18 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1.90 (usg-unix-v) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-3790.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi J=C3=B8rgen, > 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 >>> --- >>> >>=20 >>> 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)) =3D=3D NULL_TREE) >>> !=3D (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 (do= es > 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. this patch fails badly on Solaris (and probably all non-Linux targets): +FAIL: gcc.misc-tests/gcov-19.c (test for excess errors) +UNRESOLVED: gcc.misc-tests/gcov-19.c compilation failed to produce executa= ble +FAIL: gcc.misc-tests/gcov-19.c gcov: 0 failures in line counts, 0 in branc= h percentages, 796 in condition/decision, 0 in return percentages, 0 in int= ermediate format +FAIL: gcc.misc-tests/gcov-19.c line 1006: unexpected summary - expected 1/= 24, got 0/24 and almost 1000 more lines. gcov-19.exe doesn't link due to use of a Linux implementation detail: Undefined first referenced symbol in file __sigsetjmp /var/tmp//cc.8e7Qc.o ld: fatal: symbol referencing errors collect2: error: ld returned 1 exit status Either switch the testcase to use sigsetjmp or restrict it to Linux. Besides, emitting many hundreds of FAILs if the testcase doesn't compile is very bad style. Please fix. Rainer --=20 ---------------------------------------------------------------------------= -- Rainer Orth, Center for Biotechnology, Bielefeld University