Commit 3396aba5 by Jakub Jelinek Committed by Jakub Jelinek

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
parent a70e9985
2014-01-09 Jakub Jelinek <jakub@redhat.com> 2014-01-09 Jakub Jelinek <jakub@redhat.com>
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.
PR tree-optimization/59622 PR tree-optimization/59622
* gimple-fold.c (gimple_fold_call): Fix a typo in message. For * gimple-fold.c (gimple_fold_call): Fix a typo in message. For
__builtin_unreachable replace the OBJ_TYPE_REF call with a call to __builtin_unreachable replace the OBJ_TYPE_REF call with a call to
......
...@@ -1215,8 +1215,11 @@ expand_one_var (tree var, bool toplevel, bool really_expand) ...@@ -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 we conservatively assume it will be on stack even if VAR is
eventually put into register after RA pass. For non-automatic eventually put into register after RA pass. For non-automatic
variables, which won't be on stack, we collect alignment of variables, which won't be on stack, we collect alignment of
type and ignore user specified alignment. */ type and ignore user specified alignment. Similarly for
if (TREE_STATIC (var) || DECL_EXTERNAL (var)) 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), align = MINIMUM_ALIGNMENT (TREE_TYPE (var),
TYPE_MODE (TREE_TYPE (var)), TYPE_MODE (TREE_TYPE (var)),
TYPE_ALIGN (TREE_TYPE (var))); TYPE_ALIGN (TREE_TYPE (var)));
......
2014-01-09 Jakub Jelinek <jakub@redhat.com> 2014-01-09 Jakub Jelinek <jakub@redhat.com>
PR middle-end/47735
* gcc.target/i386/pr47735.c: New test.
PR tree-optimization/59622 PR tree-optimization/59622
* g++.dg/opt/pr59622-2.C: New test. * g++.dg/opt/pr59622-2.C: New test.
* g++.dg/opt/pr59622-3.C: New test. * g++.dg/opt/pr59622-3.C: New test.
......
/* PR middle-end/47735 */
/* { dg-do compile } */
/* { dg-options "-O2 -fomit-frame-pointer" } */
unsigned
mulh (unsigned a, unsigned b)
{
unsigned long long l __attribute__ ((aligned (32)))
= ((unsigned long long) a * (unsigned long long) b) >> 32;
return l;
}
/* No need to dynamically realign the stack here. */
/* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" } } */
/* Nor use a frame pointer. */
/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment