http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54471
--- Comment #9 from Marc Glisse <glisse at gcc dot gnu.org> 2012-11-21 17:18:47
UTC ---
Jakub, your patch makes sense to me (or min0.is_zero() and min1.is_zero()). I
am ashamed I managed to get products with [0,n] (with n larger than MAX/2)
wrong. Good thing Kenneth Zadeck's wide_int will soon allow us to remove most
of this horrible code.
Another test that shows the error (optimizes away the call to g):
void g();
void h();
void f(unsigned __int128 x){
if(x>(unsigned __int128)(-3))return;
unsigned __int128 y=2*x;
if(y==42) g();
else h();
}