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

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
The issue is really unexpected if-conversion which ends up putting the
vector copy of an innner loop outside of the enclosing loop of a scalar
loop.  Such mishap usually happens because of simplifications.

In this case we see bitfield lowering touching a volatile access which
it shouldn't do, even removing the volatile marking and then value-numbering
concluding the lowered d.b is 5:

Value numbering stmt = _ifc__21 = d.D.2770;
RHS d.D.2770 simplified to 5
Setting value number of _ifc__21 to 5 (changed)
Replaced d.D.2770 with 5 in all uses of _ifc__21 = d.D.2770;
Value numbering stmt = _ifc__22 = BIT_FIELD_REF <_ifc__21, 8, 0>;
Match-and-simplified BIT_FIELD_REF <_ifc__21, 8, 0> to 5
RHS BIT_FIELD_REF <_ifc__21, 8, 0> simplified to 5
Setting value number of _ifc__22 to 5 (changed)
Replaced BIT_FIELD_REF <_ifc__21, 8, 0> with 5 in all uses of _ifc__22 =
BIT_FIELD_REF <_ifc__21, 8, 0>;
Value numbering stmt = _1 = _ifc__22;
Setting value number of _1 to 5 (changed)
Value numbering stmt = if (_1 == 0)
marking known outgoing edge 4 -> 5 executable
gimple_simplified to if (0 != 0)

Reply via email to