No. Since a huge number of loop optimizations are dependent on trip count detection, this is not in fact the case. Loop trip count detection is ruined by making signed overflow implementation defined.
See this thread from just last week explaining this: https://news.ycombinator.com/item?id=11653940
Additionally, there's less of a difference between "undefined" and "implementation defined" than you might think. Consider the example in the original post:
if (x + y < x) {
return 0; /* Overflow */
}
length = x + y;
With implementation defined overflow, the compiler is still free to remove this check, because the value of "x + y" would become an undefined value on overflow, and comparisons on undefined values are themselves undefined. If you want the compiler to do anything else, then you're proposing a drastic overhaul of (for example) LLVM's notion of "undef" [1], one that would have massive consequences for optimization.