https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68198
--- Comment #8 from Jeffrey A. Law <law at redhat dot com> --- Creating a forwarder outside the path doesn't help since you still have to have an edge to the forwarder from each copy of the block with the SWITCH_EXPR. The solution is to realize that a path containing a SWITCH_EXPR that does not have a compile-time determinable destination probably isn't worth optimizing to start with! Essentially we're duplicating a block with 1k outgoing edges to eliminate a single conditional later in the path. From a cost/benefit analysis that's just silly. As I mentioned, this kind of situation was possible with the old threader too, it was just too dumb to discover the path.