[Bug tree-optimization/46309] optimization a==3||a==1
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Sep 24 09:57:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46309
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
Component|c++ |tree-optimization
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-09-24 08:36:27 UTC ---
With s/bool/int/ we generate identical code for both, without jumps.
Anyway, more important is that we don't seem to optimize the
x == CST1 || x == CST2 where __builtin_popcount (CST1 ^ CST2) == 1
in fold-const.c and don't even optimize range tests if the constants alternate
and, more importantly, don't seem to do anything similar to fold_range_test at
the GIMPLE level.
int
f1 (int a, int b)
{
int v1 = (a == 3);
int v2 = (a == 1);
int v3 = (a == 4);
int v4 = (a == 2);
return v1 || v2 || v3 || v4;
}
int
f2 (int a, int b)
{
int v1 = (a == 1);
int v2 = (a == 2);
int v3 = (a == 3);
int v4 = (a == 4);
return v1 || v2 || v3 || v4;
}
int
f3 (int a, int b)
{
int v1 = (a == 3);
int v2 = (a == 1);
return v1 || v2;
}
int
f4 (int a, int b)
{
int v1 = (a == 1);
int v2 = (a == 2);
return v1 || v2;
}
int
f5 (int a, int b)
{
return a == 3 || a == 1 || a == 4 || a == 2;
}
int
f6 (int a, int b)
{
return a == 1 || a == 2 || a == 3 || a == 4;
}
int
f7 (int a, int b)
{
return a == 3 || a == 1;
}
int
f8 (int a, int b)
{
return a == 1 || a == 2;
}
int
f9 (int a, int b)
{
return a == 3 || a == 1 || a == 2 || a == 4;
}
More information about the Gcc-bugs
mailing list