http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52005
Bug #: 52005 Summary: tree-ssa-combineif does not work with some cfgs Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassig...@gcc.gnu.org ReportedBy: pins...@gcc.gnu.org Take: int f(int x, int a, int b) { int t = 0; int c = 1 << a; if (!(x & 1)) t = 0; else if (x & (1 << 2)) t = 1; else t = 0; return t; } int f1(int x, int a, int b) { int t = 0; int c = 1 << a; if (x & 1) if (x & (1 << 2)) t = 1; return t; } --- CUT --- Both codes are the same. The first case is not optimized while the second is. The reason is we have code in ifcombine which only looks for the second case. While the first is not caught.