On Wed, 2020-06-17 at 10:04 +0200, Jakub Jelinek via Gcc-patches wrote: > On Wed, Jun 17, 2020 at 09:13:25AM +0200, Richard Biener via Gcc-patches > wrote: > > > Not doing the transformation I suggest at all, or not doing it in > > > cases when the member does match the source? > > > > We are currently not treating different fields at the same offset as > > "equal" before inlining completed for objsize to "work", thus leaving > > optimizations on the plate. > > As the first objsz pass runs quite early (the second one in > pass_all_early_optimizations), we could just add a property for that > and use it instead of the cfun->after_inlining check. > And after that pass, we should be remembering the field limits in the IL > explicitly as a MIN/MAX_EXPR for the bos call. Right. And that's part of the reason why I was suggesting we attach original type information to the calls (and perhaps other *_REF nodes) as early in the pipeline as possible -- the earlier in the pipeline we are, the closer the IL is to the source and the more likely that type information will be correct.
I'm not wed to that idea, but I do think we need to start moving away from walking the use-def chains to find an address computation which may have a type with little/no relation to the object we're modifying. I think it's become clear that's ultimately a losing battle. jeff