https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114698

Peter Bergner <bergner at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|target                      |ipa
                 CC|                            |hubicka at gcc dot gnu.org

--- Comment #2 from Peter Bergner <bergner at gcc dot gnu.org> ---
I've confirmed that the function being miscompiled is
src/sha2.c:SHA256_Transform() on line 440.  I can add configure dcfldd with a
normal -O2 and add a __attribute__((optimize (3))) to this function and I see
bad output.  I can also configure dcfldd with -O3 and add a
__attribute__((optimize (2))) to this function and I see good output.


Doing a git bisect, it identified the following GCC commit as causing the bug:

64f3e71c302b4a13e61656ee509e7050b9bce978 is the first bad commit
commit 64f3e71c302b4a13e61656ee509e7050b9bce978
Author: Jan Hubicka <j...@suse.cz>
Date:   Sun Nov 14 18:49:15 2021 +0100

    Extend modref to track kills

    This patch adds kill tracking to ipa-modref.  This is representd by array
    of accesses to memory locations that are known to be overwritten by the
    function.

    gcc/ChangeLog:

    2021-11-14  Jan Hubicka  <hubi...@ucw.cz>

            * ipa-modref-tree.c (modref_access_node::update_for_kills): New
            member function.
            (modref_access_node::merge_for_kills): Likewise.
            (modref_access_node::insert_kill): Likewise.
            * ipa-modref-tree.h (modref_access_node::update_for_kills,
            modref_access_node::merge_for_kills,
modref_access_node::insert_kill):
            Declare.
            (modref_access_node::useful_for_kill): New member function.
            * ipa-modref.c (modref_summary::useful_p): Release useless kills.
            (lto_modref_summary): Add kills.
            (modref_summary::dump): Dump kills.
            (record_access): Add mdoref_access_node parameter.
            (record_access_lto): Likewise.
            (merge_call_side_effects): Merge kills.
            (analyze_call): Add ALWAYS_EXECUTED param and pass it around.
            (struct summary_ptrs): Add always_executed filed.
            (analyze_load): Update.
            (analyze_store): Update; record kills.
            (analyze_stmt): Add always_executed; record kills in clobbers.
            (analyze_function): Track always_executed.
            (modref_summaries::duplicate): Duplicate kills.
            (update_signature): Release kills.
            * ipa-modref.h (struct modref_summary): Add kills.
            * tree-ssa-alias.c (alias_stats): Add kill stats.
            (dump_alias_stats): Dump kill stats.
            (store_kills_ref_p): Break out from ...
            (stmt_kills_ref_p): Use it; handle modref info based kills.

    gcc/testsuite/ChangeLog:

    2021-11-14  Jan Hubicka  <hubi...@ucw.cz>

            * gcc.dg/tree-ssa/modref-dse-3.c: New test.

 gcc/ipa-modref-tree.c                        | 179 +++++++++++++++++++++++
 gcc/ipa-modref-tree.h                        |  15 ++
 gcc/ipa-modref.c                             | 126 +++++++++++++---
 gcc/ipa-modref.h                             |   1 +
 gcc/testsuite/gcc.dg/tree-ssa/modref-dse-3.c |  22 +++
 gcc/tree-ssa-alias.c                         | 207 +++++++++++++++++++--------
 6 files changed, 471 insertions(+), 79 deletions(-)

Reply via email to