https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66142
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Ah, but fre2 is able to optimize those: D.2881[_12].dir.x = x_13; ... _32 = MEM[(const struct Ray *)&D.2881][_12].dir.x; cases to _32 = x_13; The problem in FRE2 is only with the MEM_REFs. If in the testcase - ray.org = p; + ray.org.x = p.x; + ray.org.y = p.y; then FRE2 handles it completely and the problem is the same between -fopenmp and -fno-openmp - ifcvt not ifconverting the loop.