https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61409
--- Comment #13 from Jeffrey A. Law <law at redhat dot com> --- So we don't thread this case because of the limits we place on the number of statements in the duplicated block. If --param max-jump-thread-duplication-stmts=16 is added to the command line, jump threading will kick in creating the pseudo-code I posted in c#11. For reference, the default value of that param is 15. What I don't understand from c#4 is uninit can't simplify this condition: if (_35 == 4611686018595160064 (.AND.) (.NOT.) _31 != 5) is false While we may not know the full condition, does realizing that the (*.NOT.) _31 != 5 is totally pointless help?