aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2008-07-30 16:13:41 +0000
committerH.J. Lu <hongjiu.lu@intel.com>2008-07-30 16:13:41 +0000
commitc7aafc42747ab50670756656374bc9ae099b7c8f (patch)
tree8d34b038f38d6092bcb951ca2badb42406dae1df
parentd93495755339859aa54dfa239d9488504ea259de (diff)
2008-07-30 H.J. Lu <hongjiu.lu@intel.com>
* cfgexpand.c (expand_stack_alignment): Set stack_realign_tried. * dwarf2out.c (based_loc_descr): Check crtl->stack_realign_tried for stack alignment. * function.h (rtl_data): Add stack_realign_tried. Update comments. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/stack@138326 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog.stackalign10
-rw-r--r--gcc/cfgexpand.c1
-rw-r--r--gcc/dwarf2out.c3
-rw-r--r--gcc/function.h17
4 files changed, 23 insertions, 8 deletions
diff --git a/gcc/ChangeLog.stackalign b/gcc/ChangeLog.stackalign
index 7761a495efe..a221aa7ad79 100644
--- a/gcc/ChangeLog.stackalign
+++ b/gcc/ChangeLog.stackalign
@@ -1,3 +1,13 @@
+2008-07-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * cfgexpand.c (expand_stack_alignment): Set stack_realign_tried.
+
+ * dwarf2out.c (based_loc_descr): Check crtl->stack_realign_tried
+ for stack alignment.
+
+ * function.h (rtl_data): Add stack_realign_tried. Update
+ comments.
+
2008-07-28 H.J. Lu <hongjiu.lu@intel.com>
* dwarf2out.c (dwarf2out_args_size_adjust): New.
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 623ad85afb4..c9faa49d4ab 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -2217,6 +2217,7 @@ expand_stack_alignment (void)
crtl->stack_realign_needed
= INCOMING_STACK_BOUNDARY < crtl->stack_alignment_estimated;
+ crtl->stack_realign_tried = crtl->stack_realign_needed;
crtl->stack_realign_processed = true;
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index cf12c13e51e..b69668127b9 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -9287,8 +9287,7 @@ based_loc_descr (rtx reg, HOST_WIDE_INT offset,
pointer + offset to access stack variables. If stack
is aligned without drap, use stack pointer + offset to
access stack variables. */
- if (fde
- && fde->stack_realign
+ if (crtl->stack_realign_tried
&& cfa.reg == HARD_FRAME_POINTER_REGNUM
&& reg == frame_pointer_rtx)
{
diff --git a/gcc/function.h b/gcc/function.h
index ebba29f3862..1153fb0b4c4 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -417,20 +417,25 @@ struct rtl_data GTY(())
/* When set, expand should optimize for speed. */
bool maybe_hot_insn_p;
- /* Nonzero if function stack realignment is needed. This flag may be
- set twice: before and after reload. It is set before reload wrt
- stack alignment estimation before reload. It will be changed after
- reload if by then criteria of stack realignment is different.
+ /* Nonzero if function stack realignment is needed. This flag may be
+ set twice: before and after reload. It is set before reload wrt
+ stack alignment estimation before reload. It will be changed after
+ reload if by then criteria of stack realignment is different.
The value set after reload is the accurate one and is finalized. */
bool stack_realign_needed;
+ /* Nonzero if function stack realignment is tried. This flag is set
+ only once before reload. It affects register elimination. This
+ is used to generate DWARF debug info for stack variables. */
+ bool stack_realign_tried;
+
/* Nonzero if function being compiled needs dynamic realigned
argument pointer (drap) if stack needs realigning. */
bool need_drap;
/* Nonzero if function stack realignment estimation is done, namely
- stack_realign_needed flag has been set before reload wrt
- estimated stack alignment info. */
+ stack_realign_needed flag has been set before reload wrt estimated
+ stack alignment info. */
bool stack_realign_processed;
/* Nonzero if function stack realignment has been finalized, namely