https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68695
--- Comment #21 from Jakub Jelinek <jakub at gcc dot gnu.org> --- int foo (int x, int y, int a) { int i = x; int j = y; if (__builtin_expect (x > y, 0)) { i = a; j = i; } return i * j; } shows that even without if IRA does the right job we get the same code as before. But the #c20 testcase does (or should have) approx. equal frequencies of the bbs.