https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64905
H.J. Lu <hjl.tools at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2015-02-02
CC| |ubizjak at gmail dot com
Component|translation |target
Target Milestone|--- |5.0
Ever confirmed|0 |1
--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> ---
aligned_operand has
if (MEM_ALIGN (op) >= 32)
return true;
op = XEXP (op, 0);
/* Pushes and pops are only valid on the stack pointer. */
if (GET_CODE (op) == PRE_DEC
|| GET_CODE (op) == POST_INC)
return true;
/* Decode the address. */
ok = ix86_decompose_address (op, &parts);
gcc_assert (ok);
if (parts.base && GET_CODE (parts.base) == SUBREG)
parts.base = SUBREG_REG (parts.base);
if (parts.index && GET_CODE (parts.index) == SUBREG)
parts.index = SUBREG_REG (parts.index);
/* Look for some component that isn't known to be aligned. */
if (parts.index)
{
if (REGNO_POINTER_ALIGN (REGNO (parts.index)) * parts.scale < 32)
return false;
}
if (parts.base)
{
if (REGNO_POINTER_ALIGN (REGNO (parts.base)) < 32)
return false;
}
if (parts.disp)
{
if (!CONST_INT_P (parts.disp)
|| (INTVAL (parts.disp) & 3))
return false;
}
/* Didn't find one -- this must be an aligned address. */
return true;
It returns true for
(mem:HI (reg/f:DI 6 bp [orig:90 *a_p_2(D) ] [90]) [2 *_3+0 S2 A16])
Why do we need to decompose address when we have MEM_ALIGN (op)?