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