[Bug tree-optimization/58570] [4.9 Regression] wrong code for bitfields at -O2 and above

2013-10-08 Thread bernd.edlinger at hotmail dot de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58570

--- Comment #6 from Bernd Edlinger bernd.edlinger at hotmail dot de ---
(In reply to Eric Botcazou from comment #5)
 I think we just want to copy the following from
 nonoverlapping_component_refs_p:
 
   /* If we're left with accessing different fields of a structure, then
 no
possible overlap, unless they are both bitfields.  */
   if (TREE_CODE (typex) == RECORD_TYPE  fieldx != fieldy)
   return !(DECL_BIT_FIELD (fieldx)  DECL_BIT_FIELD (fieldy));
 
 over to nonoverlapping_component_refs_of_decl_p.

Yes.
Just one idea:

What if both bit fields have different DECL_BIT_FIELD_REPRESENTATIVE?

Then they can't possibly overlap?

[Bug tree-optimization/58570] [4.9 Regression] wrong code for bitfields at -O2 and above

2013-10-08 Thread ebotcazou at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58570

--- Comment #7 from Eric Botcazou ebotcazou at gcc dot gnu.org ---
 What if both bit fields have different DECL_BIT_FIELD_REPRESENTATIVE?
 
 Then they can't possibly overlap?

Probably, yes, that could be a nice enhancement.


[Bug tree-optimization/58570] [4.9 Regression] wrong code for bitfields at -O2 and above

2013-10-07 Thread ebotcazou at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58570

Eric Botcazou ebotcazou at gcc dot gnu.org changed:

   What|Removed |Added

 CC|bernd.edlinger at hotmail dot de   |
   Assignee|unassigned at gcc dot gnu.org  |ebotcazou at gcc dot 
gnu.org
Summary|[4.9 Regression] wrong code |[4.9 Regression] wrong code
   |at -Os and above on |for bitfields at -O2 and
   |x86_64-linux-gnu (both  |above
   |32-bit and 64-bit modes)|

--- Comment #5 from Eric Botcazou ebotcazou at gcc dot gnu.org ---
I think we just want to copy the following from
nonoverlapping_component_refs_p:

  /* If we're left with accessing different fields of a structure, then no
 possible overlap, unless they are both bitfields.  */
  if (TREE_CODE (typex) == RECORD_TYPE  fieldx != fieldy)
return !(DECL_BIT_FIELD (fieldx)  DECL_BIT_FIELD (fieldy));

over to nonoverlapping_component_refs_of_decl_p.