On Fri, Apr 27, 2012 at 12:42:41PM +0800, Thomas Schwinge wrote: > > > GET_MODE_BITSIZE (lmode)« (8 bits). (With the current sources, lmode is > > > VOIDmode.) > > > > > > Is emmitting »BIT_FIELD_REF <*common, 32, 0> & 255« wrong in this case, > > > or should a later optimization pass be able to figure out that > > > »BIT_FIELD_REF <*common, 32, 0> & 255« is in fact the same as > > > common->code, and then be able to conflate these? Any suggestions > > > where/how to tackle this? > > > > The BIT_FIELD_REF is somewhat of a red-herring. It is created by > > fold-const.c > > in optimize_bit_field_compare, code that I think should be removed > > completely. > > Or it needs to be made aware of strict-volatile bitfield and C++ memory > > model > > details.
I'd actually very much prefer the latter, just disable optimize_bit_field_compare for strict-volatile bitfield mode and when avoiding load data races in C++ memory model (that isn't going to be default, right?). This optimization is useful, and it is solely about loads, so even C++ memory model usually shouldn't care. Jakub