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

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Siddhesh Poyarekar
<siddh...@gcc.gnu.org>:

https://gcc.gnu.org/g:404c787e2bfe8cae666b075ed903990ea452220e

commit r12-6479-g404c787e2bfe8cae666b075ed903990ea452220e
Author: Siddhesh Poyarekar <siddh...@gotplt.org>
Date:   Tue Jan 11 05:27:51 2022 +0530

    tree-object-size: Support dynamic sizes in conditions

    Handle GIMPLE_PHI and conditionals specially for dynamic objects,
    returning PHI/conditional expressions instead of just a MIN/MAX
    estimate.

    This makes the returned object size variable for loops and conditionals,
    so tests need to be adjusted to look for precise size in some cases.
    builtin-dynamic-object-size-5.c had to be modified to only look for
    success in maximum object size case and skip over the minimum object
    size tests because the result is no longer a compile time constant.

    I also added some simple tests to exercise conditionals with dynamic
    object sizes.

    gcc/ChangeLog:

            PR middle-end/70090
            * builtins.c (fold_builtin_object_size): Adjust for dynamic size
            expressions.
            * tree-object-size.c: Include gimplify-me.h.
            (struct object_size_info): New member UNKNOWNS.
            (size_initval_p, size_usable_p, object_sizes_get_raw): New
            functions.
            (object_sizes_get): Return suitable gimple variable for
            object size.
            (bundle_sizes): New function.
            (object_sizes_set): Use it and handle dynamic object size
            expressions.
            (object_sizes_set_temp): New function.
            (size_for_offset): Adjust for dynamic size expressions.
            (emit_phi_nodes, propagate_unknowns, gimplify_size_expressions):
            New functions.
            (compute_builtin_object_size): Call gimplify_size_expressions
            for OST_DYNAMIC.
            (dynamic_object_size): New function.
            (cond_expr_object_size): Use it.
            (phi_dynamic_object_size): New function.
            (collect_object_sizes_for): Call it for OST_DYNAMIC.  Adjust to
            accommodate dynamic object sizes.

    gcc/testsuite/ChangeLog:

            PR middle-end/70090
            * gcc.dg/builtin-dynamic-object-size-0.c: New tests.
            * gcc.dg/builtin-dynamic-object-size-10.c: Add comment.
            * gcc.dg/builtin-dynamic-object-size-5-main.c: New file.
            * gcc.dg/builtin-dynamic-object-size-5.c: Use it and change test
            to dg-do run.
            * gcc.dg/builtin-object-size-5.c [!N]: Define N.
            (test1, test2, test3, test4) [__builtin_object_size]: Expect
            exact result for __builtin_dynamic_object_size.
            * gcc.dg/builtin-object-size-1.c [__builtin_object_size]: Expect
            exact size expressions for __builtin_dynamic_object_size.
            * gcc.dg/builtin-object-size-2.c [__builtin_object_size]:
            Likewise.
            * gcc.dg/builtin-object-size-3.c [__builtin_object_size]:
            Likewise.
            * gcc.dg/builtin-object-size-4.c [__builtin_object_size]:
            Likewise.

    Signed-off-by: Siddhesh Poyarekar <siddh...@gotplt.org>

Reply via email to