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?
Siddhesh
