http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55281
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-11-12 11:46:30 UTC --- Actually, that shorter testcase ICEs for a different reason. static inline float bar (float k, float j) { float l = 0.0f; if (k > j) l = k; float t = k / j; float v = t * t; if (k == 0) v = 0.0f; if (t > 0.4f) v += 0.7; if (l != 0) v = 1.5 - v; return v; } void foo (int *a, int b, float *d, float *e, int *f) { for (int l = 0; l != b; ++l) for (int i = 0; i != 8; ++i) f[i] = e[i] + bar (a[i], d[i]); } is where the original testcase ICEs (-Ofast, both C and C++).