On 11/23/21 21:06, Siddhesh Poyarekar wrote:
On 11/23/21 20:42, Jakub Jelinek wrote:
On Wed, Nov 10, 2021 at 12:31:32AM +0530, Siddhesh Poyarekar wrote:
    (object_sizes_execute): Don't insert min/max for dynamic sizes.

I'm worried about this.
I'd say what we might want to do is in the early pass for __bdos
compute actually __bos (i.e. the static one) and add MIN_EXPR/MAX_EXPR
for the result of the __bdos call from the second pass with the
statically computed value.

The reason for the MIN_EXPR/MAX_EXPR stuff is that GIMPLE optimizations
can remove exact ADDR_EXPRs with detailed COMPONENT_REF etc. access paths
in it, so during the late objsz2 pass the subobject modes don't work
reliably anymore.  But the subobject knowledge should be the same between
the static and dynamic evaluation...

So in the dynamic case we almost always end up with the right expression in objsz1, except in cases where late optimizations make available information that wasn't available earlier.  How about putting in a MIN_EXPR/MAX_EXPR if we *fail* to get the subobject size instead?

Actually if we don't get a dynamic expression it's unlikely that we'll get a static size either, so I'm not sure if MIN_EXPR/MAX_EXPR will actually do anything useful.

Siddhesh

Reply via email to