------- Comment #3 from rguenth at gcc dot gnu dot org  2010-09-16 10:17 -------
DECL_ALIGN of d is set to 128 (but appearantly it isn't ensured it'll end up
that way).  DECL_ALIGN is adjusted here:

Old value = 32
New value = 128
expand_one_stack_var_at (decl=0x7ffff5ae90a0, offset=-16)
    at /space/rguenther/src/svn/trunk/gcc/cfgexpand.c:739
739           DECL_USER_ALIGN (decl) = 0;

so on trunk get_object_alignment of the MEM_REF will return 128 and thus
we do not run into unaligned move expansion here:

        if (mode != BLKmode
            && (unsigned) align < GET_MODE_ALIGNMENT (mode)
            /* If the target does not have special handling for unaligned
               loads of mode then it can use regular moves for them.  */
            && ((icode = optab_handler (movmisalign_optab, mode))
                != CODE_FOR_nothing))

manually setting alignment back to 32 in gdb results in ok asm.

        movlps  (%esp), %xmm0
        movhps  8(%esp), %xmm0
        mulps   .LC4, %xmm0

instead of

        mulps   (%esp), %xmm0

Appearantly stack alignment code doesn't work.


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hjl at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45678

Reply via email to