http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58122
Bug ID: 58122 Summary: loops are not evaluated at compile time if loop count > 17 Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: olegendo at gcc dot gnu.org This one was originally reported here: http://gcc.gnu.org/ml/gcc-help/2013-08/msg00124.html The original example was: #include <stdio.h> template <typename T> inline T const& max (T const& a, T const& b) { return a < b ? b : a; } int main() { long long unsigned sum = 0; for (int x = 1; x <= 100000000; x++) sum += max (x, x + 1); printf("%llu\n", sum); } It seems that GCC 4.7 was able to evaluate the loop at compile time and reduce it to a constant value, but GCC 4.8 fails to do so. I've also briefly checked with trunk rev 201282 and the problem seems to be still there. Here is a reduced test case: int test (void) { int sum = 0; for (int x = 0; x < 100; x++) sum += x; return sum; } I've checked this with an SH cross compiler setup, but I don't think it matters. The loops do get eliminated if the number of loop iterations is max. 17, for both the reduced example and the originally reported case.