https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68636
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Ok x86_64 I get if (zeroIsCavium_2 == 0) goto <bb 4>; else goto <bb 3>; <bb 3>: <bb 4>: # PT = nonlocal # ALIGN = 536870912, MISALIGN = 8388720 # iftmp.0_1 = PHI <3229614192B(2), 2692743280B(3)> _4 ={v} *iftmp.0_1; x ={v} _4; return; thus alignment should be sufficient and *iftmp.0_1 should expand to an aligned load. So you have to dig into RTL expansion to see where it goes wrong for you.