------- Comment #33 from hjl dot tools at gmail dot com  2009-03-03 14:48 
-------
(In reply to comment #32)
> I don't see the reason for && optimize_function_for_size_p (cfun), care to 
> back
> up with benchmarks that forcing dynamic realignment for long long variables
> with -mpreferred-stack-boundary=2 improves performance rather than slows 
> things
> down (because of the dynamic realignment)?
> 
> Also, I fail to see why 2 hunks in ix86_local_alignment are needed instead of
> just one.  The second hunk won't catch !type case, where we have just mode 
> (but
> no need to test type && there, type is always non-NULL).
> 
> I think:
> --- i386.c2009-03-02 09:45:43.000000000 +0100
> +++ i386.c2009-03-03 11:35:21.000000000 +0100
> @@ -19351,6 +19351,14 @@ unsigned int
>  ix86_local_alignment (tree type, enum machine_mode mode,
>        unsigned int align)
>  {
> +  /* Don't do dynamic stack realignment for long long objects with
> +     -mpreferred-stack-boundary=2.  */
> +  if (!TARGET_64BIT
> +      && align == 64
> +      && ix86_preferred_stack_boundary < 64 
> +      && (mode == DImode || (type && TYPE_MODE (type) == DImode)))
> +    align = 32;
> +
>    /* If TYPE is NULL, we are allocating a stack slot for caller-save
>       register in MODE.  We will return the largest alignment of XF
>       and DF.  */
> 
> should be sufficient.
> 

I am not against this patch. I just want to mention that

---
void foo (unsigned long long *);

void
bar (void)
{
  unsigned long long l __attribute__ ((aligned(8)));
  foo (&l);
}
---

won't work with -m32 -Os -mpreferred-stack-boundary=2 when
this patch is applied.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39137

Reply via email to