http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58343
--- Comment #2 from Jeffrey A. Law <law at redhat dot com> --- Zhendong, Thanks for the testcase. What's happening here is the code to allow threading through a simple forwarder block exposes an opportunity to build a significantly deeper jump threading path than was possible in the past. In the middle of that path is a loop header. We attempt to thread through the loop header to a point in the middle of the loop. This is generally considered a bad idea (creates irreducible regions among other things) and the jump threading code attempts to prune these kind of jump threading requests. However, due to limitations in how these undesirable cases are detected, it was missed. And the shape of the CFG was such that the code to handle jump threads though loop headers would fail catastrophically. I've got a fix for this in testing.