https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99919

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2021-11-30
     Ever confirmed|0                           |1
           Assignee|unassigned at gcc dot gnu.org      |pinskia at gcc dot 
gnu.org
   Target Milestone|9.5                         |13.0
           Keywords|                            |deferred

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Aldy Hernandez from comment #3)
> The warning on the above IL seems legit.
> 
> x_5 is initialized from b$i_11 when b & 1 == 0, but the read from x_5
> happens when b & 2 != 0.  So the set and the read are predicated on two
> different things.
> 
> Maybe I'm missing some subtle bit field thing.  Does setting b.j somehow
> alter b.i?
b.j is (b&2)<<1.

If lower bit field acceses it is fixed (but also becomes more obvious what the
of b.j is:
  _20 = VIEW_CONVERT_EXPR<unsigned char>(b);
  _21 = BIT_INSERT_EXPR <_20, b$j_15, 1 (1 bits)>;
  VIEW_CONVERT_EXPR<unsigned char>(b) = _21;
  _3 = VIEW_CONVERT_EXPR<unsigned char>(b);
  _4 = _3 & 2;

So Mine for GCC 13.

Reply via email to