https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65028
--- Comment #37 from H.J. Lu <hjl.tools at gmail dot com> ---
(In reply to Jan Hubicka from comment #36)
> Hi,
> I do not really see the reason for wrong code, but the merging logic seems
> weird for me. There is no merging done when we get two different alignments
> and also we seem to immediately drop lattice to bottom when the incomming
> parameter alignment has no .known bit set. This means we do pesimistic
> propagation.
>
> I..e in testcase
>
> void *b;
> __attribute__ ((noinline))
> static void a (void *a)
> {
> memcpy (a,b,1000000);
> }
> static void aa (void *a) __attribute__ ((alias("a")));
>
> tt(void)
> {
> int i[10000];
> short c;
>
> aa(&c);
> a(i);
> }
>
> We end up with algnment unkonwn instead of a. (did not managed to reproduce
> the wrong alignment here). What about the following:
Can you upload the patch as an attachment so that I can try it on x32? Thanks.