[Bug target/39137] [4.4 Regression] -mpreferred-stack-boundary=2 causes lots of dynamic realign
jakub at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Tue Mar 3 10:36:00 GMT 2009
------- Comment #32 from jakub at gcc dot gnu dot org 2009-03-03 10:36 -------
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.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39137
More information about the Gcc-bugs
mailing list