aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgexpand.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2014-01-09 21:12:36 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2014-01-09 21:12:36 +0100
commit3396aba5384e904199530f8efea4c1eaaab51605 (patch)
tree8aa86e6cd0afa95c4caa85d417ffe6d223a72f61 /gcc/cfgexpand.c
parenta70e9985fdc020e89eace3d72108606c47150fc5 (diff)
downloadgcc-3396aba5384e904199530f8efea4c1eaaab51605.zip
gcc-3396aba5384e904199530f8efea4c1eaaab51605.tar.gz
gcc-3396aba5384e904199530f8efea4c1eaaab51605.tar.bz2
re PR middle-end/47735 (Unnecessary adjustments to stack pointer)
PR middle-end/47735 * cfgexpand.c (expand_one_var): For SSA_NAMEs, if the underlying var satisfies use_register_for_decl, just take into account type alignment, rather than decl alignment. * gcc.target/i386/pr47735.c: New test. From-SVN: r206493
Diffstat (limited to 'gcc/cfgexpand.c')
-rw-r--r--gcc/cfgexpand.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 5f14d81..c0cbeb3 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -1215,8 +1215,11 @@ expand_one_var (tree var, bool toplevel, bool really_expand)
we conservatively assume it will be on stack even if VAR is
eventually put into register after RA pass. For non-automatic
variables, which won't be on stack, we collect alignment of
- type and ignore user specified alignment. */
- if (TREE_STATIC (var) || DECL_EXTERNAL (var))
+ type and ignore user specified alignment. Similarly for
+ SSA_NAMEs for which use_register_for_decl returns true. */
+ if (TREE_STATIC (var)
+ || DECL_EXTERNAL (var)
+ || (TREE_CODE (origvar) == SSA_NAME && use_register_for_decl (var)))
align = MINIMUM_ALIGNMENT (TREE_TYPE (var),
TYPE_MODE (TREE_TYPE (var)),
TYPE_ALIGN (TREE_TYPE (var)));