[Bug target/98438] Rather bad optimization of midpoint implementation for __int128 (and other types)
gabravier at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Dec 31 18:38:10 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98438
--- Comment #2 from Gabriel Ravier <gabravier at gmail dot com> ---
Directly based off the emitted GIMPLE, here's a self-contained example that
emits the same assembly I was observing before :
using _Tp = int;
using _Up = unsigned;
_Tp f(_Tp __a, _Tp __b)
{
_Up __sign_bit_12;
_Up __diff_11;
unsigned int __b_0_1;
unsigned int __a_1_2;
bool _3;
unsigned int _4;
unsigned int _5;
unsigned int _7;
unsigned int _8;
unsigned int _13;
_Tp _14;
unsigned int _17;
__b_0_1 = (unsigned int) __b;
__a_1_2 = (unsigned int) __a;
__diff_11 = __b_0_1 - __a_1_2;
_3 = __b < __a;
__sign_bit_12 = (_Up) _3;
_4 = __diff_11 >> 1;
_5 = __sign_bit_12 << 31;
_13 = _4 + _5;
_7 = __diff_11 & __sign_bit_12;
_17 = __a_1_2 + _7;
_8 = _13 + _17;
_14 = (_Tp) _8;
return _14;
}
More information about the Gcc-bugs
mailing list