Hi, On Fri, 6 Mar 2015 10:09:30, Eric Botcazou wrote: > >> Hmm. As you also modify the no-strict-volatile-bitfield path I'm not sure >> you don't regress the case where EP_insv can work on memory. I agree >> that simplifying the strict-volatile-bitfield path to extract the memory >> within strict-volatile-bitfield constraints to a reg and then using the >> regular path is a good thing. >> >> Eric? > > Even if the no-strict-volatile-bitfield path isn't touched, I don't understand > > @@ -976,7 +976,7 @@ store_bit_field (rtx str_rtx, unsigned HOST_WIDE_I > /* Storing any naturally aligned field can be done with a simple > store. For targets that support fast unaligned memory, any > naturally sized, unit aligned field can be done directly. */ > - if (simple_mem_bitfield_p (str_rtx, bitsize, bitnum, fieldmode)) > + if (bitsize == GET_MODE_BITSIZE (fieldmode)) > { > str_rtx = adjust_bitfield_address (str_rtx, fieldmode, > bitnum / BITS_PER_UNIT); > > > { > - rtx result; > - > /* Extraction of a full MODE1 value can be done with a load as long as > the field is on a byte boundary and is sufficiently aligned. */ > - if (simple_mem_bitfield_p (str_rtx, bitsize, bitnum, mode1)) > - result = adjust_bitfield_address (str_rtx, mode1, > - bitnum / BITS_PER_UNIT); > - else > + if (bitsize == GET_MODE_BITSIZE(mode1)) > { > - str_rtx = narrow_bit_field_mem (str_rtx, mode1, bitsize, bitnum, > - &bitnum); > - result = extract_fixed_bit_field_1 (mode, str_rtx, bitsize, bitnum, > - target, unsignedp); > + rtx result = adjust_bitfield_address (str_rtx, mode1, > + bitnum / BITS_PER_UNIT); > > > adjust_bitfield_address takes (bitnum / BITS_PER_UNIT) so don't you need to > make sure that bitnum % BITS_PER_UNIT == 0? >
I know it because strict_volatile_bitfield_p checks this: /* Check for cases of unaligned fields that must be split. */ if (bitnum % BITS_PER_UNIT + bitsize> modesize Therefore, if bitsize == modesize, we know that bitnum % BITS_PER_UNIT must be zero. > In any case, the comments are now totally out of sync. > > -- > Eric Botcazou