https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117638
Bug ID: 117638 Summary: [14/15 regression] No loop splitting and bounds check not optimized out with -D_GLIBCXX_ASSERTIONS Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: sjames at gcc dot gnu.org Target Milestone: --- With a modified version of g++.dg/tree-ssa/loop-split-1.C (s/reserve/resize): ``` #include <vector> #include <cmath> constexpr unsigned s = 100000000; int main() { std::vector<float> a, b, c; a.resize(s); b.resize(s); c.resize(s); for(unsigned i = 0; i < s; ++i) { if(i == 0) a[i] = b[i] * c[i]; else a[i] = (b[i] + c[i]) * c[i-1] * std::log(i); } } ``` I see the following: * With GCC 13 using -D_GLIBCXX_ASSERTIONS, we split the loop. * With GCC 14 and trunk using -D_GLIBCXX_ASSERTIONS, we can't. * We don't seem able to optimise out the bounds check with GCC 14 and trunk (and we do it on every iteration!)