https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66313
--- Comment #8 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Right now .optimized looks like this:
f6 (int a, int b)
{
int _2;
int _4;
int _5;
<bb 2>:
_2 = a_1(D) * 3;
_4 = _2 - b_3(D);
_5 = _4 * 2;
return _5;
}
whereas if we compute the expression in unsigned, we generate this:
f6 (int a, int b)
{
int _2;
unsigned int _3;
unsigned int b.5_5;
unsigned int _6;
unsigned int _7;
int _8;
<bb 2>:
_2 = a_1(D) * -3;
_3 = (unsigned int) _2;
b.5_5 = (unsigned int) b_4(D);
_6 = _3 + b.5_5;
_7 = _6 * 4294967294;
_8 = (int) _7;
return _8;
}
But I see no other way ;(.