[PE-POST] Adjust Bit-region in expand_assignment

Jeff Law law@redhat.com
Fri Dec 6 04:13:00 GMT 2013


On 12/04/13 00:49, Bernd Edlinger wrote:
>
> Regarding the consistency of bitregion_start/end ,
>
> they should either both be zero, or
>
> bitregion_start <= bitpos && bitpos+bitsize-1 <= bitregion_end
Presumably to satisfy the consecutive bitfields are a single memory 
location stuff from C++11.  Thus the bitregion representation (C++11) 
must totally encompass the original COMPONENT_REF.  I can certainly see 
how that holds immediately after the call to get_bit_range.

When we adjust the address, we're just accounting for the bit position 
(bitpos).  ie, if bitpos was 16 and TO_RTX was (plus (reg) (32)).  We 
change TO_RTX to (plus (reg) (48)).  This is ultimately meant to 
simplify the resulting insns we generate by folding the bitpos 
adjustment into the address computation.  In effect, this results in 
accessing a subobject rather than the full object.  Presumably this is 
kosher for C++11's memory model (I really don't know).

*If* it is OK to access the subobject like this in C++11's memory model, 
then is is necessary for bitregion_{start,end} to encompass the original 
object, or should it be made consistent with the bitpos/bitsize?  And 
that seems to me to be the fundamental question.  What is really the 
purpose of the bitregion_{start,end} representation?  If it must 
represent the C++ object, then ISTM we don't want to mess with it.  If 
it doesn't, then why did we bother building this alternate 
representation to begin with?


Jeff



More information about the Gcc-patches mailing list