http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43814
--- Comment #11 from Maxim Kuvyrkov <mkuvyrkov at gcc dot gnu.org> 2010-12-04 19:04:29 UTC --- I looked into CCP a bit and it seems like no alignment analysis whatsoever is done for either &tmp nor &src[0] in == __builtin_memcpy (&tmp, &src[0], 8); == That is because 1. ccp_initialize() sees __builtin_memcpy, 2. infers that its return value varies, 3. exits without processing the arguments. If the code was structured like so == D1 = &tmp; D2 = &src[0]; __builtin_memcpy (D1, D2, 8); == CCP would have a better chance inferring alignment for D1 and D2. I'm mostly walking in the dark trying improve CCP, so any pointers would be appreciated.