https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109780
--- Comment #33 from Uroš Bizjak <ubizjak at gmail dot com> ---
FTR, ix86_find_max_used_stack_alignment increases alignment only when stack
pointer or frame pointer are explicitly mentioned in :
/* Find the maximum stack alignment. */
subrtx_iterator::array_type array;
FOR_EACH_SUBRTX (iter, array, PATTERN (insn), ALL)
if (MEM_P (*iter)
&& (reg_mentioned_p (stack_pointer_rtx,
*iter)
|| reg_mentioned_p (frame_pointer_rtx,
*iter)))
{
unsigned int alignment = MEM_ALIGN (*iter);
if (alignment > stack_alignment)
stack_alignment = alignment;
This RTX does *not* trigger stack alignment increase in the above code:
(insn 94 20 95 5 (set (mem/c:V16QI (reg/f:DI 1 dx [110]) [0 MEM <char[1:40]>
[(void *)&k]+0 S16 A128])
(reg:V16QI 21 xmm1 [orig:122 MEM <char[1:40]> [(void *)&k] ] [122]))
"pr109780.c":11:12 2015 {movv16qi_internal}
(nil))