https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120839

--- Comment #4 from H.J. Lu <hjl.tools at gmail dot com> ---
User alignment is ignored for parameters passed on stack:

static unsigned int
ix86_function_arg_boundary (machine_mode mode, const_tree type) 
{
  unsigned int align;
  if (type)
    {
      /* Since the main variant type is used for call, we convert it to
         the main variant type.  */
      type = TYPE_MAIN_VARIANT (type);
      align = TYPE_ALIGN (type);
      if (TYPE_EMPTY_P (type))
        return PARM_BOUNDARY;
    }
  else  
    align = GET_MODE_ALIGNMENT (mode);

But RTL expansion has

(insn 5 2 6 2 (set (reg:XF 100)
        (mem/c:XF (reg/f:DI 92 virtual-incoming-args) [1 f.a+0 S16 A256]))
"x.c":9:8 -1
     (nil))

It should be A128, not A256.

Reply via email to