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

--- Comment #21 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Andrew Pinski <[email protected]>:

https://gcc.gnu.org/g:d8c407a7c842a449f8bdb3bffd7e667833427ea4

commit r16-3646-gd8c407a7c842a449f8bdb3bffd7e667833427ea4
Author: Andrew Pinski <[email protected]>
Date:   Fri Apr 18 17:06:33 2025 -0700

    strlen: Don't do the malloc+memset->calloc optimization in some cases
[PR83022]

    This fixes a long standing (since GCC 5) issue where the
malloc+memset->calloc
    optimization would happen even if the memset was not always executed.
    This is a varient of Nathan's patch:
https://inbox.sourceware.org/gcc-patches/[email protected]/
    Jeff Law had suggested to look at probabilities of the basic blocks to see
    if it is profitable or not; I am not totally convinced that is a good idea.
    Though this is an extended version of Nathan's patch as it uses post
domination to see
    if the memset is always called after the condition of null-ness.

            PR tree-optimization/83022

    gcc/ChangeLog:

            * tree-ssa-strlen.cc (last_stmt_ptr_check): New function.
            (allow_memset_malloc_to_calloc): New function.
            (strlen_pass::handle_builtin_memset): Check to see if it is a good
            idea to do the malloc+memset->calloc optimization.
            (printf_strlen_execute): Free post dom info.

    gcc/testsuite/ChangeLog:

            * gcc.dg/tree-ssa/calloc-6.c: New test.
            * gcc.dg/tree-ssa/calloc-7.c: New test.
            * gcc.dg/tree-ssa/calloc-8.c: New test.
            * gcc.dg/tree-ssa/calloc-9.c: New test.

    Signed-off-by: Andrew Pinski <[email protected]>

Reply via email to