On Tue, Jan 11, 2022 at 02:27:47PM +0530, Siddhesh Poyarekar wrote:
> 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.

Ok, but IMO please fix PR103961 first before committing this patchset.

> gcc/ChangeLog:
> 
>       * 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:
> 
>       * 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.
>       * gcc.dg/builtin-object-size-5.c [__builtin_object_size]:
>       Likewise.

        Jakub

Reply via email to