https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65337
--- Comment #3 from Jan Hubicka <hubicka at gcc dot gnu.org> --- Indeed, the cd-dce is one the worst documented of the tradition SSA optimizations. I commented on this to Jakum on IRC. The mechanizm that should prevent conditional from being removed is the control dependency. For every PHI argument, the control dependent conditional is marked live. So it is a question why the control dependent conditional is not live here - one of problems I remember was that control dependency is defined for basic blocks, while PHI handling needs it for edges. This mostly does not matter because critical edges are split, but with abnormal edges perhaps we manage to get things wrong. I am finishing paper today and fly to Vancouver at Tuesday, but will try to look into this as time allows.