https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112418
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So looking into what LLVM does here (GVN-sink), The order inside the bb matter. Example: ``` int g(int); int f(int a, int b, int c, int l, int j) { int d, e; if (c) { e = b >> 2; d = j / l; } else { d = a / l; e = b >> 1; } return g(d / e); } int g(int); int f1(int a, int b, int c, int l, int j) { int d, e; if (c) { e = b >> 2; d = j / l; } else { e = b >> 1; d = a / l; } return g(d + e); } ``` They lockstep backwards on the 2 bbs that define e/d. But since the older is different in f, they don't do anything. This is different from what I am doing. So I can't learn from it at all.