https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56223
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- There are ways of handling this case. I think the second one is better than the first. The first is mentioned here. The second would take: if (a) { foo(); b = d + e; } else { goo(); b = d -e; } and replace it with: if (a) { foo(); t = e; } else { goo(); t = -e; } b = d + t; And then because in the original case foo and goo were non-existant, PHI-OPT would replace the if statement with: t = abs(e); b = d + t;