https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68894
--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I have a patch which fixes the phiopt issue I saw. The problem is when do_hoist_loads is true (which is !early and -fhoist-adjacent-loads ), we would not do the diamond case for phiopt in later passes. In the above case, pre needs to hoist the load first and then we could get to it with phiopt4. You can see the same effect with: -O2 -fno-hoist-adjacent-loads -fno-tree-vectorize