https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85234
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Here is the testcase for the constants besides 0:L
```
#define N 3
#define unsigned int
#define cmp ==
#define M 0xf0000000u
_Bool f(unsigned x, int t)
{
return (x << N) cmp (M << N);
}
_Bool f1(unsigned x, int t)
{
return ((x^M) & (-1u>>N)) cmp 0;
}
_Bool f2(unsigned x, int t)
{
return (x & (-1u>>N)) cmp (M & (-1u>>N));
}
_Bool g(unsigned x, int t)
{
return (x >> N) cmp M;
}
_Bool g2(unsigned x, int t)
{
_Bool tttt = 0;
if (tttt)
return 0;
return (x & (-1u<<N)) cmp (M << N);
}
#if M==0
_Bool g1(unsigned x, int t)
{
return (x >= (1u<<N)) cmp M;
}
#endif
```
The tttt is defined somehow but I can't figure it out right now.
Note for f, The bottom N bits need not to be set, that is basically what (M <<
N) specifies.