https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51428
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|WAITING |NEW
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Martin Sebor from comment #1)
> Andrew, before I close this bug, would you like to shed some light on what
> you had in mind here? What sort of a resolution are you looking for?
So the reason why I said it was dead is because:
TREE_CODE (lhs) == COMPONENT_REF
&& (TREE_CODE (rhs) == BIT_IOR_EXPR
|| TREE_CODE (rhs) == BIT_AND_EXPR)
Can never be true after gimplification.
What this optimization is trying to do is the following:
struct f{
int i0:1;
int i1:1;
};
void or0(struct f *a)
{
a->i0 = a->i0 | a->i1;
}
into:
void or1(struct f *a)
{
if (a->i1 != 0)
a->i0 = 1;
}
And:
void and0(struct f *a)
{
a->i0 = a->i0 & a->i1;
}
into:
void and0(struct f *a)
{
if (a->i1 == 0)
a->i0 = 0;
}
------ CUT -----
Now this optimization has been disabled for ~8 years now and it might be better
if just removed.