On Tue, Oct 26, 2010 at 1:12 PM, Paul Koning <paul_kon...@dell.com> wrote: > > On Oct 26, 2010, at 1:27 PM, Dave Korn wrote: > >> On 26/10/2010 17:16, Paul Koning wrote: >>> On Oct 25, 2010, at 9:28 PM, Dave Korn wrote: >>>> ... >>>> >>>> What happens if you dereference i and j before the memcpy in foo? Do you >>>> then get int-sized shared alignment in movmemM? >>>> >>>> extern int *i, *j; void foo (void) { *i; *j; memcpy (i, j, 10); } >>> >>> That doesn't make any difference; I still get alignment 1. >>> >> >> That sounds like a missed optimisation opportunity to me, but maybe there's >> some reason the compiler can't infer a larger alignment. (Or maybe the reads >> got discarded, you might need volatile to avoid that?) > > No, they weren't discarded, I can see them in the output assembler code. > Actually, I wrote *i = 20; *j = 10;
Alignment propagation (bit-CCP) doesn't (yet) exploit information from such a load (on x86 it couldn't - that architecture can handle unaligned loads just fine). Richard. > paul > > >