> Yes and no. What's important is that you don't want to introduce page
> faults (or less urgently, cache misses) by speculating the load. So the
> patch is currently extremely constrained, and likely will always stay
> that way. Only fields that are pointers and that are strictly adjacent
> are hoisted, and only if they're in the same 16-byte block. (The number
> 16 is a parameter that can be adjusted.)
> Hopefully I didn't miss your point -- let me know if I did and I'll try
> again. :)
You missed the point :-)
Under the C++11 memory model you can't introduce new data races on
objects which might be visible to multiple threads. This requirement
can restrict speculation in many cases. Furthermore, it sounds like C11
will have similar constraints.
I believe there's a wiki page which touches on these kinds of issues.
That doesn't mean we can't ever do the optimization, just that we have
to be more careful than we have in the past when mucking around with