On Fri, Jul 4, 2025 at 4:10 PM H.J. Lu <hjl.to...@gmail.com> wrote: > > On Fri, Jul 4, 2025 at 4:09 PM H.J. Lu <hjl.to...@gmail.com> wrote: > > > > On Fri, Jul 4, 2025 at 4:02 PM Richard Biener > > <richard.guent...@gmail.com> wrote:
> > > > > > > /* If we can't trust the parm stack slot to be aligned enough for its > > ultimate type, don't use that slot after entry. We'll make another > > stack slot, if we need one. */ > > if (stack_parm > > && ((GET_MODE_ALIGNMENT (data->nominal_mode) > MEM_ALIGN (stack_parm) > > && ((optab_handler (movmisalign_optab, data->nominal_mode) > > != CODE_FOR_nothing) > > || targetm.slow_unaligned_access (data->nominal_mode, > > MEM_ALIGN (stack_parm)))) > > || (data->nominal_type > > && TYPE_ALIGN (data->nominal_type) > MEM_ALIGN (stack_parm) This is true. > > && MEM_ALIGN (stack_parm) < PREFERRED_STACK_BOUNDARY))) This is false as both are 16 bytes. This means that we only make a copy if the argument alignment < 16 bytes and the desired alignment > the argument alignment. It isn't the case here. > > stack_parm = NULL; > > > > (gdb) call debug (stack_parm) > > (mem/c:BLK (reg/f:DI 92 virtual-incoming-args) [2 f+0 S32 A128]) > > (gdb) call debug (data->nominal_type) > > <record_type 0x7fffe99cc348 c sizes-gimplified BLK > > size <integer_cst 0x7fffe98242d0 type <integer_type 0x7fffe98220a8 > > bitsizetype> constant 256> > > unit-size <integer_cst 0x7fffe98243a8 type <integer_type > > 0x7fffe9822000 sizetype> constant 32> > > user align:256 warn_if_not_align:0 symtab:0 alias-set -1 > > canonical-type 0x7fffe99cc2a0 > > fields <field_decl 0x7fffe98318c0 a > > type <real_type 0x7fffe982a3f0 long double sizes-gimplified XF > > size <integer_cst 0x7fffe9802fa8 constant 128> > > unit-size <integer_cst 0x7fffe9802fc0 constant 16> > > align:128 warn_if_not_align:0 symtab:0 alias-set 1 > > canonical-type 0x7fffe982a3f0 precision:80 > > pointer_to_this <pointer_type 0x7fffe982aa80>> > > XF z.c:2:15 size <integer_cst 0x7fffe9802fa8 128> unit-size > > <integer_cst 0x7fffe9802fc0 16> > > align:128 warn_if_not_align:0 offset_align 128 decl_not_flexarray: 1 > > offset <integer_cst 0x7fffe9802f90 constant 0> > > bit-offset <integer_cst 0x7fffe9802fd8 constant 0> context > > <record_type 0x7fffe99cc2a0> > > chain <field_decl 0x7fffe9831960 b type <real_type > > 0x7fffe982a3f0 long double> > > XF z.c:3:15 size <integer_cst 0x7fffe9802fa8 128> > > unit-size <integer_cst 0x7fffe9802fc0 16> > > align:128 warn_if_not_align:0 offset_align 128 > > decl_not_flexarray: 1 offset <integer_cst 0x7fffe9802fc0 16> > > bit-offset <integer_cst 0x7fffe9802fd8 0> context <record_type > > 0x7fffe99cc2a0>>> > > pointer_to_this <pointer_type 0x7fffe99cc150>> > > (gdb) > > > > It doesn't check DECL_USER_ALIGN. > > > > -- > > H.J. > > Nowhere in function.cc DECL_USER_ALIGN is checked. > > -- > H.J. -- H.J.