This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: [4.4/4.5 Regression] -fschedule-insns causes FAIL: gcc.target/i386/vararg-1.c execution test


On Wed, Apr 7, 2010 at 2:33 AM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> Hi,
>>
>> "*sse_prologue_save_insn" generates movaps on 64bit aligned memory.
>> This patch replaces movaps with movups. ?OK for trunk and 4.3/4.4/4.5
>> branches?
>
> Hmm, I guess situation is more stubble here. ?When the stack on function entry
> is aligned, the register save area will get aligned to 128bits. ?This is
> required by the ABI and used in va_arg expansion.
>
> So the patch is wrong. ?I guess the real issue here is that nothing in foo
> actually uses the alignemnt so we optimize the caller leaving misaligned stack
> per preferred_stack_alignment propagation?
>
> I guess we need to be bit cureful here - when expanding va_arg that does require alignment
> we need to bump up the alignment requirements and when doing SSE save prologue and we
> know that alignment is not needed (and thus full XMM register is never obtained) I guess
> we can end up outputing 64bit stores to optimize performance.
>

Please take a look at setup_incoming_varargs_64. It only aligns the
register save area
to 8 byte:

      set_mem_alias_set (mem, set);
      set_mem_align (mem, BITS_PER_WORD);

      /* And finally do the dirty job!  */
      emit_insn (gen_sse_prologue_save (mem, nsse_reg,
                                        GEN_INT (cum->sse_regno), label));

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]