https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85390
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- More likely we don't normally pull loads above conditionals at all especially when there is one on each side. Doing this: extern int a, b, c; int f(int x, int b, int a) { __builtin_prefetch((void *) (x ? a : b)); return c; } Shows that.